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 を含む)

こちらもご覧ください