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