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;
成員
常見:用於所有緩衝方法的聯集元件, ([未處理]、[ 已緩衝處理] 和 [FastIo ]) 。
OutputBufferLength:兩者、Direct.OutputBuffer 或 FastIo.OutputBuffer 成員指向的緩衝區長度,以位元組為單位。
InputBufferLength:兩者、Buffered.SystemBuffer、Direct.InputSystemBuffer 或 FastIo.InputBuffer 成員指向的緩衝區長度,以位元組為單位。
IoControlCode:要傳遞至目標裝置的裝置驅動程式的 IOCTL 函式程式代碼。 如需IOCTL要求的詳細資訊,請參閱 Microsoft Windows SDK檔中的使用I/O控制代碼和「裝置輸入和輸出控制代碼」。 (某些語言和國家/地區可能無法使用此資源。)
兩者都不是:緩衝方法METHOD_NEITHER時使用的等位元件。 如需緩衝方法的詳細資訊,請參閱核心模式架構指南中的定義I/O控制程序代碼。
Neither.InputBuffer:提供作業原始要求者之輸入緩衝區的使用者模式虛擬位址。 I/O 管理員和篩選管理員不會驗證這些位址。 為了確保使用者空間位址有效,迷你篩選程式必須使用 ProbeForRead、 ProbeForWrite 和 FltLockUserBuffer 等例程,並將所有緩衝區參考括在 try/except 區塊中。 如需詳細資訊,請參閱參考 User-Space 位址中的未緩衝處理或直接 I/O 和錯誤。
Neither.OutputBuffer:提供作業原始要求者之輸出緩衝區的使用者模式虛擬位址。 I/O 管理員和篩選管理員不會驗證這些位址。 為了確保使用者空間位址有效,迷你篩選程式必須使用 ProbeForRead、 ProbeForWrite 和 FltLockUserBuffer 等例程,並將所有緩衝區參考括在 try/except 區塊中。 如需詳細資訊,請參閱核心模式架構指南中參考 User-Space 位址中的未緩衝處理或直接 I/O 和錯誤。
Neither.OutputMdlAddress:記憶體描述元清單的位址 (MDL) ,描述 Neither.OutputBuffer 成員指向的緩衝區。 此成員是選擇性的,可以是 NULL。
緩衝:緩衝處理方法METHOD_BUFFERED時使用的等位元件。 如需緩衝方法的詳細資訊,請參閱 定義 I/O 控件代碼。
Buffered.SystemBuffer:作業的系統配置緩衝區位址。 在 METHOD_BUFFERED I/O 中,此緩衝區用於輸入和輸出。 如需詳細資訊,請參閱 存取數據緩衝區的方法。
直接:緩衝處理方法METHOD_IN_DIRECT或METHOD_OUT_DIRECT時使用的等位元件。 如需緩衝方法的詳細資訊,請參閱 定義 I/O 控件代碼。
Direct.InputSystemBuffer:作業之輸入緩衝區的位址。 操作系統會鎖定此緩衝區,以便安全地從核心模式存取。 如需詳細資訊,請參閱 存取數據緩衝區的方法。
Direct.OutputBuffer:提供作業原始要求者之輸出緩衝區的使用者模式虛擬位址。 在直接 I/O 中,與 METHOD_NEITHER I/O 不同,作業系統會鎖定此緩衝區,以便安全地從核心模式存取,只要迷你篩選器與 I/O 作業的原始要求者位於相同的進程內容中。 (否則,它必須呼叫 MmGetSystemAddressForMdlSafe ,從記憶體描述元清單取得系統地址, (MDL) OutputMdlAddress 成員指向 .) 如需詳細資訊,請參閱 在直接 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 區塊中。 如需詳細資訊,請參閱 參考 User-Space 位址中的錯誤。
FastIo.OutputBuffer:提供作業原始要求者之輸出緩衝區的使用者模式虛擬位址。 I/O 管理員和篩選管理員不會驗證這些位址。 為了確保使用者空間位址有效,迷你篩選程式必須使用 ProbeForRead、 ProbeForWrite 和 FltLockUserBuffer 等例程,並將所有緩衝區參考括在 try/except 區塊中。 如需詳細資訊,請參閱 參考 User-Space 位址中的錯誤。
備註
IRP_MJ_DEVICE_CONTROL和IRP_MJ_INTERNAL_DEVICE_CONTROL作業的FLT_PARAMETERS結構包含回呼數據所代表之 IRP 型裝置 I/O 控制資訊作業的參數, (FLT_CALLBACK_DATA) 結構。 它包含在 FLT_IO_PARAMETER_BLOCK 結構中。
IRP_MJ_DEVICE_CONTROL可以是 IRP 型作業或快速 I/O 作業。
IRP_MJ_INTERNAL_DEVICE_CONTROL是以 IRP 為基礎的 I/O 作業。
規格需求
需求類型 | 需求 |
---|---|
標頭 | Fltkernel.h (包括 Fltkernel.h) |