FsRtlOplockFsctrlEx 関数 (ntifs.h)
FsRtlOplockFsctrlEx ルーチンは、ファイル システムまたはフィルター ドライバーに代わって、さまざまな日和見ロック (oplock) 操作を実行します。
構文
NTSTATUS FsRtlOplockFsctrlEx(
[in] POPLOCK Oplock,
[in] PIRP Irp,
[in] ULONG OpenCount,
[in] ULONG Flags
);
パラメーター
[in] Oplock
ファイルの不透明な oplock ポインター。 このポインターは、 FsRtlInitializeOplock の以前の呼び出しによって初期化されている必要があります。
[in] Irp
I/O 操作の IRP へのポインター。 このパラメーターは必須であり、 NULL にすることはできません。
[in] OpenCount
排他 oplock が要求されている場合は、ファイルのユーザー ハンドルの数。 レベル 2、R、または RH oplock 要求に 0 以外の値を設定すると、ファイルにバイト範囲ロックがあることを示します。 oplock 型の詳細については、「 Oplock の概要」を参照してください。
[in] Flags
関連付けられた oplock 操作のビットマスク。 ファイル システムまたはフィルター ドライバーは、 FsRtlOplockFsctrlEx の動作を指定するビットを設定します。 このパラメーターには、次のオプションがあります。
フラグ | 説明 |
---|---|
OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH (0x00000001) | ファイル システムは、現在開いているハンドル上のすべての oplock キーが一致することを確認しました。 このフラグを指定すると、ファイルに対する複数のオープン ハンドルが存在する場合に、oplock パッケージにレベル RW または RWH の oplock を許可できます。 oplock 型の詳細については、「 Oplock の概要」を参照してください。 |
戻り値
FsRtlOplockFsctrlEx は 、次のいずれかの NTSTATUS 値を返します。
リターン コード | 説明 |
---|---|
STATUS_SUCCESS | IRP_MJ_CREATE要求の場合、STATUS_SUCCESSは、要求されたフィルター oplock が許可されたことを示します。 FSCTL 操作の場合、STATUS_SUCCESSの意味は FSCTL コードによって異なります。 詳細については、次の「解説」セクションに記載されている FSCTL コードのリファレンス ページを参照してください。 |
STATUS_CANCELLED | I/O 操作が取り消されました。 STATUS_CANCELLEDはエラー コードです。 |
STATUS_INVALID_PARAMETER | I/O 操作の FSCTL コードは、次の「解説」セクションに記載されている有効な値の 1 つではありません。 STATUS_INVALID_PARAMETERはエラー コードです。 |
STATUS_OPLOCK_NOT_GRANTED | oplock を許可できませんでした。 STATUS_OPLOCK_NOT_GRANTEDはエラー コードです。 |
STATUS_PENDING | FSCTL 操作にのみ使用されます。 STATUS_PENDINGの意味は、FSCTL コードによって異なります。 詳細については、次の「解説」セクションに記載されている FSCTL コードのリファレンス ページを参照してください。 STATUS_PENDINGは成功コードです。 |
STATUS_CANNOT_BREAK_OPLOCK | 新しい oplock を許可できませんでした。 IRP はIRP_MJ_CREATE要求であり、FILE_OPEN_REQUIRING_OPLOCK操作の作成オプション パラメーターで指定されました。 STATUS_CANNOT_BREAK_OPLOCKは成功コードです。 |
注釈
ファイル システムとレガシ フィルター ドライバーは 、FsRtlOplockFsctrlEx を呼び出して、作成またはファイル システムコントロールの I/O 操作に対してさまざまな oplock 操作を実行します。 ミニフィルターでは、 FsRtlOplockFsctrlEx の代わりに FltOplockFsctrlEx を呼び出す必要があります。
Irp パラメーターによって指される IRP は、IRP_MJ_FILE_SYSTEM_CONTROLまたはIRP_MJ_CREATE操作の有効な IRP である必要があります。
IRP がIRP_MJ_FILE_SYSTEM_CONTROL要求である場合、FsRtlOplockFsctrlEx は、IrpSp-Parameters.FileSystemControl.FsControlCode> に設定されている次のいずれかの FSCTL コードで使用できます。
- FSCTL_OPBATCH_ACK_CLOSE_PENDING
- FSCTL_OPLOCK_BREAK_ACK_NO_2
- FSCTL_OPLOCK_BREAK_ACKNOWLEDGE
- FSCTL_OPLOCK_BREAK_NOTIFY
- FSCTL_REQUEST_BATCH_OPLOCK
- FSCTL_REQUEST_FILTER_OPLOCK
- FSCTL_REQUEST_OPLOCK_LEVEL_1
- FSCTL_REQUEST_OPLOCK_LEVEL_2
- FSCTL_REQUEST_OPLOCK
これらの FSCTL の詳細と、一般的な日和見ロックの詳細については、Microsoft Windows SDKドキュメントを参照してください。
IRP がIRP_MJ_CREATE要求である場合、 FsRtlOplockFsctrlEx を使用して、次のすべての条件が満たされている場合に保留中のフィルター 操作ロックを要求できます。
- OpenCount パラメーターの値は 1 である必要があります。
- IRP_MJ_CREATE要求の DesiredAccess パラメーターの値はFILE_READ_ATTRIBUTESする必要があります。
- IRP_MJ_CREATE要求の ShareAccess パラメーターの値は、FILE_SHARE_READする必要があります|FILE_SHARE_WRITE |FILE_SHARE_DELETE。
保留中のフィルター oplock の要求が許可されている場合、 FsRtlOplockFsctrlEx はSTATUS_SUCCESSを返します。 パラメーターの作成の詳細については、 IRP_MJ_CREATEのリファレンス エントリを参照してください。
この関数を呼び出すフィルターとファイル システムは、システム提供の oplock パッケージに呼び出しを同期する必要があります。 詳細については、「 Oplock 同期 」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | FsRtlOplockFsctrlEx ルーチンは、Windows 7 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | ntifs.h (Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
こちらもご覧ください
FSCTL_OPBATCH_ACK_CLOSE_PENDING
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示