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 如果回呼數據結構代表以異步 I/O 控件程式代碼 (IOCTL) 或文件系統控制程式代碼 (FSCTL) 開啟檔案物件,使用 I/O 控件程式代碼 (IOCTL) 或檔系統控制程式代碼 (FSCTL) 來開啟,回呼數據結構代表 METHOD_BUFFERED IRP_MJ_DEVICE_CONTROL、IRP_MJ_INTERNAL_DEVICE_CONTROL或IRP_MJ_FILE_SYSTEM_CONTROL作業,也會傳回 TRUE。 這類要求可能會由文件系統同步提出,但這在所有情況下都不一定成立。
FltIsOperationSynchronous 傳回 TRUE 時,這不會指出 I/O 作業已同步處理。 也就是說,TRUE 值不會指出此作業的預先作回呼 (PFLT_POST_OPERATION_CALLBACK) 例程中傳回的小型篩選驅動程式FLT_PREOP_SYNCHRONIZE。 相反地,FltIsOperationSynchronous 傳回 TRUE,表示 I/O 作業與 I/O 管理員的觀點同步。
FltIsOperationSynchronous 可以針對所有作業類別呼叫:快速 I/O、文件系統篩選器 (FSFilter) 回呼,以及以 IRP 為基礎的作業。
要求
| 要求 | 價值 |
|---|---|
| 目標平臺 | 普遍 |
| 標頭 | fltkernel.h (包括 Fltkernel.h) |
| 連結庫 | FltMgr.lib |
| DLL | Fltmgr.sys |
| IRQL | 任何層級 |