FSCTL_OPLOCK_BREAK_ACKNOWLEDGE IOCTL (winioctl.h)

ファイルに対する排他的な便宜的ロックが解除されようとしているという通知に応答します。 ファイルがレベル 2 の便宜的ロックを受けるべきであることを示すには、この操作を使います。

この操作を実行するには、次のパラメーターを使用して DeviceIoControl 関数を呼び出します。

BOOL DeviceIoControl(
  (HANDLE) hDevice,                 // handle to file
  FSCTL_OPLOCK_BREAK_ACKNOWLEDGE,   // dwIoControlCode
  NULL,                             // lpInBuffer
  0,                                // nInBufferSize
  NULL,                             // lpOutBuffer
  0,                                // nOutBufferSize
  (LPDWORD) lpBytesReturned,        // number of bytes returned
  (LPOVERLAPPED) lpOverlapped       // OVERLAPPED structure
);

注釈

この操作は、ローカル サーバーから日和見ロックを要求したクライアント アプリケーションでのみ使用されます。 リモート サーバーから日和見ロックを要求するクライアント アプリケーションは、それらを直接要求してはなりません。ネットワーク リダイレクターは、アプリケーションの日和見ロックを透過的に要求します。

この操作に対する重複した I/O の影響については、 DeviceIoControl トピックの「解説」セクションを参照してください。

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE は、アプリケーションのファイルに対するレベル 1、バッチ、またはフィルターの日和見ロックが解除されたことを示す通知に対する応答です。 これは、アプリケーションがレベル 2 の日和見ロックを受け取る必要があることをサーバーに示します。 操作がエラー コード ERROR_IO_PENDINGを返す場合、サーバーはアプリケーションにファイルに対してレベル 2 のロックを付与します。

FSCTL_OPLOCK_BREAK_ACKNOWLEDGEを使用する代わりに、アプリケーションがファイルを閉じようとしていることを示す方法があります。 この応答には 、FSCTL_OPBATCH_ACK_CLOSE_PENDING コントロール コードを使用します。

もう 1 つの方法は、 FSCTL_OPLOCK_BREAK_ACK_NO_2 コントロール コードを使用して、ファイルを開いたままにして、すべてのロックを失うように要求することです。

日和見ロックが解除されたファイルに関連付けられている OVERLAPPED 構造体の hEvent メンバーを使用して、日和見ロックが解除されたことをアプリケーションに通知します。 アプリケーションでは、GetOverlappedResultHasOverlappedIoCompleted などの関数を使用することもできます。

Windows 8とWindows Server 2012では、このコードは次のテクノロジでサポートされています。

テクノロジ サポートされています
サーバー メッセージ ブロック (SMB) 3.0 プロトコル いいえ
SMB 3.0 Transparent Failover (TFO) いいえ
スケールアウト ファイル共有 (SO) を使う SMB 3.0 いいえ
クラスターの共有ボリューム ファイル システム (CsvFS) はい
Resilient File System (ReFS) はい

必要条件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
Header winioctl.h (Windows.h を含む)

こちらもご覧ください