FltOplockBreakToNoneEx 函式 (fltkernel.h)
FltOplockBreakToNoneEx 例程會立即中斷所有 opportunistic 鎖定, (oplocks) 而不考慮任何 oplock 密鑰。
語法
FLT_PREOP_CALLBACK_STATUS FLTAPI FltOplockBreakToNoneEx(
[in] POPLOCK Oplock,
[in] PFLT_CALLBACK_DATA CallbackData,
[in] ULONG Flags,
[in, optional] PVOID Context,
[in, optional] PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
[in, optional] PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);
參數
[in] Oplock
檔案的不透明不透明鎖定指標。 此指標必須由先前呼叫 FltInitializeOplock 來初始化。
[in] CallbackData
I/O 作業的回呼數據 指標 (FLT_CALLBACK_DATA) 結構。
[in] Flags
相關聯檔案 I/O 作業的位掩碼。 迷你篩選驅動程式會設定位,以指定 FltOplockBreakToNoneEx 的行為。 Flags 參數具有下列選項:
OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)
允許 oplock 中斷繼續,而不封鎖或擱置造成 oplock 中斷的作業。 一般而言,只有當 CallbackData 參數指向的回呼數據所代表的 I/O 作業是IRP_MJ_CREATE作業時,才會使用此旗標。
[in, optional] Context
要傳遞給 WaitCompletionRoutine 和 PrePostCallbackDataRoutine 參數所指向之回呼例程之呼叫端定義內容資訊的指標。
[in, optional] WaitCompletionRoutine
呼叫端提供的回呼例程指標。 如果作業鎖定中斷正在進行中,當中斷完成時,就會呼叫此例程。 此參數是選擇性的,可以是 NULL。 如果是 NULL,則呼叫端會進入等候狀態,直到作業鎖定中斷完成為止。
此例程宣告如下:
typedef VOID
(*PFLTOPLOCK_WAIT_COMPLETE_ROUTINE) (
__in PFLT_CALLBACK_DATA CallbackData,
__in_opt PVOID Context
);
此例程具有下列參數:
CallbackData
I/O 作業之回呼數據結構的指標。
Context
在 Context 參數中傳遞至 FltOplockBreakToNoneEx 的內容資訊指標。
[in, optional] PrePostCallbackDataRoutine
如果要寫入 I/O 作業,則呼叫端提供的回呼例程指標。 此例程會在 oplock 套件畫上 IRP 之前呼叫。 此參數是選擇性的,可以是 NULL。
此例程宣告如下:
typedef VOID
(*PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE) (
__in PFLT_CALLBACK_DATA CallbackData,
__in_opt PVOID Context
);
此例程具有下列參數:
CallbackData
I/O 作業之回呼數據結構的指標。
Context
在 Context 參數中傳遞至 FltOplockBreakToNoneEx 的內容資訊指標。
傳回值
FltOplockBreakToNoneEx 會傳回下列其中一個FLT_PREOP_CALLBACK_STATUS代碼:
傳回碼 | Description |
---|---|
|
FltOplockBreakToNoneEx 發生集區配置失敗,或 呼叫 FsRtlOplockBreakToNoneEx 函式傳回錯誤。 FltOplockBreakToNoneEx 會在 IO_STATUS_BLOCK 結構的 Status 成員中設定錯誤碼。 IO_STATUS_BLOCK結構是在FLT_CALLBACK_DATA回呼數據結構的IoStatus成員中指定。 CallbackData 參數指向這個FLT_CALLBACK_DATA。 |
|
已起始作業中斷,導致篩選管理員將 I/O 作業張貼到工作佇列。 I/O 作業是由 CallbackData 參數指向的回呼數據表示。 |
|
CallbackData 參數指向的回呼數據未畫筆,而且會立即執行 I/O 作業。 請注意,如果在 Flags 參數中指定OPLOCK_FLAG_COMPLETE_IF_OPLOCKED呼叫端,即使 I/O 作業未畫筆,作業中斷也可能正在進行中。 若要判斷這種情況,呼叫端應該檢查IO_STATUS_BLOCK結構之 Status 成員中的 STATUS_OPLOCK_BREAK_IN_PROGRESS 。 IO_STATUS_BLOCK結構是在FLT_CALLBACK_DATA回呼數據結構的IoStatus成員中指定。 |
備註
如需有關機會鎖定的詳細資訊,請參閱 Microsoft Windows SDK 檔。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | FltOplockBreakToNoneEx 例程可從 Windows 7 開始提供。 |
目標平台 | Universal |
標頭 | fltkernel.h (包含 Fltkernel.h) |
程式庫 | FltMgr.lib |
Dll | Fltmgr.sys |
IRQL | <= APC_LEVEL |