RxDereferenceAndDeleteRxContext_Real 函数 (rxcontx.h)

RxDereferenceAndDeleteRxContext_Real 取消引用RX_CONTEXT数据结构,如果 ReferenceCount 成员转到零,则会从 RDBSS 内存中数据结构中解除分配并删除指定的RX_CONTEXT结构。

语法

void RxDereferenceAndDeleteRxContext_Real(
  [in] IN PRX_CONTEXT RxContext
);

参数

[in] RxContext

指向要删除的RX_CONTEXT结构的指针。

返回值

备注

RxDereferenceAndDeleteRxContext_RealRxCompleteRequest 以外的例程在异步请求期间调用,这些例程在启动线程或其他线程中触摸 RxContext 参数。 因此,RX_CONTEXT数据结构在上次取消引用时进行引用计数和最终确定。

如果 RxContext 参数指向的 RX_CONTEXT 结构的 ReferenceCount 成员在RxDereferenceAndDeleteRxContext_Real例程取消引用 (递减) 后不为,则RxDereferenceAndDeleteRxContext_Real会导致系统在检查的生成上出现 ASSERT。

删除RX_CONTEXT之前,RxDereferenceAndDeleteRxContext_Real例程会进行一些特定的检查。 这些检查包括以下内容:

  • 如果 AcquireReleaseFcbTrackerX 成员为 0,则 RxDereferenceAndDeleteRxContext_Real 会导致系统在已检查的生成上 ASSERT。
  • 如果指向 RxContext->RxDeviceObject 的关联RDBSS_DEVICE_OBJECT结构的 NumberOfActiveContexts 成员在取消引用 (递减) 且关联RDBSS_DEVICE_OBJECT结构的 StartStopContext.pStopContext 成员不为 NULL, 然后,RxDereferenceAndDeleteRxContext_Real将在 StartStopContext.pStopContext 成员的 RX_CONTEXT 结构上向 SyncEvent 发出信号。
如果RX_CONTEXT结构是从非页池内存中分配的, (RX_CONTEXT结构的 Flags 成员) 设置了RX_CONTEXT_FLAG_FROM_POOL选项,则 RxContext 参数指向的RX_CONTEXT结构将返回到内部 RDBSS 旁观列表或非分页池内存。

要求

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

另请参阅

RX_CONTEXT

RxCompleteRequest

RxCompleteRequest_Real

RxCreateRxContext

RxDereference

RxInitializeContext

RxPrepareContextForReuse

RxResumeBlockedOperations_Serially

__RxSynchronizeBlockingOperations

__RxSynchronizeBlockingOperationsMaybeDroppingFcbLock