Freigeben über


NdisScheduleWorkItem-Funktion (ndis.h)

Hinweis NDIS 5. x wurde veraltet und wird von NDIS 6 abgelöst. x. Informationen zur Entwicklung neuer NDIS-Treiber finden Sie unter Netzwerktreiber ab Windows Vista. Informationen zum Portieren von NDIS 5. x-Treiber auf NDIS 6. x, siehe 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 gibt der Rückruffunktion die Steuerung, die der Treiber zuvor für NdisInitializeWorkItem bereitgestellt hat.

Syntax

NDIS_STATUS NdisScheduleWorkItem(
  [in] __drv_aliasesMem PNDIS_WORK_ITEM WorkItem
);

Parameter

[in] WorkItem

Zeiger auf das Arbeitselement, das durch einen vorherigen Aufruf von NdisInitializeWorkItem eingerichtet wurde.

Rückgabewert

NdisScheduleWorkItem ist immer erfolgreich und gibt daher immer NDIS_STATUS_SUCCESS zurück.

Hinweise

Ein Aufruf von NdisScheduleWorkItem ermöglicht einem NDIS-Treiber das Zurückstellen eines treiberbestimmten Vorgangs, der bei einem niedrigeren IRQL als dem ausgelösten IRQL ausgeführt werden könnte oder sollte, an dessen Workerthreadrückruffunktion er gerade ausgeführt wird.

Der Rückruf des Treibers wird in einem Systemthreadkontext unter IRQL = PASSIVE_LEVEL später ausgeführt. Diese vom Aufrufer bereitgestellte Funktion ist dafür verantwortlich, den Speicher zurückzugeben, den der Treiber für WorkItem zugewiesen hat. Wenn beispielsweise der Treiber NdisAllocateMemoryWithTag aufgerufen hat, um einen Kontextbereich für NdisInitializeWorkItem bereitzustellen, sollte seine Rückruffunktion den wechselseitigen Aufruf von NdisFreeMemory mit WorkItem durchführen, bevor die Steuerung zurückgegeben wird.

Ein Treiber darf nicht warten, bis seine Rückrufroutine einen Vorgang abgeschlossen hat, wenn er bereits ein Synchronisierungsobjekt enthält und möglicherweise versucht, ein anderes abzurufen. Ein NDIS-Treiber sollte z. B. alle derzeit gehaltenen Spinsperren usw. freigeben, bevor er NdisScheduleWorkItem aufruft. Ein NDIS-Protokolltreiber der höchsten Ebene muss auch alle derzeit gehaltenen Semaphore, Mutexe, Ressourcenvariablen usw. freigeben, bevor NdisScheduleWorkItem aufgerufen wird. Das Freigeben aller Synchronisierungsressourcen vor dem Anstehen eines synchronen Workerthreadvorgangs verhindert Deadlocks.

Ein serialisierter Miniporttreiber sollte niemals versuchen, eine Worker-Thread-Rückrufroutine in eine 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 solcher serialisierter NDIS-Treiber in seinem Kontextbereich pro Adapter nichts mit einer Worker-Thread-Rückruffunktion teilen, ohne dass es zu zeitweiligen Systemabstürzen kommt.

  • Zielplattform: Universell
  • Version: Wird 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

Weitere Informationen