当 AVStream 收到 IRP_MN_SET_POWER 请求时,它会调用微型驱动程序的 AVStrMiniDeviceSetPower 回调例程(如果微型驱动程序提供了该例程)。
当 AVStream 收到 KSPROPERTY_CONNECTION_STATE 属性的集请求时,它会调用微型驱动程序的 AVStrMiniPinSetDeviceState 回调例程(如果微型驱动程序提供了该例程)。
当系统从睡眠状态唤醒时,AVStream 可能会按与预期顺序相反的顺序调用微型驱动程序的 AVStrMiniPinSetDeviceState 和 AVStrMiniDeviceSetPower 回调例程。 例如, AVStrMiniPinSetDeviceState 可以在 AVStrMiniDeviceSetPower 之前调用。
因此, 驱动程序必须准备好处理预期回调顺序的此类反转。
当系统进入睡眠状态时,不会发生这种逆转。 关机时,这两个回调例程始终按预期顺序发生。 例如, AVStrMiniPinSetDeviceState 始终在 AVStrMiniDeviceSetPower 之前调用。
如果发生此逆转,则整个序列如下所示:
首先,发生关机顺序:
调用 AVStrMiniPinSetDeviceState ,请求将设备状态从 KSSTATE_RUN 更改为KSSTATE_PAUSE。
调用 AVStrMiniDeviceSetPower 时,请求将电源状态从 D0 更改为 D2/D3。
此时,系统处于睡眠状态。
接下来,将执行通电顺序:
调用 AVStrMiniDeviceSetPower 时,请求将电源状态从 D2/D3 更改为 D0。
调用 AVStrMiniPinSetDeviceState ,请求将设备状态从 KSSTATE_PAUSE 更改为KSSTATE_RUN。
在此方案中,步骤 5 和 6 是与预期顺序相反的步骤。
此外,当应用程序进行流式处理且系统启动关机序列时,正在运行的捕获图始终处于暂停状态。 如果图形已停止,它将保持停止状态。