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 | 任何層級 |