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 作業的次要函式程序代碼。 此成員是選擇性的,可以是 NULLMajorFunction 成員的值會決定可能的值。 如需次要函式程式代碼的詳細資訊,請參閱 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_CONTROLIRP_MJ_QUERY_EAIRP_MJ_SET_QUOTA。 如果設定此旗標,則目錄、配額或擴充屬性資訊的掃描應該從指定索引的清單中項目開始。
SL_OPEN_PAGING_FILE 用於 IRP_MJ_CREATE。 如果已設定此旗標,則檔案是分頁檔案。
SL_OPEN_TARGET_DIRECTORY 用於 IRP_MJ_CREATE。 如果設定此旗標,則應該開啟檔案的父目錄。
SL_OVERRIDE_VERIFY_VOLUME 用於 IRP_MJ_DIRECTORY_CONTROLIRP_MJ_READIRP_MJ_WRITE。 如果設定此旗標,即使磁碟區裝置對象上設定了DO_VERIFY_VOLUME旗標,仍應該執行 I/O 作業。
SL_RESTART_SCAN 用於 IRP_MJ_DIRECTORY_CONTROLIRP_MJ_QUERY_EAIRP_MJ_SET_QUOTA。 如果設定此旗標,則目錄、配額或擴充屬性資訊的掃描應該從目錄或清單中的第一個項目開始。 否則,應該從先前的掃描繼續掃描。
SL_RETURN_SINGLE_ENTRY 用於 IRP_MJ_DIRECTORY_CONTROLIRP_MJ_QUERY_EAIRP_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結構的指標。

迷你篩選會接收回呼數據結構的指標,做為下列回呼例程類型的 DataCallbackData 輸入參數:

迷你篩選的預先操作和後置回呼例程可以修改 I/O 作業FLT_IO_PARAMETER_BLOCK結構的內容,但 MajorFunction保留 成員除外。 如果這樣做,它必須呼叫 FltSetCallbackDataDirty,除非它也修改了作業之回呼數據結構的 IoStatus 成員。 否則,會忽略修改的值。

當篩選管理員對 minifilter 發出預先操作或後置回呼時,FltObjects-FileObject>TargetFileObject (CallbackData-Iopb-TargetFileObject>>) 一開始相同。 如果迷你篩選程式修改 TargetFileObjectTargetInstance,其後續從操作回呼呼叫 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 參數,並將回呼數據結構傳遞至 FltPerformSynchronousIoFltPerformAsynchronousIo

注意

在起始 I/O 作業時盡可能使用支援例程。 只有在特定 I/O 作業沒有支援函式時,迷你篩選器才應該配置自己的回呼數據。

規格需求

需求
標頭 fltkernel.h (包含 Fltkernel.h)

另請參閱

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltAllocateCallbackData

FltClearCallbackDataDirty

FltDecodeParameters

FltIsCallbackDataDirty

FltReadFile

FltSetCallbackDataDirty

IO_STACK_LOCATION

IRP

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_CREATE

IRP_MJ_DEVICE_CONTROL

IRP_MJ_DIRECTORY_CONTROL

IRP_MJ_FILE_SYSTEM_CONTROL

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_INTERNAL_DEVICE_CONTROL

IRP_MJ_LOCK_CONTROL

IRP_MJ_PNP

IRP_MJ_QUERY_EA

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_QUOTA

IRP_MJ_QUERY_SECURITY

IRP_MJ_QUERY_VOLUME_INFORMATION

IRP_MJ_READ

IRP_MJ_SET_EA

IRP_MJ_SET_INFORMATION

IRP_MJ_SET_QUOTA

IRP_MJ_SET_SECURITY

IRP_MJ_SET_VOLUME_INFORMATION

IRP_MJ_SHUTDOWN

IRP_MJ_WRITE

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_GENERATE_FILE_NAME

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK