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 例程通常仅由直接分配RX_CONTEXT结构的网络最小重定向程序驱动程序使用,而不是调用 RxCreateRxContext 例程来分配和初始化RX_CONTEXT结构。
如果为异步操作配置了 Irp 参数,则 RxContext 指向的 RX_CONTEXT 结构的 Flags 成员也设置了以下值:
还针对以下条件设置了RX_CONTEXT_FLAG_ASYNC_OPERATION:
- Irp 的 MajorFunction 成员是 IRP_MJ_READ、IRP_MJ_WRITE 或 IRP_MJ_DEVICE_CONTROL。
- Irp 的 MajorFunction 成员是IRP_MJ_DIRECTORY_CONTROL,而 IRP 的 MinorFunction 成员是IRP_MN_NOTIFY_CHANGE_DIRECTORY。
- Irp 的 MajorFunction 成员是IRP_MJ_FILE_SYSTEM_CONTROL,关联 FCB 的 NetRoot 成员不是 NULL,NET_ROOT的 Type 成员NET_ROOT_PIPE。
如果 RxDeviceObject 参数指示这是顶级 RDBSS 设备对象,则 RX_CONTEXT 结构的 Flags 成员也设置了以下值:
如果 Irp FileObject Flags 成员设置了 FO_WRITE_THROUGH 选项,则 RX_CONTEXT 结构的 Flags 成员也设置了以下值:
RxInitializeContext 在RX_CONTEXT结构中设置多个其他成员,包括以下内容:
- 设置正确的 NodeTypeCode、 NodeByteSize、 SerialNumber、 RxDeviceObject,并将 ReferenceCount 初始化为 1。
- 初始化 SyncEvent
- 初始化关联的 ScavengerEntry
- 初始化 BlockedOperations 的列表条目
- 根据 Irp 设置RX_CONTEXT成员。 其中包括 CurrentIrp、 OriginalThread、 MajorFunction、 MinorFunction、 CurrentIrpSp、 pFcb、 NonPagedFcb、 pFobx、 pRelevantSrvOpen 和 FobxSerialNumber 成员。
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | rxcontx.h (包括 Rxprocs.h rxcontx.h) |
IRQL | <= APC_LEVEL |
另请参阅
RxDereferenceAndDeleteRxContext_Real
RxResumeBlockedOperations_Serially