IRP_MJ_FILE_SYSTEM_CONTROL等位的FLT_PARAMETERS
作業之FLT_IO_PARAMETER_BLOCK結構的MajorFunction字段IRP_MJ_FILE_SYSTEM_CONTROL時使用的等位元件。
語法
typedef union _FLT_PARAMETERS {
... ;
union {
struct {
PVPB Vpb;
PDEVICE_OBJECT DeviceObject;
} VerifyVolume;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
} Common;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
PVOID InputBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Neither;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
PVOID SystemBuffer;
} Buffered;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
PVOID InputSystemBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Direct;
} FileSystemControl;
... ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;
成員
FileSystemControl:包含下列成員的結構。
VerifyVolume:用於IRP_MN_VERIFY_VOLUME作業的等位元件。
Vpb:磁碟區參數區塊的指標 (VPB) ,以便驗證磁碟區。
DeviceObject:要驗證磁碟區的裝置物件的指標。
常見:用於所有緩衝處理方法的聯集元件,用於IRP_MN_KERNEL_CALL和IRP_MN_USER_FS_REQUEST作業。
Common.OutputBufferLength: 兩者皆未指向任何.OutputBuffer 或 Direct.OutputBuffer 成員的緩衝區長度,以位元組為單位。
Common.InputBufferLength:兩者、Buffered.SystemBuffer 或 Direct.InputSystemBuffer 成員所指向之緩衝區的長度、以位元節為單位。
Common.FsControlCode:要傳遞至目標裝置的文件系統、文件系統篩選或迷你篩選驅動程式的 FSCTL 函式程式碼。
如需IOCTL和FSCTL要求的詳細資訊,請參閱 Microsoft Windows SDK檔中的核心模式架構指南中使用I/O控制程式碼和「裝置輸入和輸出控制代碼」。 (某些語言和國家/地區可能無法使用此資源。)
兩者都不是:緩衝方法METHOD_NEITHER時,用於IRP_MN_KERNEL_CALL和IRP_MN_USER_FS_REQUEST作業的等位元件。 如需緩衝方法的詳細資訊,請參閱 定義 I/O 控件代碼。
Neither.InputBuffer:提供作業原始要求者之輸入緩衝區的使用者模式虛擬位址。 I/O 管理員和篩選管理員不會驗證這些位址。 為了確保使用者空間位址有效,迷你篩選程式必須使用 ProbeForRead、 ProbeForWrite 和 MmProbeAndLockPages 等例程,並將所有緩衝區參考括在 try/except 區塊中。 如需詳細資訊,請參閱參考 User-Space 位址中的未緩衝處理或直接 I/O 和錯誤。
Neither.OutputBuffer:提供作業原始要求者之輸出緩衝區的使用者模式虛擬位址。 I/O 管理員和篩選管理員不會驗證這些位址。 為了確保使用者空間位址有效,迷你篩選程式必須使用 ProbeForRead、 ProbeForWrite 和 MmProbeAndLockPages 等例程,並將所有緩衝區參考括在 try/except 區塊中。 如需詳細資訊,請參閱參考 User-Space 位址中的未緩衝處理或直接 I/O 和錯誤。 兩者.OutputBuffer 都是 選擇性的,而且如果在 Neither.OutputMdlAddress中提供MDL,則可以是NULL。 請參閱備註。
Neither.OutputMdlAddress:記憶體描述元清單的位址 (MDL) ,描述 Neither.OutputBuffer 成員指向的緩衝區。 這個成員是選擇性的,而且如果在 Neither.OutputBuffer 中提供緩衝區,則可以是 NULL。
緩衝:緩衝處理方法METHOD_BUFFERED時,用於IRP_MN_KERNEL_CALL和IRP_MN_USER_FS_REQUEST作業的聯集元件。 如需緩衝方法的詳細資訊,請參閱 定義 I/O 控件代碼。
Buffered.SystemBuffer:作業的系統配置緩衝區位址。 在 METHOD_BUFFERED I/O 中,此緩衝區用於輸入和輸出。 如需詳細資訊,請參閱 存取數據緩衝區的方法。
直接:緩衝方法METHOD_IN_DIRECT或METHOD_OUT_DIRECT時,用於IRP_MN_KERNEL_CALL和IRP_MN_USER_FS_REQUEST作業的聯集元件。 如需緩衝方法的詳細資訊,請參閱核心模式架構指南中的定義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 清單位址 (MDL) 。 此成員為必要專案,且不可為 NULL。
備註
IRP_MJ_FILE_SYSTEM_CONTROL作業的FLT_PARAMETERS結構包含回呼數據所代表之文件系統控制資訊作業的參數, (FLT_CALLBACK_DATA) 結構。 它包含在 FLT_IO_PARAMETER_BLOCK 結構中。
如果同時提供 Neither.OutputBuffer 和 Neither.MdlAddress 緩衝區,建議迷你篩選程式使用 MDL。
如果迷你篩選程序變更 了 Neither.MdlAddress 的值,則在後續作業回呼之後,篩選管理員會釋出目前儲存在 Neither.MdlAddress 中的 MDL ,並還原 Previous value of Neither.MdlAddress。
IRP_MJ_FILE_SYSTEM_CONTROL是以 IRP 為基礎的作業。
規格需求
需求類型 | 需求 |
---|---|
標頭 | Fltkernel.h (包括 Fltkernel.h) |