PoStartNextPowerIrp の呼び出し
Windows Vista 以降では、PoStartNextPowerIrp を呼び出す必要はなく、このルーチンを呼び出しても電源管理操作は実行されません。 ただし、Windows Server 2003、Windows XP、および Windows 2000 では、ドライバーがクエリ電源 IRP または set-power IRP を処理した後、ドライバーは PoStartNextPowerIrp を呼び出して、別の電源 IRP を受け取る準備ができていることを電源マネージャーに通知する必要があります。 IRP スタックの場所が現在のドライバーを指している間、および PoCallDriver を呼び出す前に、ドライバーは PoStartNextPowerIrp を呼び出す必要があります。
ドライバーは、IRP_MN_SET_POWER ごとにこのルーチンを 1 回呼び出すか、受信した要求 IRP_MN_QUERY_POWER 呼び出す必要があります。 ドライバーは、IRP_MN_WAIT_WAKE または IRP_MN_POWER_SEQUENCE 要求を処理するときに PoStartNextPowerIrp を呼び出す必要はありません。
ドライバーが PoStartNextPowerIrp を呼び出すとき、現在の IRP スタックの場所は、現在のドライバーを指す必要があります。 一般に、この呼び出しは IoCompletion ルーチンから行うのが最適です。 PoStartNextPowerIrp は、 IoCompleteRequest、 IoSkipCurrentIrpStackLocation、および PoCallDriver の前に呼び出す必要があります。 ルーチンを他の順序で呼び出すと、システムのデッドロックが発生する可能性があります。
ドライバーが IRP に失敗した場合でも、別の電源 IRP を処理する準備ができていることを電源マネージャーに通知する PoStartNextPowerIrp を呼び出す必要があります。
次のセクションでは、ドライバーの各種類がこのルーチンを呼び出す必要がある場合を明確にします。
フィルター ドライバーからの PoStartNextPowerIrp の呼び出し