共用方式為


FSCTL_REQUEST_OPLOCK IOCTL (winioctl.h)

要求在檔案上 (oplock) 的商機鎖定,並確認發生 oplock 中斷。

若要執行這項作業,請使用下列參數呼叫 DeviceIoControl 函 式。

BOOL DeviceIoControl(
  (HANDLE) hDevice,                 // handle to file
  FSCTL_REQUEST_OPLOCK,             // dwIoControlCode
  (LPVOID) lpInBuffer,              // input buffer
  (DWORD) nInBufferSize,            // size of input buffer
  (LPVOID) lpOutBuffer,             // output buffer
  (DWORD) nOutBufferSize,           // size of output buffer
  (LPDWORD) lpBytesReturned,        // number of bytes returned
  (LPOVERLAPPED) lpOverlapped       // OVERLAPPED structure
);

備註

只有要求從本機伺服器 (oplock (oplock) 的用戶端應用程式才會使用此作業。 從遠端伺服器要求商機鎖定的用戶端應用程式不得直接要求它們,網路重新導向器會以透明方式要求應用程式的商機鎖定。 嘗試使用此作業向遠端伺服器要求商機鎖定,將會導致要求遭到拒絕。

FSCTL_REQUEST_OPLOCK控制項程式碼提供比下列相關控制項程式碼更有效率的功能:FSCTL_REQUEST_OPLOCK_LEVEL_1FSCTL_REQUEST_OPLOCK_LEVEL_2FSCTL_REQUEST_FILTER_OPLOCKFSCTL_REQUEST_BATCH_OPLOCK。 要求不同的 oplock 層級可以在相同的控制碼上重複執行,而不需在使用 FSCTL_REQUEST_OPLOCK時關閉並重新開啟控制碼;其他控制程式代碼需要關閉控制碼,然後使用 CreateFile 重新開啟,才能進行這類變更。 這可藉由在重新發出FSCTL_REQUEST_OPLOCK控制項程式碼時,操作REQUEST_OPLOCK_INPUT_BUFFER結構的RequestedOplockLevel成員來完成。

下表摘要說明從 FSCTL_REQUEST_OPLOCK 可用的 oplock 類型快取能力如何對應至層級 2、層級 1 和批次 oplock。

替代控制項程式碼 對等 RequestedOplockLevel 旗標值 Oplock 類型
FSCTL_REQUEST_BATCH_OPLOCK OPLOCK_LEVEL_CACHE_READ \| OPLOCK_LEVEL_CACHE_WRITE \| OPLOCK_LEVEL_CACHE_HANDLE RWH
FSCTL_REQUEST_OPLOCK_LEVEL_1 OPLOCK_LEVEL_CACHE_READ \| OPLOCK_LEVEL_CACHE_WRITE RW
FSCTL_REQUEST_OPLOCK_LEVEL_2 OPLOCK_LEVEL_CACHE_READ R

使用FSCTL_REQUEST_OPLOCK控制項程式碼 並將 RequestedOplockLevel 成員設定為 OPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE 授與 RH類型的 oplock。 RH oplock 類似于 FSCTL_REQUEST_FILTER_OPLOCK 控制項程式碼授與的篩選 oplock。 不過請注意,篩選 oplock 一次只允許一個用戶端在檔案上保存 oplock;FSCTL_REQUEST_OPLOCK可讓多個用戶端同時鎖定檔案。 另一個差異是 ,FSCTL_REQUEST_FILTER_OPLOCK 在寫入發生之前需要 oplock 中斷通知,其中 FSCTL_REQUEST_OPLOCK 不會因為 oplock 中斷通知是諮詢的,而且允許繼續寫入而不通知。 如需詳細資訊,請參閱 中斷 Oplocks

如果檔案以非重迭 (同步) 模式開啟, FSCTL_REQUEST_OPLOCK控制項程式 代碼就會失敗。

如需此作業上重迭 I/O 的影響,請參閱 DeviceIoControl 主題的一節。

在 Windows 8 和 Windows Server 2012 中,下列技術支援此程式碼。

技術 支援
伺服器訊息區 (SMB) 3.0 通訊協定
SMB 3.0 透明容錯移轉 (TFO)
具有向外延展檔案共用的 SMB 3.0 (SO)
叢集共用磁片區檔案系統 (CsvFS) Yes
彈性檔案系統 (ReFS) Yes

此外,從 Windows 8 和 Windows Server 2012 開始, FSCTL_REQUEST_OPLOCK控制項程式 代碼可用來要求目錄和檔案上的 oplock。 目錄上的 oplock 要求可以在 RequestedOplockLevel 成員中指定 OPLOCK_LEVEL_CACHE_READOPLOCK_LEVEL_CACHE_READ | OPLOCK_LEVEL_CACHE_HANDLE

當目錄的列舉內容變更時,目錄上的 R 或 RH oplock 會中斷為 None。 例如,在目錄中新增/刪除檔案、變更目錄中檔案的大小、修改目錄中檔案的時間戳記等等,都會中斷目錄中的 oplock。 此 oplock 中斷不需要通知,目錄中的變更才會發生;它是僅限諮詢的。

當目錄本身重新命名或刪除時,目錄上的 RH oplock 會中斷為 R。 此 oplock 中斷確實需要通知,才能變更目錄。

規格需求

   
最低支援的用戶端 Windows 7 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 R2 [僅限桌面應用程式]
標頭 winioctl.h (包含 Windows.h)

另請參閱