IRP_MJ_DEVICE_CONTROL
デバイス オブジェクトが特定のデバイスの種類 (「デバイスの種類の指定」を参照) に属しているすべてのドライバーは、その種類に対してシステム定義の I/O 制御コード(IOCTL) のセットが存在する場合、DispatchDeviceControl ルーチンでこの要求をサポートする必要があります。 IOCTL の詳細については、「I/O 制御コードの概要」を参照してください。
上位レベルのドライバーは、通常、基になるデバイス ドライバーにこれらの要求を渡します。 ドライバー スタック内の各デバイス ドライバーは、デバイスの種類固有のパブリックまたはプライベート IOCTL のセットと共に、この要求をサポートするものと見なされます。 特定のデバイスの種類の IOCTL の詳細については、Microsoft Windows Driver Kit (WDK) のデバイスの種類固有に関するドキュメントを参照してください。
送信時
作成要求が正常に完了した後、随時。
入力パラメーター
I/O 制御コードは、IRP のドライバーの I/O スタックの場所の Parameters.DeviceIoControl.IoControlCode に格納されています。
その他の入力パラメーターは、I/O 制御コードの値によって異なります。 詳細については、「I/O 制御コードのバッファー記述」を参照してください。
出力パラメーター
出力パラメーターは、I/O 制御コードの値によって異なります。 詳細については、「I/O 制御コードのバッファー記述」を参照してください。
操作
ドライバーは、ユーザー モード スレッドが Microsoft Win32 DeviceIoControl 関数を呼び出したか、上位レベルのカーネル モード ドライバーが要求を設定した場合に、この I/O 制御コードを受け取ります。 ユーザー モード ドライバーが、DeviceIoControl を呼び出してドライバー定義の (プライベートとも呼ばれます) I/O 制御コードを渡し、密接に結合されたカーネル モード デバイス ドライバーからのデバイス固有またはドライバー固有のサポートを要求している可能性があります。
デバイス I/O 制御要求を受信すると、通常、上位レベルのドライバーは、次の下位ドライバーに IRP を渡します。 ただし、この慣例にはいくつかの例外があります。 たとえば、基になるポート ドライバーから取得した構成情報を格納しているクラス ドライバーは、対応するポート ドライバーに IRP を渡さずに特定の IOCTL_XXX 要求を完了する場合があります。
デバイス I/O 制御要求を受信すると、デバイス ドライバーは、 I/O 制御コードを調べて、要求を満たす方法を判断ます。 ほとんどのパブリック I/O 制御コードでは、デバイス ドライバーは Irp->AssociatedIrp.SystemBuffer のバッファーとの間で少量のデータを転送します。
IRP_MJ_DEVICE_CONTROL 要求または IRP_MJ_INTERNAL_DEVICE_CONTROL 要求の I/O 制御コードに関する一般的な情報については、「I/O 制御コードの使用」を参照してください。 また、「デバイスの種類に固有の I/O 要求」も参照してください。
要件
ヘッダー |
Wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |