设备电源管理的问题
最近在实现一个流接口驱动的设备电源管理的接口:
在相应的注册表里添加"IClass"
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Test]
"Index"=dword:1
"Prefix"="TVT"
"Dll"="Test.dll"
"Order"=dword:10
"IClass"="{A32942B7-920C-486b-B0E6-92A702A99B35}"
然后在“TVT_IOControl()”里面实现:IOCTL_POWER_CAPABILITIES,IOCTL_POWER_QUERY,IOCTL_POWER_SET,IOCTL_POWER_GET接口;完成后测试各接口工作正常;
但是发现还有些问题:跟了一下系统启动过程中的debug message,发现“TVT_Open()”在“TVT_Init()”之后被莫名其妙的执行了两次,还“TVT_Close()”了一次;系统启动过程中并没有运行AP进行“CreateFile(L"TVT1:",.....)”之类的动作,那么“TVT_Open()”是如何(在系统启动过程中)被调用的呢?
[解决办法]
系统启动之后,NK加载Device.dll(设备管理程序)
设备管理器调用ActiveDeviceEx加载BuiltIn下的驱动。
应该只会执行驱动的XXX_Init。
XXX_Open要应用层调用CreateFile才会得到执行吧。
难道DM也会去调用XXX_Open和XXX_Close。
其他地方的程序,都没有调用TVT?
[解决办法]
PM 通过 IOCTL_POWER 这些IOCTL操作 查询你的驱动,当然要Open你的驱动了,所以会有几次 XXX_Open的调用。