バス ドライバーの電源切断および取り外しシーケンス
次の図は、バスに接続されているデバイスの電源を切って取り外すときに、フレームワークが KMDF バス ドライバーのイベント コールバック関数を呼び出す順序を示しています。 このシーケンスは、図の上部で、動作中の電源状態 (D0) の操作デバイスから始まります:
デバイスがシステムから物理的に取り外されるまで、フレームワークは PDO を削除しません。 たとえば、ユーザーがDevice Managerでデバイスを無効にしたり、 Safely Remove Hardwareユーティリティでデバイスを停止したりしても、デバイスを物理的に取り外さない場合、フレームワークは PDO を保持します。 デバイスが後で再び有効になっている場合、 物理デバイス オブジェクトの電源投入シーケンスに示すように、フレームワークは同じ PDO を使用し、EvtDevicePrepareHardwareコールバックを呼び出すことによって起動シーケンスを開始します 。
注意: 通常、フレームワークは、ドライバーが列挙するすべての子デバイスに対してEvtDeviceReleaseHardware 関数を呼び出した後、バス ドライバーのEvtDeviceReleaseHardwareコールバック関数を呼び出します。 親でデバイスの電源投入または電源切断の障害が発生した場合、フレームワークはすべての子デバイスに対して、EvtDeviceReleaseHardware関数を呼び出す前に、ドライバーのEvtDeviceReleaseHardwareを呼び出す可能性があります。 WdfDeviceInitSetReleaseHardwareOrderOnFailureを呼び出して、すべての子デバイスが取り外された後でのみ、フレームワークがバス ドライバーの EvtDeviceReleaseHardware コールバックを呼び出すことを確認することを検討してください。