次の方法で共有


RxPostToWorkerThread 関数 (rxworkq.h)

RxPostToWorkerThread は、ワーカー スレッドのコンテキストでパラメーターとして渡されたルーチンを呼び出します。 WORK_QUEUE_ITEMのメモリは、呼び出し元によって割り当てられている必要があります。

構文

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

パラメーター

[in] pMRxDeviceObject

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

[in] WorkQueueType

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

CriticalWorkQueue

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

DelayedWorkQueue

変数 priority 属性を持つシステム スレッドが作業項目を処理するキューにWORK_QUEUE_ITEMを挿入します。

HyperCriticalWorkQueue

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

[in] pWorkQueueItem

WORK_QUEUE_ITEMへのポインター。

[in] Routine

呼び出すルーチンへのポインター。

[in] pContext

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

戻り値

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

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

注釈

ワーカー スレッドに操作をディスパッチする一般的なケースは 2 つあります。 次の 2 つのディスパッチ操作のトレードオフは、時間と空間 (メモリ使用量) です。

  • 操作が繰り返しディスパッチされる場合は、ディスパッチされるデータ構造の一部として事前にWORK_QUEUE_ITEM構造を割り当てることで時間が節約されます。 この場合は、 RxPostToWorkerThread ルーチンを 使用します。
  • 操作の頻度が低い場合は、作業キュー項目のメモリを必要なときに動的に割り当て、解放することで、領域を節約できます。 この場合は、 RxDispatchToWorkerThread ルーチンを使用します。
RxPostToWorkerThread ルーチンは、ワーカー スレッドのコンテキストでルーチンを呼び出します。 WORK_QUEUE_ITEM構造体のメモリは、呼び出し元のルーチンによってページプール以外のメモリから割り当てる必要があります。

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

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

要件

要件
対象プラットフォーム デスクトップ
Header rxworkq.h (Rxworkq.h、Rxstruc.h、Ntifs.h を含む)
IRQL <= APC_LEVEL

こちらもご覧ください

RxDispatchToWorkerThread

RxSpinDownMRxDispatcher

_RxLog