NdisScheduleWorkItem-Funktion (ndis.h)
Hinweis NDIS 5. x ist veraltet und wird von NDIS 6 ersetzt. x. Informationen zur neuen NDIS-Treiberentwicklung finden Sie unter Netzwerktreiber ab Windows Vista. Informationen zum Portieren von NDIS 5. x Treiber auf NDIS 6. xfinden Sie unter Portieren von NDIS 5.x-Treibern zu NDIS 6.0.
NdisScheduleWorkItem fügt ein bestimmtes Arbeitselement in eine Warteschlange ein, aus der ein Systemarbeitsthread das Element entfernt und der Rückruffunktion, die der Treiber zuvor an NdisInitializeWorkItembereitgestellt hat.
Syntax
NDIS_STATUS NdisScheduleWorkItem(
[in] __drv_aliasesMem PNDIS_WORK_ITEM WorkItem
);
Parameter
[in] WorkItem
Zeiger auf die Arbeitsaufgabe, die durch einen vorherigen Aufruf von NdisInitializeWorkItemeingerichtet wurde.
Rückgabewert
NdisScheduleWorkItem ist immer erfolgreich und gibt daher immer NDIS_STATUS_SUCCESS zurück.
Bemerkungen
Ein Aufruf von NdisScheduleWorkItem- ermöglicht es einem NDIS-Treiber, einen treiberbestimmten Vorgang zurückzuweisen, der bei einem niedrigeren IRQL durchgeführt werden kann oder sollte als die ausgelöste IRQL, bei der er derzeit für seine Workerthread-Rückruffunktion ausgeführt wird.
Der Rückruf des Treibers wird in einem Systemthreadkontext bei IRQL = PASSIVE_LEVEL später ausgeführt. Diese vom Aufrufer bereitgestellte Funktion ist für das Freigeben des Speichers verantwortlich, den der Treiber für WorkItem-zugewiesen hat. Wenn der Treiber z. B. NdisAllocateMemoryWithTag aufgerufen hat, um einen Kontextbereich für NdisInitializeWorkItembereitzustellen, sollte die Rückruffunktion den gegenseitigen Aufruf an NdisFreeMemory mit WorkItem- vornehmen, bevor das Steuerelement zurückgegeben wird.
Ein Treiber darf nicht warten, bis seine Rückrufroutine einen Vorgang abgeschlossen hat, wenn er bereits ein Synchronisierungsobjekt enthält und versucht, eine andere abzurufen. Beispielsweise sollte ein NDIS-Treiber alle aktuell gehaltenen Drehsperren freigeben und so weiter, bevor er NdisScheduleWorkItem-aufruft. Ein NDIS-Protokolltreiber der höchsten Ebene muss auch alle aktuell gehaltenen Semaphore, Mutexes, Ressourcenvariablen usw. freigeben, bevor er NdisScheduleWorkItem-aufruft. Durch das Freigeben aller Synchronisierungsressourcen vor der Warteschlange eines synchronen Workerthread-Vorgangs werden Deadlocks verhindert.
Ein serialisierter Miniporttreiber sollte niemals versuchen, eine Workerthread-Rückrufroutine in die Warteschlange zu stellen, da es für einen solchen Treiber keine Möglichkeit gibt, den Zugriff auf seine NIC-Kontextbereiche mit einem Workerthreadrückruf zu synchronisieren. Folglich kann ein so serialisierter NDIS-Treiber nichts im Kontextbereich pro Adapter mit einer Workerthreadrückruffunktion teilen, ohne dass intermittierende Systemabstürzen verursacht werden.
- Zielplattform: universelle
- Version: Für NDIS 6.0-Treiber in Windows Vista nicht unterstützt. Verwenden Sie stattdessen NdisQueueIoWorkItem-. Unterstützt für NDIS 5.1-Treiber in Windows Vista und Windows XP.
Anforderungen
Anforderung | Wert |
---|---|
Header- | ndis.h (include Ndis.h) |
IRQL- | IRQL-<= DISPATCH_LEVEL |