次の方法で共有


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 コールバック関数は、次のキュー オブジェクト メソッドを呼び出さないでください。

WdfIoQueueDrainSynchronously
WdfIoQueuePurgeSynchronously
WdfIoQueueStopSynchronously

要件

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

こちらもご覧ください

EvtIoDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueCreate

WdfIoTargetFormatRequestForInternalIoctl

WdfIoTargetSendInternalIoctlSynchronously