分类: WINDOWS
2011-09-12 20:06:54
如果 PnpPrepareHardware 执行错误导致函数返回失败,我们就会在设备管理器中看到对应的设备那一栏中被标上一个黄色感叹号,表示此设备不可用。如 PnpPrepareHardware 返回错误,系统会调用 DeviceReleaseHardware 释放系统资源。
DeviceReleaseHardware 有点类似WDM框架下,IRP_MN_STOP_DEVICE所对应的子分发函数。
如果设备被异常拔除,回调函数 PnpSurpriseRemove 函数会被调用。值得注意的是,如果 PnpSurpriseRemove 被调用的话,紧接着 DeviceReleaseHardware 也一定会被调用。所以虽然我们也可以在 PnpSurpriseRemove 中释放系统资源,但如果把它们都统一到 DeviceReleaseHardware 中的话会更好。如果没有特殊需求,一般可忽略这个回调。同样,这个回调函数,对应于WDM框架下的IRP_MN_SURPRISE_REMOVE子分发ID所对应的处理函数。
PwrD0Entry 和 PwrD0 Exit 两个回调比较重要。前者当设备电源状态进入D0时被调用,后者当设备电源状态离开D0时被调用。这两个回调函数合在一起,恰可对于WDM框架下 IRP_MN_SET_POWER子分发所对应的处理函数。联系到我们为CY001注册的两个电源策略:休眠和唤醒。我们就可以这样来说:当设备休眠的时 候,PwrD0Exit将被调用;当设备唤醒的时候, PwrD0Entry 将被调用。