FSCTL_REQUEST_OPLOCK_LEVEL_2 IOCTL (winioctl.h)
ファイルに対してレベル 2 の便宜的ロックを要求します。
この操作を実行するには、次のパラメーターを使用して DeviceIoControl 関数を呼び出します。
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to file
FSCTL_REQUEST_OPLOCK_LEVEL_2, // dwIoControlCode
NULL, // lpInBuffer
0, // nInBufferSize
NULL, // lpOutBuffer
0, // nOutBufferSize
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
注釈
この操作は、ローカル サーバーから日和見ロックを要求するクライアント アプリケーションでのみ使用されます。 リモート サーバーから日和見ロックを要求するクライアント アプリケーションは、それらを直接要求してはなりません。ネットワーク リダイレクターは、アプリケーションの日和見ロックを透過的に要求します。 この操作を使用してリモート サーバーから日和見ロックを要求しようとすると、要求が拒否されます。
新しい oplock 型が必要な場合は、ハンドルを閉じ、CreateFile を使用して新しいハンドルを再度開き、必要なFSCTL_REQUEST_OPLOCK_XXXコントロール コードを使用して新しいハンドルで DeviceIoControl を呼び出す必要があります。 oplock 型を変更できるハンドルに対して oplock を要求するには (ハンドルを閉じて再度開く必要はありません)、 FSCTL_REQUEST_OPLOCK コントロール コードを使用します。
FSCTL_REQUEST_OPLOCK_LEVEL_2を使用して、ファイルに対してレベル 2 の日和見ロックを要求します。 クライアント ファイル システムは、レベル 2 のロックが保持されている限り、読み取りデータをキャッシュできます (ただし、データを書き込む必要はありません)。
ファイル システムでは、ロックが解除されたときにレベル 2 の日和見ロックを要求したアプリケーションからの受信確認は必要ありません。 ロックが解除されると、ネットワーク リダイレクターに、ファイルからキャッシュされたデータが有効と見なされないことが通知されます。 詳細については、「 Breaking Oplocks」を参照してください。
詳細については、「 日和見ロックの種類」を参照してください。
さまざまな oplock コントロール コードの比較については、「 FSCTL_REQUEST_OPLOCK」を参照してください。
ファイルが非オーバーラップ (同期) モードで開かれている場合、FSCTL_REQUEST_OPLOCK_LEVEL_2コントロール コードは失敗します。
この操作に対する重複した I/O の影響については、 DeviceIoControl トピックの「解説」セクションを参照してください。
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 を含む) |