Freigeben über


RxPostToWorkerThread-Funktion (rxworkq.h)

RxPostToWorkerThread ruft eine Routine auf, die als Parameter im Kontext eines Workerthreads übergeben wird. Arbeitsspeicher für die WORK_QUEUE_ITEM muss vom Aufrufer zugewiesen werden.

Syntax

NTSTATUS RxPostToWorkerThread(
  [in] IN PRDBSS_DEVICE_OBJECT     pMRxDeviceObject,
  [in] IN WORK_QUEUE_TYPE          WorkQueueType,
  [in] IN PRX_WORK_QUEUE_ITEM      pWorkQueueItem,
  [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. Dieser Parameter kann einer der folgenden Werte sein:

CriticalWorkQueue

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

DelayedWorkQueue

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

HyperCriticalWorkQueue

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

[in] pWorkQueueItem

Ein Zeiger auf WORK_QUEUE_ITEM.

[in] Routine

Ein Zeiger auf die zu aufrufende 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 Fehlercode bei 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. Der Kompromiss zwischen den folgenden beiden Verteilungsvorgängen ist Zeit im Vergleich zum Speicherplatz (Speicherauslastung):

  • Wenn ein Vorgang wiederholt verteilt wird, wird Zeit gespart, indem die WORK_QUEUE_ITEM-Struktur im Voraus als Teil der zu sendenden Datenstruktur zugewiesen wird. Verwenden Sie in diesem Fall die RxPostToWorkerThread-Routine .
  • Bei einem seltenen Vorgang können Sie Speicherplatz sparen, indem Sie bei Bedarf dynamisch Arbeitsspeicher für das Arbeitswarteschlangenelement zuweisen und freigeben. Verwenden Sie in diesem Fall die RxDispatchToWorkerThread-Routine .
Die RxPostToWorkerThread-Routine ruft eine Routine im Kontext eines Workerthreads auf. Der Arbeitsspeicher für die WORK_QUEUE_ITEM-Struktur muss von der aufrufenden Routine aus dem nicht ausgelagerten Poolspeicher zugeordnet werden.

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

Wenn die RxPostToWorkerThread-Routine bei einem Debugbuild fehlschlägt, wird die _RxLog Routine mit Details des Fehlers aufgerufen. Wenn die RxPostToWorkerThread-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

RxDispatchToWorkerThread

RxSpinDownMRxDispatcher

_RxLog