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的指针。

返回值

备注

RxInitializeContextRxCreateRxContext 例程在内部调用。 因此 ,RxInitializeContext 例程通常仅由直接分配RX_CONTEXT结构的网络最小重定向程序驱动程序使用,而不是调用 RxCreateRxContext 例程来分配和初始化RX_CONTEXT结构。

如果为异步操作配置了 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_ROOTType 成员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
  • 初始化关联的 ScavengerEntry
  • 初始化 BlockedOperations 的列表条目
  • 根据 Irp 设置RX_CONTEXT成员。 其中包括 CurrentIrpOriginalThreadMajorFunctionMinorFunctionCurrentIrpSppFcbNonPagedFcbpFobxpRelevantSrvOpenFobxSerialNumber 成员。

要求

要求
目标平台 桌面
标头 rxcontx.h (包括 Rxprocs.h rxcontx.h)
IRQL <= APC_LEVEL

另请参阅

RX_CONTEXT

RxCompleteRequest

RxCompleteRequest_Real

RxCreateRxContext

RxDereference

RxDereferenceAndDeleteRxContext_Real

RxPrepareContextForReuse

RxResumeBlockedOperations_Serially

__RxSynchronizeBlockingOperations

__RxSynchronizeBlockingOperationsMaybeDroppingFcbLock