次の方法で共有


RxInitializeContext 関数 (rxcontx.h)

RxInitializeContext は、既存のRX_CONTEXTデータ構造を初期化します。

構文

void RxInitializeContext(
  [in, optional] IN PIRP                 Irp,
  [in]           IN PRDBSS_DEVICE_OBJECT RxDeviceObject,
  [in]           IN ULONG                InitialContextFlags,
  [in, out]      IN OUT PRX_CONTEXT      RxContext
);

パラメーター

[in, optional] Irp

このRX_CONTEXT構造体によってカプセル化される IRP へのポインター。

[in] RxDeviceObject

このRX_CONTEXTと IRP が適用されるデバイス オブジェクトへのポインター。

[in] InitialContextFlags

RX_CONTEXT構造体に格納するRX_CONTEXT データ構造の Flags メンバーの初期値のセット。 これらの初期値は、次の列挙の任意の組み合わせにすることができます。

RX_CONTEXT_FLAG_WAIT

この値を設定すると、ファイル システム プロセスによって後で実行するために IRP をポストする必要はありませんが、完了するまで待機する必要があります。

RX_CONTEXT_FLAG_MUST_SUCCEED

この値が設定されている場合、操作は成功する必要があります。 この値は現在 RDBSS では使用されていませんが、ネットワーク ミニ リダイレクター ドライバーで使用される場合があります。

RX_CONTEXT_FLAG_MUST_SUCCEED_NONBLOCKING

この値が設定されている場合、非ブロッキング操作では操作が成功する必要があります。 この値は現在 RDBSS では使用されていませんが、ネットワーク ミニ リダイレクター ドライバーで使用される場合があります。

[in, out] RxContext

初期化するRX_CONTEXTへのポインター。

戻り値

なし

解説

RxInitializeContext は、 RxCreateRxContext ルーチンによって内部的に呼び出されます。 したがって、 RxInitializeContext ルーチンは、通常、 rxCreateRxContext ルーチンを呼び出してRX_CONTEXT構造体を割り当てて初期化するのではなく、RX_CONTEXT構造体を直接割り当てるネットワーク min-redirector ドライバーでのみ使用されます。

Irp パラメーターが非同期操作用に構成されている場合、RxContext が指すRX_CONTEXT構造体の Flags メンバーにも次の値が設定されます。

RX_CONTEXT_FLAG_ASYNC_OPERATIONは、次の条件にも設定されます。

  • IrpMajorFunction メンバーは、IRP_MJ_READ、IRP_MJ_WRITE、またはIRP_MJ_DEVICE_CONTROLです。
  • IrpMajorFunction メンバーはIRP_MJ_DIRECTORY_CONTROLであり、IRPMinorFunction メンバーはIRP_MN_NOTIFY_CHANGE_DIRECTORYです。
  • IrpMajorFunction メンバーはIRP_MJ_FILE_SYSTEM_CONTROLであり、関連付けられている FCB の NetRoot メンバーは NULL ではなく、NET_ROOTの Type メンバーはNET_ROOT_PIPE。
これが再帰的なファイル システム呼び出し (スレッド ローカル ストレージの TopLevelIrp メンバーが現在の Irp) の場合、RxContextFlags メンバーにも次の値が設定されます。

RxDeviceObject パラメーターがこれが最上位レベルの RDBSS デバイス オブジェクトであることを示している場合、RX_CONTEXT構造体の Flags メンバーにも次の値が設定されます。

Irp FileObject Flags メンバーに FO_WRITE_THROUGH オプションが設定されている場合、RX_CONTEXT構造体の Flags メンバーにも次の値が設定されます。

RxInitializeContext は、次のようなRX_CONTEXT構造体内の他のメンバーの数を設定します。

  • 適切な NodeTypeCodeNodeByteSizeSerialNumberRxDeviceObject を設定し、 ReferenceCount を 1 に初期化します。
  • SyncEvent を初期化します
  • 関連付けられているスカベンジャーエントリを初期化する
  • BlockedOperations のリスト エントリを初期化します
  • Irp に基づいてRX_CONTEXTメンバーを設定します。 CurrentIrpOriginalThreadMajorFunctionMinorFunctionCurrentIrpSppFcbNonPagedFcbpFobxpRelevantSrvOpenおよび FobxSerialNumber メンバーが含まれます。

要件

要件
対象プラットフォーム デスクトップ
Header rxcontx.h (Rxprocs.h rxcontx.h を含む)
IRQL <= APC_LEVEL

こちらもご覧ください

RX_CONTEXT

RxCompleteRequest

RxCompleteRequest_Real

RxCreateRxContext

RxDereference

RxDereferenceAndDeleteRxContext_Real

RxPrepareContextForReuse

RxResumeBlockedOperations_Serially

__RxSynchronizeBlockingOperations

__RxSynchronizeBlockingOperationsMaybeDroppingFcbLock