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 值:
傳回碼 | 描述 |
---|---|
STATUS_SUCCESS | 針對IRP_MJ_CREATE要求,STATUS_SUCCESS表示已授與要求的篩選 oplock。 對於 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要求,且已在作業的 create options 參數中指定FILE_OPEN_REQUIRING_OPLOCK。 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_OPBATCH_ACK_CLOSE_PENDING
- FSCTL_OPLOCK_BREAK_ACK_NO_2
- FSCTL_OPLOCK_BREAK_ACKNOWLEDGE
- FSCTL_OPLOCK_BREAK_NOTIFY
- FSCTL_REQUEST_BATCH_OPLOCK
- FSCTL_REQUEST_FILTER_OPLOCK
- FSCTL_REQUEST_OPLOCK_LEVEL_1
- FSCTL_REQUEST_OPLOCK_LEVEL_2
- FSCTL_REQUEST_OPLOCK
如需這些 FSCL 和一般機會鎖定的詳細資訊,請參閱 Microsoft Windows SDK 檔。
如果 IRP 是IRP_MJ_CREATE要求,FsRtlOplockFsctrlEx 可以使用下列所有條件為 true 來要求擱置篩選 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 同步處理。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 7 開始,即可使用 FsRtlOplockFsctrlEx 例程。 |
目標平臺 | 普遍 |
標頭 | ntifs.h (include Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
另請參閱
FSCTL_OPBATCH_ACK_CLOSE_PENDING