FLT_IO_PARAMETER_BLOCK 結構 (fltkernel.h)
FLT_IO_PARAMETER_BLOCK 結構包含FLT_CALLBACK_DATA回呼數據結構所代表之 I/O 作業的參數。
語法
typedef struct _FLT_IO_PARAMETER_BLOCK {
ULONG IrpFlags;
UCHAR MajorFunction;
UCHAR MinorFunction;
UCHAR OperationFlags;
UCHAR Reserved;
PFILE_OBJECT TargetFileObject;
PFLT_INSTANCE TargetInstance;
FLT_PARAMETERS Parameters;
} FLT_IO_PARAMETER_BLOCK, *PFLT_IO_PARAMETER_BLOCK;
成員
IrpFlags
旗標的位掩碼,指定 I/O 作業的各個層面。 這些旗標僅用於 IRP 型作業。 下表顯示旗標值。
值 | 意義 |
---|---|
IRP_BUFFERED_IO | 作業是緩衝的 I/O 作業。 |
IRP_CLOSE_OPERATION | 作業是清除或關閉作業。 |
IRP_DEALLOCATE_BUFFER | I/O 管理員會在 IRP 完成階段釋放緩衝區。 |
IRP_INPUT_OPERATION | 作業是輸入作業。 |
IRP_NOCACHE | 作業是非快取的 I/O 作業。 |
IRP_PAGING_IO | 作業是分頁 I/O 作業。 |
IRP_SYNCHRONOUS_API | I/O 作業是同步的。 |
IRP_SYNCHRONOUS_PAGING_IO | 作業是同步分頁 I/O 作業。 |
IRP_MOUNT_COMPLETION | 作業已完成磁碟區掛接。 |
IRP_CREATE_OPERATION | 作業是建立或開啟的作業。 |
IRP_READ_OPERATION | I/O 作業是用於讀取。 |
IRP_WRITE_OPERATION | I/O 作業適用於寫入。 |
IRP_DEFER_IO_COMPLETION | 作業的 I/O 完成會延遲。 |
IRP_ASSOCIATED_IRP | 作業與主要 IRP 相關聯。 |
IRP_OB_QUERY_NAME | 作業是異步名稱查詢。 |
IRP_HOLD_DEVICE_QUEUE | 保留的。 |
IRP_UM_DRIVER_INITIATED_IO | 作業源自使用者模式驅動程式。 |
MajorFunction
I/O 作業的主要函式程序代碼。 主要函式程式代碼用於 IRP 型作業、快速 I/O 作業,以及檔案系統 (FSFilter) 回呼作業。 如需其他作業的詳細資訊,請參閱 FLT_PARAMETERS。
MinorFunction
I/O 作業的次要函式程序代碼。 此成員是選擇性的,可以是 NULL。 MajorFunction 成員的值會決定可能的值。 如需次要函式程式代碼的詳細資訊,請參閱 FLT_PARAMETERS。
OperationFlags
旗標的位掩碼,指定 I/O 作業的各個層面。 這些旗標僅用於 IRP 型作業。 篩選管理員會從與 IRP 相關聯之IO_STACK_LOCATION結構的 Flags 成員複製這些旗標。 下表顯示最常使用的旗標值。
值 | 意義 |
---|---|
SL_CASE_SENSITIVE | 用於 IRP_MJ_CREATE。 如果設定此旗標,檔名比較應該區分大小寫。 |
SL_EXCLUSIVE_LOCK | 用於 IRP_MJ_LOCK_CONTROL。 如果設定此旗標,則會要求獨佔位元組範圍鎖定。 否則,會要求共用鎖定。 |
SL_FAIL_IMMEDIATELY | 用於 IRP_MJ_LOCK_CONTROL。 如果設定此旗標,如果無法立即授與鎖定要求,則鎖定要求應該會失敗。 |
SL_FORCE_ACCESS_CHECK | 用於 IRP_MJ_CREATE。 如果設定此旗標,即使 IRP 的 RequestorMode 成員值為 KernelMode,也必須執行存取檢查。 |
SL_FORCE_DIRECT_WRITE | 用於IRP_MJ_WRITE和IOCTL_DISK_COPY_DATA。 如果設定此旗標,核心模式驅動程式可以寫入通常因為安全性原因而遭到封鎖而無法寫入的磁碟區區域。 系統會在檔案系統層和儲存堆疊層檢查此旗標。 windows Vista 和更新版本的 Windows 中提供SL_FORCE_DIRECT_WRITE旗標。 |
SL_INDEX_SPECIFIED | 用於 IRP_MJ_DIRECTORY_CONTROL、 IRP_MJ_QUERY_EA和 IRP_MJ_SET_QUOTA。 如果設定此旗標,則目錄、配額或擴充屬性資訊的掃描應該從指定索引的清單中項目開始。 |
SL_OPEN_PAGING_FILE | 用於 IRP_MJ_CREATE。 如果已設定此旗標,則檔案是分頁檔案。 |
SL_OPEN_TARGET_DIRECTORY | 用於 IRP_MJ_CREATE。 如果設定此旗標,則應該開啟檔案的父目錄。 |
SL_OVERRIDE_VERIFY_VOLUME | 用於 IRP_MJ_DIRECTORY_CONTROL、 IRP_MJ_READ和 IRP_MJ_WRITE。 如果設定此旗標,即使磁碟區裝置對象上設定了DO_VERIFY_VOLUME旗標,仍應該執行 I/O 作業。 |
SL_RESTART_SCAN | 用於 IRP_MJ_DIRECTORY_CONTROL、 IRP_MJ_QUERY_EA和 IRP_MJ_SET_QUOTA。 如果設定此旗標,則目錄、配額或擴充屬性資訊的掃描應該從目錄或清單中的第一個項目開始。 否則,應該從先前的掃描繼續掃描。 |
SL_RETURN_SINGLE_ENTRY | 用於 IRP_MJ_DIRECTORY_CONTROL、 IRP_MJ_QUERY_EA和 IRP_MJ_SET_QUOTA。 如果設定此旗標,則掃描目錄、配額或擴充屬性信息應該只會傳回找到的第一個專案。 |
SL_WATCH_TREE | 用於 IRP_MJ_DIRECTORY_CONTROL。 如果已設定此旗標,則也應該監看此目錄的所有子目錄。 否則,只會監看目錄本身。 |
SL_WRITE_THROUGH | 用於 IRP_MJ_WRITE。 如果已設定此旗標,則必須將檔案數據寫入永續性記憶體,而不只是寫入快取。 |
Reserved
保留供系統使用。 請勿使用。
TargetFileObject
此 I/O 作業目標之檔案或目錄的檔案物件指標。
TargetInstance
此 I/O 作業目標之迷你篩選器的不透明實例指標。
Parameters
FLT_PARAMETERS 結構,其中包含 MajorFunction 和 MinorFunction 成員所指定的 I/O 作業參數。
備註
FLT_IO_PARAMETER_BLOCK 結構包含由回呼數據表示的 I/O 作業參數, (FLT_CALLBACK_DATA) 結構。 回呼數據結構包含其 Iopb 成員中FLT_IO_PARAMETER_BLOCK結構的指標。
迷你篩選會接收回呼數據結構的指標,做為下列回呼例程類型的 Data 或 CallbackData 輸入參數:
- PFLT_POST_OPERATION_CALLBACK
- PFLT_PRE_OPERATION_CALLBACK
- PFLT_COMPLETED_ASYNC_IO_CALLBACK
- PFLT_GENERATE_FILE_NAME
迷你篩選的預先操作和後置回呼例程可以修改 I/O 作業FLT_IO_PARAMETER_BLOCK結構的內容,但 MajorFunction 和 保留 成員除外。 如果這樣做,它必須呼叫 FltSetCallbackDataDirty,除非它也修改了作業之回呼數據結構的 IoStatus 成員。 否則,會忽略修改的值。
當篩選管理員對 minifilter 發出預先操作或後置回呼時,FltObjects-FileObject> 和 TargetFileObject (CallbackData-Iopb-TargetFileObject>>) 一開始相同。 如果迷你篩選程式修改 TargetFileObject 或 TargetInstance,其後續從操作回呼呼叫 FltSetCallbackDataDirty 會導致篩選管理員取代 FltObjects-FileObject> 和 FltObjects-Instance>,再將作業傳送至較低的篩選。
如果迷你篩選器的預先操作回呼例程修改 I/O 作業的參數,則迷你篩選實例堆棧中其下方的所有迷你篩選都會在其預先操作和後置回呼例程中收到修改的參數。
迷你篩選本身的後置回呼例程,或是由迷你篩選實例堆疊中任何上方的迷你篩選程式所接收的修改參數。 在所有情況下,迷你篩選器的預先操作和後置回呼例程都會接收相同的輸入參數值。
如果迷你篩選器變更 TargetInstance 成員的值,則新值必須是相同迷你篩選器實例的指標,且位於不同磁碟區上的相同高度。 此外,新磁碟區的裝置對象必須具有大於或等於原始磁碟區裝置物件的堆疊大小。
若要取得磁碟區裝置物件的堆疊大小,請為附加至磁碟區的實例指定不透明的實例指標,請執行下列動作:
- 呼叫 FltGetVolumeFromInstance 以取得磁碟區指標。
- 呼叫 FltGetDeviceObject 以取得磁碟區裝置物件的指標。 此指標會在 DeviceObject 參數中傳回。 您可以在 DeviceObject-StackSize> 中找到裝置物件的堆疊大小。
- 不再需要磁碟區指標時,呼叫 FltObjectDereference 以遞減其參考計數。
- 不再需要磁碟區裝置對象指標時,請呼叫 ObDereferenceObject 來遞減其參考計數。
迷你篩選可以變更 TargetFileObject 成員的值。 不過,新值必須是位於 TargetInstance 成員所指定實例相同磁碟區上之檔案物件的指標。
迷你篩選無法安全地變更 MajorFunction 成員的值。 相反地,它必須起始新的 I/O 作業。
迷你篩選程式可以藉由呼叫 FltReadFile 之類的支援例程,或呼叫 FltAllocateCallbackData 來配置回呼數據結構來起始 I/O 作業;初始化 FLT_IO_PARAMETER_BLOCK 結構中的 I/O 參數,並將回呼數據結構傳遞至 FltPerformSynchronousIo 或 FltPerformAsynchronousIo。
注意
在起始 I/O 作業時盡可能使用支援例程。 只有在特定 I/O 作業沒有支援函式時,迷你篩選器才應該配置自己的回呼數據。
規格需求
需求 | 值 |
---|---|
標頭 | fltkernel.h (包含 Fltkernel.h) |
另請參閱
- IRP_MJ_ACQUIRE_FOR_MOD_WRITE的FLT_PARAMETERS
- IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION的 FLT_PARAMETERS
- IRP_MJ_CREATE的FLT_PARAMETERS
- IRP_MJ_CREATE_MAILSLOT的 FLT_PARAMETERS
- IRP_MJ_CREATE_NAMED_PIPE的FLT_PARAMETERS
- IRP_MJ_DEVICE_CONTROL的 FLT_PARAMETERS
- IRP_MJ_DIRECTORY_CONTROL的 FLT_PARAMETERS
- IRP_MJ_FAST_IO_CHECK_IF_POSSIBLE的 FLT_PARAMETERS
- IRP_MJ_FILE_SYSTEM_CONTROL的 FLT_PARAMETERS
- IRP_MJ_INTERNAL_DEVICE_CONTROL的 FLT_PARAMETERS
- IRP_MJ_LOCK_CONTROL的 FLT_PARAMETERS
- IRP_MJ_MDL_READ的 FLT_PARAMETERS
- IRP_MJ_MDL_READ_COMPLETE的FLT_PARAMETERS
- IRP_MJ_MDL_WRITE_COMPLETE的 FLT_PARAMETERS
- IRP_MJ_NETWORK_QUERY_OPEN的FLT_PARAMETERS
- IRP_MJ_PNP的 FLT_PARAMETERS
- IRP_MJ_PREPARE_MDL_WRITE的 FLT_PARAMETERS
- IRP_MJ_QUERY_EA的FLT_PARAMETERS
- IRP_MJ_QUERY_INFORMATION的FLT_PARAMETERS
- IRP_MJ_QUERY_OPEN 的 FLT_PARAMETERS
- IRP_MJ_QUERY_QUOTA的FLT_PARAMETERS
- IRP_MJ_QUERY_SECURITY的FLT_PARAMETERS
- IRP_MJ_QUERY_VOLUME_INFORMATION的FLT_PARAMETERS
- IRP_MJ_READ 的 FLT_PARAMETERS
- IRP_MJ_RELEASE_FOR_MOD_WRITE的FLT_PARAMETERS
- IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION的FLT_PARAMETERS
- IRP_MJ_SET_EA的FLT_PARAMETERS
- IRP_MJ_SET_INFORMATION的FLT_PARAMETERS
- IRP_MJ_SET_QUOTA的 FLT_PARAMETERS
- IRP_MJ_SET_SECURITY 的 FLT_PARAMETERS
- IRP_MJ_SET_VOLUME_INFORMATION的FLT_PARAMETERS
- IRP_MJ_SYSTEM_CONTROL的FLT_PARAMETERS
- IRP_MJ_VOLUME_MOUNT的FLT_PARAMETERS
- IRP_MJ_WRITE的 FLT_PARAMETERS