RxDispatchToWorkerThread 関数 (rxworkq.h)

RxDispatchToWorkerThread 、ワーカー スレッドのコンテキストでルーチンを呼び出します。 WORK_QUEUE_ITEMのメモリは、このルーチンによって割り当てられます。

構文

NTSTATUS RxDispatchToWorkerThread(
  [in] IN PRDBSS_DEVICE_OBJECT     pMRxDeviceObject,
  [in] IN WORK_QUEUE_TYPE          WorkQueueType,
  [in] IN PRX_WORKERTHREAD_ROUTINE Routine,
  [in] IN PVOID                    pContext
);

パラメーター

[in] pMRxDeviceObject

対応するネットワーク ミニ リダイレクター ドライバーのデバイス オブジェクトへのポインター。

[in] WorkQueueType

タスクの優先度を表す作業キューの種類。 WorkQueueType パラメーターには、WORK_QUEUE_TYPEの次のいずれかの列挙体を指定できます。

CriticalWorkQueue

リアルタイム優先度属性を持つシステム スレッドが作業項目を処理するキューにWORK_QUEUE_ITEMを挿入します。

DelayedWorkQueue

WORK_QUEUE_ITEMをキューに挿入します。このキューには、変数優先度属性を持つシステム スレッドが作業項目を処理します。

HyperCriticalWorkQueue

呼び出されるルーチンがブロックされないように、システム スレッドが作業項目を処理するキューにWORK_QUEUE_ITEMを挿入します。

[in] Routine

呼び出されるルーチンへのポインター。

[in] pContext

ドライバーに渡される完了する作業項目に関連付けられているコンテキスト パラメーターへのポインター。

戻り値

RxDispatchToWorkerThread 、成功した場合はSTATUS_SUCCESS、失敗した場合は次のいずれかのエラー コードが返されます。

リターン コード 形容
STATUS_INSUFFICIENT_RESOURCES
アイテムをディスパッチできませんでした。

備考

ワーカー スレッドに操作をディスパッチする一般的なケースは 2 つあります。

  • 非常に頻度の低い操作では、作業キュー項目が必要なときにメモリを動的に割り当てて解放することで、領域を節約できます。 この場合、rxDispatchToWorkerThread ルーチン が使用されます。
  • 操作が繰り返しディスパッチされる場合、ディスパッチするデータ構造の一部として事前にWORK_QUEUE_ITEMを割り当て、この事前に割り当てられたメモリを繰り返し使用することで、時間が節約されます。 この場合、rxPostToWorkerThread ルーチン が使用されます
2 つのディスパッチ操作の間のトレードオフは、時間と領域 (メモリ使用量) です。

rxDispatchToWorkerThread は、ワーカー スレッドのコンテキストでルーチンを呼び出します。 WORK_QUEUE_ITEMのメモリは、非ページ プール メモリから RxDispatchToWorkerThread ルーチンによって割り当てられます。 そのため、リソースが不足している場合、このルーチンは失敗する可能性があります。

RxDispatchToWorkerThread ルーチン キューの現在の実装は、呼び出し元と同じプロセッサで動作します。

RxDispatchToWorkerThread ルーチンがデバッグ ビルドで失敗した場合、エラーの詳細を含む _RxLog ルーチンが呼び出されます。 RxDispatchToWorkerThread ルーチンが失敗し、カーネルで WMI が有効になっている場合、エラーの詳細は WMI でログに記録されます。

必要条件

要件 価値
ターゲット プラットフォーム デスクトップ
ヘッダー rxworkq.h (Rxworkq.h、Rxstruc.h、Ntifs.h を含む)
IRQL <= APC_LEVEL

関連項目

RxPostToWorkerThread する

RxSpinDownMRxDispatcher