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 |
---|---|
|
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.
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 |