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