NdisQueueIoWorkItem-Funktion (ndis.h)

NDIS-Treiber rufen die NdisQueueIoWorkItem-Funktion auf, um ein Arbeitselement in die Warteschlange zu stellen.

Syntax

void NdisQueueIoWorkItem(
  [in] NDIS_HANDLE              NdisIoWorkItemHandle,
  [in] NDIS_IO_WORKITEM_ROUTINE Routine,
  [in] PVOID                    WorkItemContext
);

Parameter

[in] NdisIoWorkItemHandle

Ein Handle für eine private IO_WORKITEM-Struktur , die von einem vorherigen Aufruf des zurückgegeben wurde NdisAllocateIoWorkItem-Funktion .

[in] Routine

Der Einstiegspunkt zu der Funktion, die NDIS aufruft, um das Arbeitselement zu verarbeiten. NDIS ruft diese Routine im Kontext eines Systemthreads auf.

Hinweis Sie müssen die Funktion mit dem NDIS_IO_WORKITEM_FUNCTION-Typ deklarieren (nicht NDIS_IO_WORKITEM_ROUTINE). Weitere Informationen finden Sie im folgenden Abschnitt Beispiele.
 
Die Routine umfasst die folgenden Eingabeparameter:

WorkItemContext

Ein Zeiger auf den Kontextbereich, den der Treiber an den WorkItemContext-Parameter von NdisQueueIoWorkItem übergeben hat.

NdisIoWorkItemHandle

Ein Handle für eine private NDIS_IO_WORKITEM-Struktur , die von einem vorherigen Aufruf des zurückgegeben wurde NdisAllocateIoWorkItem-Funktion .

[in] WorkItemContext

Ein Zeiger auf einen vom Aufrufer bereitgestellten Kontextbereich, den NDIS an die Rückrufroutine übergibt. WorkItemContext kann alle vom Aufrufer angegebenen Daten sein, die der Treiber zum Verwalten des Arbeitselements benötigt.

Rückgabewert

Keine

Bemerkungen

NdisQueueIoWorkItem ruft IoQueueWorkItem auf, um ein Arbeitselement in die Warteschlange zu stellen. NDIS-Arbeitselemente verwenden den Warteschlangentyp CriticalWorkQueue .

Die vom Aufrufer bereitgestellte Rückrufroutine (NDIS_IO_WORKITEM_ROUTINE) wird in einem Systemthreadkontext unter IRQL = PASSIVE_LEVEL ausgeführt.

Diese vom Aufrufer bereitgestellte Routine kann die NdisFreeIoWorkItem-Funktion aufrufen, um den für das Arbeitselement zugewiesenen Speicher wieder abzurufen.

Beispiele

Um eine Routinefunktion zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Funktion identifiziert. Windows stellt eine Reihe von Funktionstypen für Treiber bereit. Das Deklarieren einer Funktion mithilfe der Funktionstypen hilft der Codeanalyse für Treiber, der statischen Treiberüberprüfung (Static Driver Verifier , SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine Routine-Funktion mit dem Namen "MyWorkitemRoutine" zu definieren, verwenden Sie den typ NDIS_IO_WORKITEM_FUNCTION , wie in diesem Codebeispiel gezeigt:

NDIS_IO_WORKITEM_FUNCTION MyWorkitemRoutine;

Implementieren Sie dann Ihre Funktion wie folgt:

_Use_decl_annotations_
VOID
 MyWorkitemRoutine(
    PVOID   WorkItemContext,
    NDIS_HANDLE  NdisIoWorkItemHandle
    )
  {...}

Der NDIS_IO_WORKITEM_FUNCTION Funktionstyp ist in der Headerdatei Ndis.h definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzu. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den NDIS_IO_WORKITEM_FUNCTION Funktionstyp in der Headerdatei angewendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für NDIS-Treiber.

Informationen zu Use_decl_annotations finden Sie unter Verhalten von Funktionen mit Anmerkungen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Unterstützt in NDIS 6.0 und höher.
Zielplattform Universell
Header ndis.h (einschließlich Ndis.h)
Bibliothek Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln Irql_Miscellaneous_Function(ndis)

Weitere Informationen

IoQueueWorkItem

MiniportHaltEx

NDIS-E/A-Arbeitselemente

NdisAllocateIoWorkItem

NdisFreeIoWorkItem