共用方式為


FltIsOperationSynchronous 函式 (fltkernel.h)

FltIsOperationSynchronous 例程會判斷指定的回呼數據結構 (FLT_CALLBACK_DATA) 是否代表同步或異步 I/O 作業。

語法

BOOLEAN FLTAPI FltIsOperationSynchronous(
  [in] PFLT_CALLBACK_DATA CallbackData
);

參數

[in] CallbackData

作業 (FLT_CALLBACK_DATA) 之回呼數據結構的指標。

傳回值

FltIsOperationSynchronous 如果作業是同步的,則會傳回 TRUE;如果作業是異步的,則會傳回 FALSE。

備註

FltIsOperationSynchronous 會根據下列條件,判斷指定的回呼數據結構 (FLT_CALLBACK_DATA) 代表同步或異步 I/O 作業:

  • 如果作業不是以 IRP 為基礎的 I/O 作業,則作業是同步的。 若要判斷作業是否以 IRP 為基礎,請使用 FLT_IS_IRP_OPERATION 宏。

  • 如果作業是異步分頁 I/O 作業,則即使此清單中的其中一個其他條件成立,作業也是異步的。

  • 如果作業是同步分頁 I/O 作業,則作業是同步的。

  • 如果作業的檔案物件已針對同步 I/O 開啟,則作業為同步。

  • 如果在作業的 IRP 中設定IRP_SYNCHRONOUS_API旗標,作業會是同步的。 此旗標是針對作業所設定,例如IRP_MJ_QUERY_INFORMATION和IRP_MJ_SET_INFORMATION,即使對異步 I/O 開啟的檔案物件執行也一樣。

  • 如果上述條件都不是 true,則作業是異步的。

注意

FltIsOperationSynchronous 如果回呼數據結構代表IRP_MJ_DEVICE_CONTROL、IRP_MJ_INTERNAL_DEVICE_CONTROL或IRP_MJ_FILE_SYSTEM_CONTROL作業,則會使用 I/O 控件程式代碼 (IOCTL) 或文件系統控件程式代碼 (FSCTL) METHOD_BUFFERED 傳回 TRUE,即使檔案物件已針對異步 I/O 開啟也一樣。 這類要求可能由文件系統同步處理,但在所有情況下都不一定成立。

當 FltIsOperationSynchronous 傳回 TRUE 時,這並不表示 I/O 作業已同步處理。 也就是說,TRUE 值並不表示此作業的預先操作回呼 (PFLT_POST_OPERATION_CALLBACK) 例程中傳回的迷你篩選驅動程式FLT_PREOP_SYNCHRONIZE。 相反 地,FltIsOperationSynchronous 會傳回 TRUE,表示 I/O 作業從 I/O 管理員的觀點而言是同步的。

FltIsOperationSynchronous 可以針對所有作業類別呼叫:快速 I/O、文件系統篩選 (FSFilter) 回呼和 IRP 型作業。

規格需求

需求
目標平台 Universal
標頭 fltkernel.h (包含 Fltkernel.h)
程式庫 FltMgr.lib
Dll Fltmgr.sys
IRQL 任何層級

另請參閱

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

IoIsOperationSynchronous