Freigeben über


RxDispatchToWorkerThread-Funktion (rxworkq.h)

RxDispatchToWorkerThread eine Routine im Kontext eines Arbeitsthreads aufruft. Der Speicher für die WORK_QUEUE_ITEM wird von dieser Routine zugewiesen.

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

[in] WorkQueueType

Der Typ der Arbeitswarteschlange, die die Priorität des Vorgangs 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 Attribut mit Echtzeitpriorität die Arbeitsaufgabe verarbeitet.

DelayedWorkQueue

Fügen Sie die WORK_QUEUE_ITEM in die Warteschlange ein, aus der ein Systemthread mit einem Attribut mit variabler Priorität die Arbeitsaufgabe verarbeitet.

HyperCriticalWorkQueue

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

[in] Routine

Ein Zeiger auf die zu aufrufende Routine.

[in] pContext

Ein Zeiger auf einen Kontextparameter, der der Arbeitsaufgabe zugeordnet ist, die an den Treiber übergeben wird.

Rückgabewert

RxDispatchToWorkerThread- gibt STATUS_SUCCESS bei Erfolg oder einer der folgenden Fehlercodes für Fehler zurück:

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

Bemerkungen

Es gibt zwei häufige Fälle des Verteilens von Vorgängen an Arbeitsthreads:

  • Bei sehr seltenen Vorgängen kann speicherplatzsparend sein, indem bei Bedarf Speicher für die Arbeitswarteschlangenaufgabe dynamisch zuzuordnen und freizugeben ist. Die RxDispatchToWorkerThread Routine würde in diesem Fall verwendet werden.
  • Wenn ein Vorgang wiederholt verteilt werden soll, wird die Zeit gespart, indem die WORK_QUEUE_ITEM im Voraus als Teil der zu verteilenden Datenstruktur zugewiesen und dieser vorab zugewiesene Speicher wiederholt verwendet wird. Die RxPostToWorkerThread Routine würde in diesem Fall verwendet werden.
Der Kompromiss zwischen den beiden Verteilervorgängen ist Zeit im Vergleich zum Speicherplatz (Speicherauslastung).

Die RxDispatchToWorkerThread ruft eine Routine im Kontext eines Arbeitsthreads auf. Der Speicher für die WORK_QUEUE_ITEM wird vom RxDispatchToWorkerThread Routine aus nicht ausgelagerten Poolspeicher zugeordnet. Daher kann diese Routine fehlschlagen, wenn nicht genügend Ressourcen verfügbar sind.

Die aktuelle Implementierung der RxDispatchToWorkerThread Routinewarteschlangen funktionieren auf demselben Prozessor, aus dem der Anruf 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
Header- rxworkq.h (include Rxworkq.h, Rxstruc.h, Ntifs.h)
IRQL- <= APC_LEVEL

Siehe auch

RxPostToWorkerThread-

RxSpinDownMRxDispatcher