FSCTL_OPLOCK_BREAK_ACK_NO_2 IOCTL (winioctl.h)
ファイルに対する便宜的ロックが解除されようとしているという通知に応答します。 ファイルに対するすべての便宜的ロックを解除し、ファイルを開いたままにするには、この操作を使います。
この操作を実行するには、次のパラメーターを使用して DeviceIoControl 関数を呼び出します。
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to file
FSCTL_OPLOCK_BREAK_ACK_NO_2, // 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_ACK_NO_2 コントロール コードを使用して、日和見ロックを放棄するが、ファイルを開いたままにすることを計画していることをサーバーに示します。 操作がエラー コード ERROR_IO_PENDINGを返す場合、サーバーはファイルに対してレベル 2 のロックを付与します。
FSCTL_OPLOCK_BREAK_ACK_NO_2を使用する代わりに、アプリケーションがファイルを閉じようとしていることを示す方法があります。 この応答には 、FSCTL_OPBATCH_ACK_CLOSE_PENDING コントロール コードを使用します。
もう 1 つの方法は、ロックが壊れているが排他的な日和見ロックである場合に使用されます。これは、ファイルが代わりにレベル 2 の日和見ロックを受け取る必要があることを示す方法です。 この応答には 、FSCTL_OPLOCK_BREAK_ACKNOWLEDGE コントロール コードを使用します。
日和見ロックが解除されたファイルに関連付けられている OVERLAPPED 構造体の hEvent メンバーを使用して、日和見ロックが解除されたことをアプリケーションに通知します。 アプリケーションでは、GetOverlappedResult や HasOverlappedIoCompleted などの関数を使用することもできます。
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 を含む) |