日和見ロックの解除

日和見ロックを解除することは、あるクライアントがファイルに対して持つロックを低下させ、日和見ロックの有無にかかわらず別のクライアントがファイルを開くことができるようにするプロセスです。 他のクライアントがオープン操作を要求すると、サーバーはオープン操作を遅延させ、日和見ロックを保持しているクライアントに通知します。

ロックを保持しているクライアントは、読み取りバッファーの破棄、ファイルの閉じなど、ロックの種類に適したアクションを実行します。 日和見ロックを保持しているクライアントが、実行されたことをサーバーに通知した場合にのみ、開いている操作を要求しているクライアントのファイルをサーバーが開きます。 ただし、レベル 2 のロックが解除されると、サーバーはクライアントに対して、破損したと報告しますが、キャッシュされたデータがサーバーにフラッシュされないため、受信確認を待機しません。

排他ロック (フィルター、レベル 1、またはバッチ) の中断を認める場合、壊れたロックの所有者は別の排他ロックを要求できません。 排他ロックをレベル 2 のロックに低下させたり、ロックをまったく行ったりしない可能性があります。 通常、所有者はロックを解除し、ファイルを閉じようとしたときにファイルを閉じます。

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