다음을 통해 공유


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

변수 우선 순위 특성이 있는 시스템 스레드가 작업 항목을 처리하는 큐에 WORK_QUEUE_ITEM 삽입합니다.

HyperCriticalWorkQueue

호출할 루틴이 차단되지 않도록 시스템 스레드가 작업 항목을 처리하는 큐에 WORK_QUEUE_ITEM 삽입합니다.

[in] pWorkQueueItem

WORK_QUEUE_ITEM 대한 포인터입니다.

[in] Routine

호출할 루틴에 대한 포인터입니다.

[in] pContext

드라이버에 전달되는 완료할 작업 항목과 연결된 컨텍스트 매개 변수에 대한 포인터입니다.

반환 값

RxDispatchToWorkerThread 는 성공 시 STATUS_SUCCESS 반환하거나 실패 시 다음 오류 코드 중 하나를 반환합니다.

반환 코드 설명
STATUS_INSUFFICIENT_RESOURCES
항목을 디스패치할 수 없습니다.

설명

작업자 스레드에 작업을 디스패치하는 두 가지 일반적인 경우가 있습니다. 다음 두 디스패치 작업 간의 장단점은 시간 대 공간(메모리 사용량)입니다.

  • 작업이 반복적으로 디스패치되는 경우 WORK_QUEUE_ITEM 구조체를 디스패치할 데이터 구조의 일부로 미리 할당하여 시간이 보존됩니다. 이 경우 RxPostToWorkerThread 루틴을 사용합니다.
  • 자주 사용하지 않는 작업의 경우 필요할 때 작업 큐 항목에 대한 메모리를 동적으로 할당하고 해제하여 공간을 절약할 수 있습니다. 이 경우 RxDispatchToWorkerThread 루틴을 사용합니다.
RxPostToWorkerThread 루틴은 작업자 스레드의 컨텍스트에서 루틴을 호출합니다. 호출 루틴에 의해 페이징되지 않은 풀 메모리에서 WORK_QUEUE_ITEM 구조체의 메모리를 할당해야 합니다.

RxPostToWorkerThread 루틴 큐의 현재 구현은 호출이 시작된 동일한 프로세서에서 작동합니다.

디버그 빌드에서 RxPostToWorkerThread 루틴이 실패하면 오류 세부 정보와 함께 _RxLog 루틴이 호출됩니다. RxPostToWorkerThread 루틴이 실패하고 커널에서 WMI를 사용하도록 설정하면 오류의 세부 정보가 WMI로 기록됩니다.

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 rxworkq.h(Rxworkq.h, Rxstruc.h, Ntifs.h 포함)
IRQL <= APC_LEVEL

추가 정보

RxDispatchToWorkerThread

RxSpinDownMRxDispatcher

_RxLog