IoSetDeviceInterfaceState 関数 (wdm.h)
IoSetDeviceInterfaceState ルーチンは、以前に登録されたデバイス インターフェイス クラスのインスタンスを有効または無効にします。
構文
NTSTATUS IoSetDeviceInterfaceState(
[in] PUNICODE_STRING SymbolicLinkName,
[in] BOOLEAN Enable
);
パラメーター
[in] SymbolicLinkName
有効または無効になっているデバイス インターフェイス インスタンスを識別する文字列へのポインター。 この文字列は、IoRegisterDeviceInterface または IoGetDeviceInterfaces 以前の呼び出しから取得されました。
[in] Enable
TRUE は、デバイス インターフェイスが有効になっていることを示します。 FALSE は、デバイス インターフェイスが無効になっていることを示します。
戻り値
IoSetDeviceInterfaceState は、呼び出しが成功した場合にSTATUS_SUCCESSを返します。 このルーチンは、呼び出し元が既に有効になっているデバイス インターフェイスの有効化を要求した場合、STATUS_OBJECT_NAME_EXISTSの情報状態を返します。 考えられるエラー戻り値を次に示します。
リターン コード | 形容 |
---|---|
|
呼び出し元が、有効になっていないデバイス インターフェイスを無効にしようとしました。 |
備考
IoSetDeviceInterfaceState を使用すると、登録済みのデバイス インターフェイスのインスタンスをアプリケーションやその他のシステム コンポーネントで使用できます。 インターフェイス クラスは、IoRegisterDeviceInterface またはユーザー モードから既に登録されている必要があります。
アプリケーションとその他のシステム コンポーネントは、有効になっているインターフェイスのみを開くことができます。
通常、関数またはフィルター ドライバーは、IRP_MN_START_DEVICE IRP に応答してデバイスを正常に起動した後、TRUE に設定 有効にする を使用して、このルーチンを呼び出します。 このようなドライバーは、IRP_MN_REMOVE_DEVICE IRP または IRP_MN_SURPRISE_REMOVAL IRP に応答してデバイスを削除するときに、デバイス インターフェイス インスタンス (つまり、IoSetDeviceInterfaceState を呼び出し、を有効にして FALSE を) を 設定する必要があります。 ドライバーがこれらの削除 IRP を処理するときにデバイス インターフェイスを無効にしない場合、PnP マネージャーがデバイスを削除するときに PnP マネージャーがインターフェイスを無効にするため、ドライバーは、その後、これを試みないでください。
デバイスが突然削除された場合 (たとえば、突然の削除など)、有効なデバイス インターフェイス インスタンスがある場合は、デバイスが再アタッチされると問題が発生します。 この問題は、PnP マネージャーが新しく接続されたデバイスを列挙し、既存のデバイス インターフェイス インスタンスと同じレジストリ パスに存在するデバイス インターフェイス インスタンスを有効にすると発生します。
ドライバー IoSetDeviceInterfaceState を呼び出して、IRP_MN_SURPRISE_REMOVAL IRP に応答してデバイス インターフェイス インスタンスを無効にした場合、ドライバーは、IRP_MN_REMOVE_DEVICE IRP に応答して同じデバイス インターフェイス インスタンスを無効にしないでください。
IoSetDeviceInterfaceState 呼び出しによってデバイス インターフェイス インスタンスが正常に公開された場合、システムは PnP 通知に登録されたすべてのコンポーネントにデバイス クラスの変更を通知します。 同様に、このルーチンの呼び出しによって既存のデバイス インターフェイス インスタンスが無効にされた場合、システムは適切な通知を送信します。
PnP マネージャーは、デバイスのすべてのドライバーが開始操作を完了したことを示す、IRP_MN_START_DEVICE IRP が完了するまで、インターフェイス インスタンスの到着の通知を送信しません。 さらに、PnP マネージャーは、IRP_MN_START_DEVICE IRP が完了するまで、デバイスの作成要求を失敗します。
IoSetDeviceInterfaceState の呼び出し元は、システム スレッドのコンテキストで IRQL = PASSIVE_LEVELで実行されている必要があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 2000 以降で使用できます。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (「解説」セクションを参照) |
DDI コンプライアンス規則 を する | HwStorPortProhibitedDDDIs(storport), IrqlIoPassive1(wdm), LowerDriverReturn(wdm), PowerIrpDDis(wdm) |
関連項目
IoRegisterPlugPlayNotification の