EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL コールバック関数 (wdfio.h)
[KMDF と UMDF に適用]
ドライバーの EvtIoInternalDeviceControl イベント コールバック関数は、内部デバイス I/O 制御コード (IOCTL) を含む I/O 要求を処理します。
構文
EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL EvtWdfIoQueueIoInternalDeviceControl;
void EvtWdfIoQueueIoInternalDeviceControl(
[in] WDFQUEUE Queue,
[in] WDFREQUEST Request,
[in] size_t OutputBufferLength,
[in] size_t InputBufferLength,
[in] ULONG IoControlCode
)
{...}
パラメーター
[in] Queue
I/O 要求に関連付けられているフレームワーク キュー オブジェクトへのハンドル。
[in] Request
フレームワーク要求オブジェクトへのハンドル。
[in] OutputBufferLength
出力バッファーが使用可能な場合の、要求の出力バッファーの長さ (バイト単位)。
[in] InputBufferLength
入力バッファーが使用可能な場合は、要求の入力バッファーの長さ (バイト単位)。
[in] IoControlCode
要求に関連付けられているドライバー定義またはシステム定義の IOCTL。
戻り値
なし
解説
ドライバーは、WdfIoQueueCreate メソッドを呼び出すときに EvtIoInternalDeviceControl コールバック関数を登録します。 WdfIoQueueCreate の呼び出しの詳細については、「I/O キューの作成」を参照してください。
ドライバーがデバイスの I/O キューに EvtIoInternalDeviceControl コールバック関数を登録している場合、コールバック関数はキューからすべての内部 I/O 制御要求 (IRP_MJ_INTERNAL_DEVICE_CONTROL) を受け取ります。 詳細については、「 要求ハンドラー」を参照してください。
EvtIoInternalDeviceControl コールバック関数は、受信した各 I/O 要求を何らかの方法で処理する必要があります。 詳細については、「 I/O 要求の処理」を参照してください。
ドライバーは、別のドライバーが WdfIoTargetSendInternalIoctlSynchronously または WdfIoTargetFormatRequestForInternalIoctl を呼び出して要求を作成するときに、内部 I/O コントロール要求を受け取ります。
実行する操作の種類は、 IoControlCode パラメーターの値によって異なります。 アプリケーションやその他のドライバーがドライバーに送信できる IoControlCode 値のセットを決定する必要があります。 IOCTL の詳細については、「 I/O コントロール コードの使用」を参照してください。
ほとんどの内部 I/O 制御操作には、入力バッファー、出力バッファー、またはその両方が必要です。 ドライバーが要求のバッファーにアクセスする方法については、「 Framework-Based ドライバーでのデータ バッファーへのアクセス」を参照してください。
ドライバーが要求の入力バッファーと出力バッファーにアクセスするために使用できる手法 (存在する場合) は、IOCTL の TransferType フィールドに依存します。 IOCTL の TransferType フィールドの値は、METHOD_BUFFERED、METHOD_DIRECT_IN、METHOD_DIRECT_OUT、またはMETHOD_NEITHERできます。 TransferType フィールドの詳細については、「I/O 制御コードの定義」を参照してください。
EvtIoInternalDeviceControl コールバック関数は、デバイスまたはドライバーのWDF_OBJECT_ATTRIBUTES構造体の ExecutionLevel メンバーが WdfExecutionLevelPassive に設定されていない限り、IRQL <= DISPATCH_LEVELで呼び出すことができます。 (ドライバーがドライバー スタックの上部にある場合、コールバック関数は IRQL = PASSIVE_LEVEL で呼び出されます)。
IRQL がPASSIVE_LEVELされている場合、フレームワークは 重要なリージョン内でコールバック関数を呼び出します。
要求ハンドラーの IRQL レベルの詳細については、「 自動同期の使用」を参照してください。
ドライバーの EvtIoInternalDeviceControl コールバック関数は、次のキュー オブジェクト メソッドを呼び出さないでください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
最小 KMDF バージョン | 1.0 |
最小 UMDF バージョン | 2.0 |
Header | wdfio.h (Wdf.h を含む) |
IRQL | <= DISPATCH_LEVEL (「解説」セクションを参照) |