NdisQueueIoWorkItem-Funktion (ndis.h)
NDIS-Treiber rufen die NdisQueueIoWorkItem-Funktion auf, um ein Arbeitselement in die Warteschlange zu stellen.
void NdisQueueIoWorkItem(
[in] NDIS_HANDLE NdisIoWorkItemHandle,
[in] NDIS_IO_WORKITEM_ROUTINE Routine,
[in] PVOID WorkItemContext
);
[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.
Ein Zeiger auf den Kontextbereich, den der Treiber an den WorkItemContext-Parameter von NdisQueueIoWorkItem übergeben hat.
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.
Keine
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.
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.
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) |