共用方式為


FltOplockBreakToNoneEx 函式 (fltkernel.h)

FltOplockBreakToNoneEx 例程會立即中斷所有機會鎖定 (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 中斷的作業。 一般而言,只有當回呼數據所代表的 I/O 作業 CallbackData 參數所指向的 I/O 作業是IRP_MJ_CREATE作業時,才會使用此旗標。

[in, optional] Context

要傳遞至回呼例程的呼叫端定義內容資訊的指標,WaitCompletionRoutine,以及 PrePostCallbackDataRoutine 參數指向的回呼例程。

[in, optional] WaitCompletionRoutine

呼叫端提供的回呼例程指標。 如果作業鎖定中斷正在進行中,當中斷完成時,就會呼叫此例程。 這個參數是選擇性的,而且可以 NULL。 如果它 NULL,則呼叫端會進入等候狀態,直到 oplock 中斷完成為止。

此例程宣告如下:

typedef VOID
(*PFLTOPLOCK_WAIT_COMPLETE_ROUTINE) (
    __in PFLT_CALLBACK_DATA CallbackData,
 __in_opt PVOID Context
      );

此例程具有下列參數:

CallbackData

I/O 作業之回呼數據結構的指標。

上下文

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 參數中傳遞至 FltOplockBreakToNoneEx的內容資訊指標。

傳回值

FltOplockBreakToNoneEx 會傳回下列其中一個FLT_PREOP_CALLBACK_STATUS碼:

傳回碼 描述
FLT_PREOP_COMPLETE
FltOplockBreakToNoneEx 發生集區配置失敗,或呼叫 FsRtlOplockBreakToNoneEx 函式傳回錯誤。 FltOplockBreakToNoneEx 會在 IO_STATUS_BLOCK 結構的 Status 成員中設定錯誤碼。 IO_STATUS_BLOCK結構是在 FLT_CALLBACK_DATA 回呼數據結構的 IoStatus 成員中指定。 CallbackData 參數會指向此FLT_CALLBACK_DATA。
FLT_PREOP_PENDING
已起始 oplock 中斷,導致篩選管理員將 I/O 作業張貼至工作佇列。 I/O 作業是由 CallbackData 參數所指向的回呼數據表示。
FLT_PREOP_SUCCESS_WITH_CALLBACK
CallbackData 參數所指向的回呼數據未寫入,而且會立即執行 I/O 作業。 請注意,如果在 Flags 參數中指定OPLOCK_FLAG_COMPLETE_IF_OPLOCKED呼叫端,即使 I/O 作業未加上筆跡,oplock 中斷可能仍進行中。 若要判斷情況是否如此,呼叫端應該檢查 IO_STATUS_BLOCK 結構 狀態 成員中的STATUS_OPLOCK_BREAK_IN_PROGRESS。 IO_STATUS_BLOCK結構是在 FLT_CALLBACK_DATA 回呼數據結構的 IoStatus 成員中指定。

言論

如需機會鎖定的詳細資訊,請參閱 Microsoft Windows SDK 檔。

要求

要求 價值
最低支援的用戶端 從 Windows 7 開始,即可使用 FltOplockBreakToNoneEx 例程。
目標平臺 普遍
標頭 fltkernel.h (包括 Fltkernel.h)
連結庫 FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

另請參閱

FLT_CALLBACK_DATA

FltInitializeOplock

FsRtlOplockBreakToNoneEx

IO_STATUS_BLOCK