IRP_MJ_DEVICE_CONTROL および IRP_MJ_INTERNAL_DEVICE_CONTROL 共用体の FLT_PARAMETERS
操作における FLT_IO_PARAMETER_BLOCK 構造体の MajorFunction フィールドが IRP_MJ_DEVICE_CONTROL または IRP_MJ_INTERNAL_DEVICE_CONTROL であるときに使用される共用体コンポーネント。
構文
typedef union _FLT_PARAMETERS {
... ;
union {
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
} Common;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID InputBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Neither;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID SystemBuffer;
} Buffered;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID InputSystemBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Direct;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID InputBuffer;
PVOID OutputBuffer;
} FastIo;
} DeviceIoControl;
... ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;
メンバー
Common: すべてのバッファリング メソッド (Neither、Buffered、FastIo) に使用される共用体コンポーネント。
OutputBufferLength: Neither.OutputBuffer、Direct.OutputBuffer、または FastIo.OutputBuffer メンバーが指すバッファーの長さ (バイト単位)。
InputBufferLength: Neither.InputBuffer、Buffered.SystemBuffer、Direct.InputSystemBuffer、または FastIo.InputBuffer メンバーが指すバッファーの長さ (バイト単位)。
IoControlCode: ターゲット デバイスのデバイス ドライバーに渡される IOCTL 関数コード。 IOCTL 要求の詳細については、Microsoft Windows SDK ドキュメントの I/O 制御コードの使用の説明と「デバイスの入出力制御コード」を参照してください。 (このリソースは、一部の言語や国では利用できない場合があります。)
Neither: バッファリング メソッドが METHOD_NEITHER のときに使用される共用体コンポーネント。 バッファリング メソッドの詳細については、カーネル モードのアーキテクチャ ガイドの「I/O 制御コードの定義」を参照してください。
Neither.InputBuffer: 操作の元の要求者が指定した入力バッファーのユーザー モードの仮想アドレス。 I/O マネージャーとフィルター マネージャーでは、これらのアドレスは検証されません。 ユーザー空間アドレスが有効であることを確認するには、ミニフィルターで ProbeForRead、ProbeForWrite、FltLockUserBuffer などのルーチンを使用し、try/except ブロック内のすべてのバッファー参照を囲む必要があります。 詳細については、「バッファー I/O もダイレクト I/O も使用しない」と「ユーザー空間アドレスを参照する際のエラー」を参照してください。
Neither.OutputBuffer: 操作の元の要求者が指定した出力バッファーのユーザー モードの仮想アドレス。 I/O マネージャーとフィルター マネージャーでは、これらのアドレスは検証されません。 ユーザー空間アドレスが有効であることを確認するには、ミニフィルターで ProbeForRead、ProbeForWrite、FltLockUserBuffer などのルーチンを使用し、try/except ブロック内のすべてのバッファー参照を囲む必要があります。 詳細については、カーネル モードのアーキテクチャ ガイドの「バッファー I/O もダイレクト I/O も使用しない」と「ユーザー空間アドレスを参照する際のエラー」を参照してください。
Neither.OutputMdlAddress: Neither.OutputBuffer メンバーが指すバッファーを記述するメモリ記述子リスト (MDL) のアドレス。 このメンバーは省略可能で、NULL にすることができます。
Buffered: バッファリング メソッドが METHOD_BUFFERED のときに使用される共用体コンポーネント。 バッファリング メソッドの詳細については、「I/O 制御コードの定義」を参照してください。
Buffered.SystemBuffer: 操作用にシステムによって割り当てられたバッファーのアドレス。 METHOD_BUFFERED I/O では、このバッファーは入力と出力の両方に使用されます。 詳細については、「データ バッファーにアクセスする方法」を参照してください。
Direct: バッファリング メソッドが METHOD_IN_DIRECT または METHOD_OUT_DIRECT のときに使用される共用体コンポーネント。 バッファリング メソッドの詳細については、「I/O 制御コードの定義」を参照してください。
Direct.InputSystemBuffer: 操作の入力バッファーのアドレス。 このバッファーは、カーネル モードから安全にアクセスできるように、オペレーティング システムによってロックダウンされます。 詳細については、「データ バッファーにアクセスする方法」を参照してください。
Direct.OutputBuffer: 操作の元の要求者が指定した出力バッファーのユーザー モードの仮想アドレス。 ダイレクト I/O では、METHOD_NEITHER I/O とは異なり、ミニフィルターが I/O 操作の元の要求者と同じプロセス コンテキストにある限り、オペレーティング システムはこのバッファーをロックダウンしてカーネル モードから安全にアクセスできるようにします。 (それ以外の場合は、MmGetSystemAddressForMdlSafe を呼び出して、OutputMdlAddress メンバーが指すメモリ記述子リスト (MDL) からシステム アドレスを取得する必要があります。) 詳細については、「ダイレクト I/O の使用」と「ダイレクト I/O のエラー」を参照してください。
Direct.OutputMdlAddress: Direct.OutputBuffer メンバーが指すバッファーを記述する MDL のアドレス。 このメンバーは必須であり、NULL にすることはできません。
FastIo: FLT_CALLBACK_DATA 構造体が高速 I/O IRP_MJ_DEVICE_CONTROL 操作を表す場合に使用される共用体コンポーネント。
FastIo.InputBuffer: 操作の元の要求者が指定した入力バッファーのユーザー モードの仮想アドレス。 I/O マネージャーとフィルター マネージャーでは、これらのアドレスは検証されません。 ユーザー空間アドレスが有効であることを確認するには、ミニフィルターで ProbeForRead、ProbeForWrite、FltLockUserBuffer などのルーチンを使用し、try/except ブロック内のすべてのバッファー参照を囲む必要があります。 詳細については、「ユーザー空間アドレスを参照する際のエラー」を参照してください。
FastIo.OutputBuffer: 操作の元の要求者が指定した出力バッファーのユーザー モードの仮想アドレス。 I/O マネージャーとフィルター マネージャーでは、これらのアドレスは検証されません。 ユーザー空間アドレスが有効であることを確認するには、ミニフィルターで ProbeForRead、ProbeForWrite、FltLockUserBuffer などのルーチンを使用し、try/except ブロック内のすべてのバッファー参照を囲む必要があります。 詳細については、「ユーザー空間アドレスを参照する際のエラー」を参照してください。
解説
IRP_MJ_DEVICE_CONTROL および IRP_MJ_INTERNAL_DEVICE_CONTROL 操作の FLT_PARAMETERS 構造体には、コールバック データ (FLT_CALLBACK_DATA) 構造体が表す IRP ベースのデバイス I/O 制御情報操作のパラメーターが含まれます。 これは、FLT_IO_PARAMETER_BLOCK 構造体に含まれています。
IRP_MJ_DEVICE_CONTROL には、IRP ベースの操作または高速 I/O 操作を指定できます。
IRP_MJ_INTERNAL_DEVICE_CONTROL は、IRP ベースの I/O 操作です。
要件
要件タイプ | 要件 |
---|---|
ヘッダー | Fltkernel.h (Fltkernel.h を含む) |