Funzione RxDispatchToWorkerThread (rxworkq.h)

RxDispatchToWorkerThread richiama una routine nel contesto di un thread di lavoro. La memoria per il WORK_QUEUE_ITEM viene allocata da questa routine.

Sintassi

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

Parametri

[in] pMRxDeviceObject

Puntatore all'oggetto dispositivo del driver del mini-redirector di rete corrispondente.

[in] WorkQueueType

Tipo della coda di lavoro che rappresenta la priorità dell'attività. Il parametro WorkQueueType può essere uno dei seguenti enumerazioni per WORK_QUEUE_TYPE:

CriticalWorkQueue

Inserire il WORK_QUEUE_ITEM nella coda da cui un thread di sistema con un attributo di priorità in tempo reale elabora l'elemento di lavoro.

DelayedWorkQueue

Inserire il WORK_QUEUE_ITEM nella coda da cui un thread di sistema con un attributo di priorità variabile elabora l'elemento di lavoro.

HyperCriticalWorkQueue

Inserire il WORK_QUEUE_ITEM nella coda da cui un thread di sistema elabora l'elemento di lavoro in modo che la routine da richiamare non venga bloccata.

[in] Routine

Puntatore alla routine da richiamare.

[in] pContext

Puntatore a un parametro di contesto associato all'elemento di lavoro da completare che viene passato al driver.

Valore restituito

RxDispatchToWorkerThread restituisce STATUS_SUCCESS in caso di esito positivo o uno dei codici di errore seguenti in caso di errore:

Codice restituito Descrizione
STATUS_INSUFFICIENT_RESOURCES
Impossibile inviare l'elemento.

Commenti

Esistono due casi comuni di invio delle operazioni ai thread di lavoro:

  • Per un'operazione molto rara, lo spazio può essere conservato allocando e liberando in modo dinamico la memoria per l'elemento della coda di lavoro quando è necessario. In questo caso verrà usata la routine RxDispatchToWorkerThread
  • Quando un'operazione verrà inviata ripetutamente, il tempo viene conservato allocando in anticipo la WORK_QUEUE_ITEM come parte della struttura dei dati da inviare e usando ripetutamente questa memoria preallocata. In questo caso verrà usata la routine RxPostToWorkerThread
Il compromesso tra le due operazioni di invio è il tempo rispetto allo spazio (utilizzo della memoria).

RxDispatchToWorkerThread richiama una routine nel contesto di un thread di lavoro. La memoria per il WORK_QUEUE_ITEM viene allocata dalla routine RxDispatchToWorkerThread dalla memoria del pool non di paging. Di conseguenza, questa routine può non riuscire se sono disponibili risorse insufficienti.

L'implementazione corrente delle code di routine RxDispatchToWorkerThread funziona sullo stesso processore da cui ha avuto origine la chiamata.

Se la routine RxDispatchToWorkerThread non riesce in una compilazione di debug, la routine _RxLog viene chiamata con i dettagli dell'errore. Se la routine RxDispatchToWorkerThread ha esito negativo e WMI è abilitato nel kernel, i dettagli dell'errore verranno registrati con WMI.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione rxworkq.h (include Rxworkq.h, Rxstruc.h, Ntifs.h)
IRQL <= APC_LEVEL

Vedi anche

RxPostToWorkerThread

RxSpinDownMRxDispatcher