Freigeben über


RxDispatchToWorkerThread-Funktion (rxworkq.h)

RxDispatchToWorkerThread ruft eine Routine im Kontext eines Workerthreads auf. Der Arbeitsspeicher für die WORK_QUEUE_ITEM wird von dieser Routine zugeordnet.

Syntax

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

Parameter

[in] pMRxDeviceObject

Ein Zeiger auf das Geräteobjekt des entsprechenden Netzwerk-Miniumleitungstreibers.

[in] WorkQueueType

Der Typ der Arbeitswarteschlange, die die Priorität der Aufgabe darstellt. Der WorkQueueType-Parameter kann eine der folgenden Enumerationen für WORK_QUEUE_TYPE sein:

CriticalWorkQueue

Fügen Sie die WORK_QUEUE_ITEM in die Warteschlange ein, aus der ein Systemthread mit einem Echtzeitprioritätsattribut das Arbeitselement verarbeitet.

DelayedWorkQueue

Fügen Sie die WORK_QUEUE_ITEM in die Warteschlange ein, aus der ein Systemthread mit einem Variablenprioritätsattribut das Arbeitselement verarbeitet.

HyperCriticalWorkQueue

Fügen Sie die WORK_QUEUE_ITEM in die Warteschlange ein, aus der ein Systemthread das Arbeitselement verarbeitet, sodass die aufzurufende Routine nicht blockiert wird.

[in] Routine

Ein Zeiger auf die aufzurufende Routine.

[in] pContext

Ein Zeiger auf einen Kontextparameter, der dem zu erledigenden Arbeitselement zugeordnet ist und an den Treiber übergeben wird.

Rückgabewert

RxDispatchToWorkerThread gibt STATUS_SUCCESS bei Erfolg oder einen der folgenden Fehlercodes bei Einem Fehler zurück:

Rückgabecode Beschreibung
STATUS_INSUFFICIENT_RESOURCES
Das Element konnte nicht versendet werden.

Hinweise

Es gibt zwei häufige Fälle der Verteilung von Vorgängen an Workerthreads:

  • Bei sehr seltenen Vorgängen kann Speicherplatz eingespart werden, indem Speicher für das Arbeitswarteschlangenelement dynamisch zugewiesen und freigegeben wird, wenn es benötigt wird. In diesem Fall wird die RxDispatchToWorkerThread-Routine verwendet.
  • Wenn ein Vorgang wiederholt verteilt wird, wird Zeit gespart, indem die WORK_QUEUE_ITEM im Voraus als Teil der zu sendenden Datenstruktur zugewiesen und dieser vorab zugewiesene Speicher wiederholt verwendet wird. In diesem Fall wird die RxPostToWorkerThread-Routine verwendet.
Der Kompromiss zwischen den beiden Verteilungsvorgängen ist Zeit und Raum (Speicherauslastung).

RxDispatchToWorkerThread ruft eine Routine im Kontext eines Workerthreads auf. Der Arbeitsspeicher für die WORK_QUEUE_ITEM wird von der RxDispatchToWorkerThread-Routine aus nicht ausgelagertem Poolspeicher zugeordnet. Daher kann diese Routine fehlschlagen, wenn unzureichende Ressourcen verfügbar sind.

Die aktuelle Implementierung der RxDispatchToWorkerThread-Routinewarteschlangen funktioniert auf demselben Prozessor, von dem der Aufruf stammt.

Wenn die RxDispatchToWorkerThread-Routine bei einem Debugbuild fehlschlägt, wird die _RxLog-Routine mit Details des Fehlers aufgerufen. Wenn die RxDispatchToWorkerThread-Routine fehlschlägt und WMI im Kernel aktiviert ist, werden Details des Fehlers mit WMI protokolliert.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile rxworkq.h (include Rxworkq.h, Rxstruc.h, Ntifs.h)
IRQL <= APC_LEVEL

Weitere Informationen

RxPostToWorkerThread

RxSpinDownMRxDispatcher