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_1、FSCTL_REQUEST_OPLOCK_LEVEL_2、FSCTL_REQUEST_FILTER_OPLOCK和FSCTL_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_READ
或 OPLOCK_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) |