다음을 통해 공유


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
항목을 디스패치할 수 없습니다.

설명

작업자 스레드에 작업을 디스패치하는 두 가지 일반적인 경우는 다음과 같습니다.

  • 매우 드문 작업의 경우 필요할 때 작업 큐 항목에 대한 메모리를 동적으로 할당하고 해제하여 공간을 보존할 수 있습니다. 이 경우 RxDispatchToWorkerThread 루틴이 사용됩니다.
  • 작업이 반복적으로 디스패치될 때 디스패치할 데이터 구조의 일부로 WORK_QUEUE_ITEM 미리 할당하고 이 미리 할당된 메모리를 반복적으로 사용하여 시간이 보존됩니다. 이 경우 RxPostToWorkerThread 루틴이 사용됩니다.
두 디스패치 작업 간의 장단점은 시간 대 공간(메모리 사용량)입니다.

RxDispatchToWorkerThread는 작업자 스레드의 컨텍스트에서 루틴을 호출합니다. WORK_QUEUE_ITEM 대한 메모리는 페이징되지 않은 풀 메모리에서 RxDispatchToWorkerThread 루틴에 의해 할당됩니다. 따라서 리소스가 부족한 경우 이 루틴이 실패할 수 있습니다.

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

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

요구 사항

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

추가 정보

RxPostToWorkerThread

RxSpinDownMRxDispatcher