取り出し可能デバイスのサポート
取り出し可能デバイスは、ドッキング ステーションに挿入と、そこから取り出すことができるデバイスです。 通常、取り出し可能デバイスのバス電源は、デバイスを取り外す前に無効にする必要があります。
デバイスが取り出し可能な場合、デバイスのバス ドライバーは、デバイスの WDF_DEVICE_PNP_CAPABILITIES 構造体で EjectSupported メンバーを設定する必要があります。
バス ドライバーは、列挙された子デバイスの 1 つが取り出されようとしていると判断すると、WdfPdoRequestEject または WdfChildListRequestChildEject を呼び出します。 たとえば、バス ドライバーは、ユーザーが取り出しボタンを押したことを検出する場合があります。
ドライバーが WdfChildListRequestChildEject または WdfPdoRequestEject を呼び出すと、PnP マネージャーは順序の整った削除シナリオを使用して、デバイスが削除されていることをデバイスのドライバーに通知します。 フレームワークがデバイスのバスのバス ドライバーで EvtDeviceReleaseHardware コールバック関数を呼び出した後、フレームワークはバス ドライバーの EvtDeviceEject コールバック関数を呼び出します。このコールバック関数は、デバイスを物理的に取り出すために必要なすべての操作を実行します。
デバイスを取り出すと、別のデバイスも取り出される場合は、バス ドライバーは取り出しの関係リストを含めることができます。 ユーザーがデバイスを削除すると、PnP マネージャーは、リスト内のデバイスのドライバーに、そのデバイスも削除されることを通知します。 取り出しの関係リストを保持するため、バス ドライバーは WdfPdoAddEjectionRelationsPhysicalDevice、WdfPdoRemoveEjectionRelationsPhysicalDevice、および WdfPdoClearEjectionRelationsDevices メソッドを使用できます。
デバイスをドッキング ステーションでロックできる場合、バス ドライバーは、デバイスの WDF_DEVICE_PNP_CAPABILITIES 構造体で LockSupported メンバーを設定する必要があります。 バス ドライバーは、EvtDeviceSetLock コールバック関数も提供する必要があります。このコールバック関数は、デバイスをロックして取り出しを無効にするか、デバイスのロックを解除して取り出しを有効にします。