次の方法で共有


RxDereferenceAndDeleteRxContext_Real関数 (rxcontx.h)

RxDereferenceAndDeleteRxContext_Real RX_CONTEXTデータ構造を逆参照し、 ReferenceCount メンバーが 0 になった場合、RDBSS のメモリ内データ構造から指定したRX_CONTEXT構造体の割り当てを解除して削除します。

構文

void RxDereferenceAndDeleteRxContext_Real(
  [in] IN PRX_CONTEXT RxContext
);

パラメーター

[in] RxContext

削除するRX_CONTEXT構造体へのポインター。

戻り値

なし

解説

RxDereferenceAndDeleteRxContext_Realは、開始スレッドまたは他のスレッドのいずれかで RxContext パラメーターに触れる非同期要求中にRxCompleteRequest 以外のルーチンによって呼び出されます。 したがって、RX_CONTEXTデータ構造は、最後の逆参照で参照カウントされ、最終処理されます。

RxContext パラメーターが指すRX_CONTEXT構造体の ReferenceCount メンバーが、RxDereferenceAndDeleteRxContext_Real ルーチンによって逆参照 (デクリメント) された後に 0 でない場合、RxDereferenceAndDeleteRxContext_Realはチェックされたビルドでシステムを ASSERT します。

RxDereferenceAndDeleteRxContext_Real ルーチンは、RX_CONTEXTを削除する前に、いくつかの特定のチェックを行います。 これらのチェックには、次のものが含まれます。

  • AcquireReleaseFcbTrackerX メンバーが 0 の場合、RxDereferenceAndDeleteRxContext_Realはチェックされたビルドでシステムを ASSERT します。
  • 関連付けられたRDBSS_DEVICE_OBJECT構造体の NumberOfActiveContexts メンバーが RxContext->RxDeviceObject を指している場合、逆参照 (デクリメント) された後に 0 ではなく、関連付けられているRDBSS_DEVICE_OBJECT構造体の StartStopContext.pStopContext メンバーが NULL でない場合、 RxDereferenceAndDeleteRxContext_RealStartStopContext.pStopContext メンバー内の RX_CONTEXT 構造体の SyncEvent を通知します。
RX_CONTEXT構造体がページ以外のプール メモリから割り当てられた場合 (RX_CONTEXT 構造体の Flags メンバーに RX_CONTEXT_FLAG_FROM_POOL オプションが設定されています)、 RxContext パラメーターが指すRX_CONTEXT構造体は、内部 RDBSS ルックアサイド リストまたは非ページ プール メモリに返されます。

要件

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

こちらもご覧ください

RX_CONTEXT

RxCompleteRequest

RxCompleteRequest_Real

RxCreateRxContext

RxDereference

RxInitializeContext

RxPrepareContextForReuse

RxResumeBlockedOperations_Serially

__RxSynchronizeBlockingOperations

__RxSynchronizeBlockingOperationsMaybeDroppingFcbLock