IRP_MJ_CREATE オペレーションの Oplock 状態の確認
以下は、ファイルの既存のストリームが開かれている場合にのみ適用されます (つまり、新しく作成されたストリームに既存の oplock を設定することはできません)。
注記 oplock の IRP_MJ_CREATE を処理するときに、目的のアクセスに FILE_READ_ATTRIBUTES、FILE_WRITE_ATTRIBUTES、または SYNCHRONIZE 以外のものが含まれていない場合、FILE_RESERVE_OPFILTER が指定されない限り、oplock は解除されません。 FILE_RESERVE_OPFILTER を指定すると、作成が成功すると常に oplock ブレークが発生します。 以下の表はすべての oplock に適用されるため、簡潔にするために上記の内容を省略しています。
要求の種類 | 条件 |
---|---|
レベル 1 |
次の場合、IRP_MJ_CREATE で中断されます。
|
oplock が壊れている場合:
|
|
レベル 2 |
次の場合、IRP_MJ_CREATE で中断されます。
|
oplock が壊れている場合:
|
|
Batch |
次の場合、IRP_MJ_CREATE で中断されます。
|
oplock が壊れている場合:
|
|
Assert |
次の場合、IRP_MJ_CREATE で中断されます。
|
oplock が壊れている場合:
|
|
読み込み |
次の場合、IRP_MJ_CREATE で中断されます。
|
oplock が壊れている場合:
|
|
読み取りハンドル |
次の場合、IRP_MJ_CREATE で中断されます。
|
oplock が壊れている場合:
|
|
読み取り/書き込み |
次の場合、IRP_MJ_CREATE で中断されます。
|
oplock が壊れている場合:
|
|
読み取り/書き込みハンドル |
次の場合、IRP_MJ_CREATE で中断されます。
|
oplock が壊れている場合:
|
ファイル システムは、IRP_MJ_CREATE 操作の処理時に (oplock パッケージ自体ではなく) バッチおよびフィルター oplock の追加チェックを実行します。これは、ファイル システムが oplock パッケージに oplock ブレーク処理の実行を要求するかどうかに影響します。 これは、1 つのデータ ストリームに対する操作が、同じファイルの他のデータ ストリーム (つまり、次の条件リストの最後の 2 つのリスト項目) の oplock に影響を与える可能性があるケースです。 次の条件の 1 つ以上が満たされる場合、ファイル システムは oplock パッケージにリクエストを送信して、oplock ブレーク処理を実行します。
これがオープンなネットワーク クエリで、KTM トランザクションが存在する場合は、ブレークを要求します。 それ以外の場合は、ネットワーク クエリを開いたときにブレークを要求しないでください。
SUPERSEDE、OVERWRITE、または OVERWRITE_IF 操作が代替データ ストリームで実行され、FILE_SHARE_DELETE が指定されておらず、プライマリ データ ストリームにバッチまたはフィルター oplock がある場合は、プライマリ データ ストリームでバッチまたはフィルター oplock の解除を要求します。
SUPERSEDE、OVERWRITE、または OVERWRITE_IF 操作がプライマリ データ ストリームで実行され、DELETE アクセスが要求されており、代替データ ストリームに Batch または Filter oplock がある場合。
ファイル システムが oplock パッケージに oplock ブレーク処理の実行を要求することを決定すると、前の表に示されているルールが適用されます。
Batch および Filter oplock を解除するためのチェックは、共有アクセス チェックが行われる前に行われます。 これは、共有違反により最終的にオープン リクエストが失敗した場合でも、バッチまたはフィルターの oplock が解除されることを意味します。