デバイス インターフェイス インスタンスの有効化と無効化
デバイスが正常に起動すると、インターフェイスを登録したドライバーは IoSetDeviceInterfaceState を呼び出して、インターフェイス インスタンスを有効にします。 ドライバーは、IoRegisterDeviceInterface によって返されるシンボリック リンク名とブール値 TRUE を渡して、インターフェイス インスタンスを有効にします。
ドライバーがデバイスを正常に起動できる場合は、プラグ アンド プレイ (PnP) マネージャーの IRP_MN_START_DEVICE 要求を処理しながら、このルーチンを呼び出す必要があります。
IRP_MN_START_DEVICE 要求が完了すると、PnP マネージャーは、デバイス インターフェイスの到着通知を、要求したカーネル モードまたはユーザー モード コンポーネントに発行します。 詳細については、「デバイス インターフェイス変更通知の登録」を参照してください。
デバイス インターフェイス インスタンスを無効にするには、ドライバーが IoSetDeviceInterfaceState を呼び出し、IoRegisterDeviceInterface と FALSE によって返される SymbolicLinkName を Enable の値として渡します。
ドライバーは、デバイスの IRP_MN_SURPRISE_REMOVAL または IRP_MN_REMOVE_DEVICE 要求を処理するときに、デバイスのインターフェイスを無効にする必要があります。 ドライバーがこれらの削除 IRP を処理するときにデバイスのインターフェイスを無効にしない場合は、PnP マネージャーがデバイスを削除するときにインターフェイスを無効にするため、その後これを試みないでください。
ドライバーは、デバイスが停止しているときにインターフェイスを無効にしないでください (IRP_MN_STOP_DEVICE。代わりに、デバイス インターフェイスを有効のままにし、別の IRP_MN_START_DEVICE 要求を受信するまで、I/O 要求をキューに入れる必要があります。 同様に、ドライバーは、デバイスがスリープ状態になったときにインターフェイスを無効にしないでください。 デバイスがウェイクアップするまで、I/O 要求をキューに入れる必要があります。 詳細については、「Wake-Up 機能を備えたデバイスのサポート」を参照してください。