FsRtlOplockFsctrlEx 函式 (ntifs.h)

FsRtlOplockFsctrlEx 例程會代表文件系統或篩選驅動程式執行各種作業 (oplock) 作業。

語法

NTSTATUS FsRtlOplockFsctrlEx(
  [in] POPLOCK Oplock,
  [in] PIRP    Irp,
  [in] ULONG   OpenCount,
  [in] ULONG   Flags
);

參數

[in] Oplock

檔案的不透明不透明指標。 此指標必須由 先前對 FsRtlInitializeOplock 的呼叫初始化。

[in] Irp

I/O 作業的 IRP 指標。 這個參數是必要的,而且不能是 NULL

[in] OpenCount

如果要求獨佔的 oplock,檔案的使用者句柄數目。 設定層級 2、R 或 RH oplock 要求的非零值表示檔案上有位元組範圍鎖定。 如需 oplock 類型的相關信息,請參閱 Oplock 概觀

[in] Flags

相關聯 oplock 作業的位掩碼。 文件系統或篩選驅動程式會設定位,以指定 FsRtlOplockFsctrlEx 的行為。 此參數具有下列選項:

旗標 意義
OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH (0x00000001) 檔系統已確認任何目前開啟句柄上的所有 oplock 機碼都相符。 藉由指定此旗標,您可以在檔案存在多個開啟句柄時,允許 oplock 套件授與層級 RW 或 RWH 的 oplock。 如需 oplock 類型的詳細資訊,請參閱 Oplock 概觀

傳回值

FsRtlOplockFsctrlEx 會傳回下列其中一個 NTSTATUS 值:

傳回碼 Description
STATUS_SUCCESS 對於IRP_MJ_CREATE要求,STATUS_SUCCESS表示已授與要求的篩選作業鎖定。 針對 FSCTL 作業,STATUS_SUCCESS的意義取決於 FSCTL 程式代碼。 如需詳細資訊,請參閱下列一節中列出的 FSCTL 代碼參考頁面。
STATUS_CANCELLED I/O 作業已取消。 STATUS_CANCELLED是錯誤碼。
STATUS_INVALID_PARAMETER I/O 作業的 FSCTL 程式代碼不是下列一節所列的有效值之一。 STATUS_INVALID_PARAMETER是錯誤碼。
STATUS_OPLOCK_NOT_GRANTED 無法授與 oplock。 STATUS_OPLOCK_NOT_GRANTED是錯誤碼。
STATUS_PENDING 僅適用於 FSCTL 作業。 STATUS_PENDING的意義取決於 FSCTL 程式代碼。 如需詳細資訊,請參閱下列一節中列出的 FSCTL 代碼參考頁面。 STATUS_PENDING是成功的程序代碼。
STATUS_CANNOT_BREAK_OPLOCK 無法授與新的 oplock。 IRP 是IRP_MJ_CREATE要求,FILE_OPEN_REQUIRING_OPLOCK是在作業的 create options 參數中指定。 STATUS_CANNOT_BREAK_OPLOCK是成功的程序代碼。

備註

文件系統和舊版篩選驅動程式會呼叫 FsRtlOplockFsctrlEx ,以針對建立或文件系統控制 I/O 作業執行各種 oplock 作業。 Minifilters 應該呼叫 FltOplockFsctrlEx ,而不是 FsRtlOplockFsctrlEx

Irp 參數所指向的 IRP 必須是IRP_MJ_FILE_SYSTEM_CONTROL或IRP_MJ_CREATE作業的有效 IRP。

如果 IRP 是IRP_MJ_FILE_SYSTEM_CONTROL要求,FsRtlOplockFsctrlEx 可以搭配下列其中一個 FSCTL 程式代碼使用,此程式代碼是在 IrpSp-Parameters.FileSystemControl.FsControlCode> 中設定:

如需這些 FSCTL 和一般操作鎖定的詳細資訊,請參閱 Microsoft Windows SDK 檔。

如果 IRP 是IRP_MJ_CREATE要求,如果下列所有條件都成立, 可以使用 FsRtlOplockFsctrlEx 來要求擱置篩選 oplock:

  • OpenCount 參數的值必須是 1。
  • IRP_MJ_CREATE要求的 DesiredAccess 參數值必須FILE_READ_ATTRIBUTES。
  • IRP_MJ_CREATE要求的 ShareAccess 參數值必須FILE_SHARE_READ |FILE_SHARE_WRITE |FILE_SHARE_DELETE。

如果授與擱置篩選作業鎖定的要求, FsRtlOplockFsctrlEx 會傳回STATUS_SUCCESS。 如需建立參數的詳細資訊,請參閱 IRP_MJ_CREATE的參考專案。

呼叫此函式的篩選和文件系統必須將呼叫同步處理至系統提供的 oplock 套件。 如需詳細資訊 ,請參閱 Oplock 同步 處理。

規格需求

需求
最低支援的用戶端 FsRtlOplockFsctrlEx 例程從 Windows 7 開始可供使用。
目標平台 Universal
標頭 ntifs.h (包含 Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL <= APC_LEVEL

另請參閱

FSCTL_OPBATCH_ACK_CLOSE_PENDING

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE

FSCTL_OPLOCK_BREAK_ACK_NO_2

FSCTL_OPLOCK_BREAK_NOTIFY

FSCTL_REQUEST_BATCH_OPLOCK

FSCTL_REQUEST_FILTER_OPLOCK

FSCTL_REQUEST_OPLOCK

FSCTL_REQUEST_OPLOCK_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FltOplockFsctrl

FsRtlInitializeOplock

IRP_MJ_CREATE

IRP_MJ_FILE_SYSTEM_CONTROL