次の方法で共有


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 Overview」を参照してください。

[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 と一般的な日和見ロックの詳細については、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 以降で使用できます。
ターゲット プラットフォーム の 万国
ヘッダー ntifs.h (Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

関連項目

FSCTL_OPBATCH_ACK_CLOSE_PENDING

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE

FSCTL_OPLOCK_BREAK_ACK_NO_2

FSCTL_OPLOCK_BREAK_NOTIFY

FSCTL_REQUEST_BATCH_OPLOCK

FSCTL_REQUEST_FILTER_OPLOCK

FSCTL_REQUEST_OPLOCK

FSCTL_REQUEST_OPLOCK_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FltOplockFsctrl の

FsRtlInitializeOplock

IRP_MJ_CREATE

IRP_MJ_FILE_SYSTEM_CONTROL