次の方法で共有


EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL コールバック関数 (wdfio.h)

[KMDF と UMDF に適用]

ドライバーの EvtIoDeviceControl イベント コールバック関数は、指定されたデバイス I/O コントロール要求を処理します。

構文

EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtWdfIoQueueIoDeviceControl;

void EvtWdfIoQueueIoDeviceControl(
  [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

要求に関連付けられているドライバー定義またはシステム定義の I/O 制御コード (IOCTL)。

戻り値

なし

解説

ドライバーは、WdfIoQueueCreate を呼び出すときに EvtIoDeviceControl コールバック関数を登録します。 WdfIoQueueCreate の呼び出しの詳細については、「I/O キューの作成」を参照してください。

ドライバーがデバイスの I/O キューの EvtIoDeviceControl コールバック関数を登録している場合、コールバック関数はキューからすべての I/O 制御要求 (IRP_MJ_DEVICE_CONTROL) を受け取ります。 詳細については、「 要求ハンドラー」を参照してください。

EvtIoDeviceControl コールバック関数は、受信した各 I/O 要求を何らかの方法で処理する必要があります。 詳細については、「 I/O 要求の処理」を参照してください。

ドライバーは、ユーザー アプリケーションが DeviceIoControl を呼び出すとき (Microsoft Windows SDKドキュメントで説明) または別のドライバーが WdfIoTargetSendIoctlSynchronously または WdfIoTargetFormatRequestForIoctl を呼び出して要求を作成したときに、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 制御コードの定義」を参照してください。

デバイスまたはドライバーのWDF_OBJECT_ATTRIBUTES構造体の ExecutionLevel メンバーが WdfExecutionLevelPassive に設定されていない限り、EvtIoDeviceControl コールバック関数は IRQL <= DISPATCH_LEVELで呼び出すことができます。

IRQL がPASSIVE_LEVELされている場合、フレームワークは 重要なリージョン内でコールバック関数を呼び出します。

要求ハンドラーの IRQL レベルの詳細については、「 自動同期の使用」を参照してください。

ドライバーの EvtIoDeviceControl コールバック関数は、次のキュー オブジェクト メソッドを呼び出さないでください。

WdfIoQueueDrainSynchronously
WdfIoQueuePurgeSynchronously
WdfIoQueueStopSynchronously

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.0
最小 UMDF バージョン 2.0
Header wdfio.h (Wdf.h を含む)
IRQL <= DISPATCH_LEVEL (「解説」セクションを参照)

こちらもご覧ください

EvtIoInternalDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueCreate

WdfIoTargetFormatRequestForIoctl

WdfIoTargetSendIoctlSynchronously