Partager via


Fonction RxDispatchToWorkerThread (rxworkq.h)

RxDispatchToWorkerThread appelle une routine dans le contexte d’un thread de travail. La mémoire du WORK_QUEUE_ITEM est allouée par cette routine.

Syntaxe

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

Paramètres

[in] pMRxDeviceObject

Pointeur vers l’objet d’appareil du pilote de mini-redirecteur réseau correspondant.

[in] WorkQueueType

Type de la file d’attente de travail représentant la priorité de la tâche. Le paramètre WorkQueueType peut être l’une des énumérations suivantes pour WORK_QUEUE_TYPE :

CriticalWorkQueue

Insérez le WORK_QUEUE_ITEM dans la file d’attente à partir de laquelle un thread système avec un attribut de priorité en temps réel traitera l’élément de travail.

DelayedWorkQueue

Insérez le WORK_QUEUE_ITEM dans la file d’attente à partir de laquelle un thread système avec un attribut de priorité variable traitera l’élément de travail.

HyperCriticalWorkQueue

Insérez le WORK_QUEUE_ITEM dans la file d’attente à partir de laquelle un thread système traitera l’élément de travail afin que la routine à appeler ne soit pas bloquée.

[in] Routine

Pointeur vers la routine à appeler.

[in] pContext

Pointeur vers un paramètre de contexte associé à l’élément de travail à terminer qui est passé au pilote.

Valeur retournée

RxDispatchToWorkerThread retourne STATUS_SUCCESS en cas de réussite ou l’un des codes d’erreur suivants en cas d’échec :

Code de retour Description
STATUS_INSUFFICIENT_RESOURCES
L’élément n’a pas pu être distribué.

Remarques

Il existe deux cas courants de répartition des opérations vers des threads de travail :

  • Pour une opération très peu fréquente, l’espace peut être conservé en allouant dynamiquement et en libérant de la mémoire pour l’élément de file d’attente de travail lorsque cela est nécessaire. La routine RxDispatchToWorkerThread serait utilisée dans ce cas
  • Lorsqu’une opération va être distribuée à plusieurs reprises, le temps est conservé en allouant à l’avance les WORK_QUEUE_ITEM dans le cadre de la structure de données à distribuer et en utilisant cette mémoire allouée à plusieurs reprises. La routine RxPostToWorkerThread serait utilisée dans ce cas
Le compromis entre les deux opérations de répartition est le temps et l’espace (utilisation de la mémoire).

RxDispatchToWorkerThread appelle une routine dans le contexte d’un thread worker. La mémoire du WORK_QUEUE_ITEM est allouée par la routine RxDispatchToWorkerThread à partir de la mémoire du pool non paginé. Par conséquent, cette routine peut échouer si des ressources insuffisantes sont disponibles.

L’implémentation actuelle des files d’attente de routine RxDispatchToWorkerThread fonctionne sur le même processeur d’où provient l’appel.

Si la routine RxDispatchToWorkerThread échoue sur une build de débogage, la routine _RxLog est appelée avec les détails de l’erreur. Si la routine RxDispatchToWorkerThread échoue et que WMI est activé dans le noyau, les détails de l’erreur sont consignés avec WMI.

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête rxworkq.h (inclure Rxworkq.h, Rxstruc.h, Ntifs.h)
IRQL <= APC_LEVEL

Voir aussi

RxPostToWorkerThread

RxSpinDownMRxDispatcher