Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Um SDV zum Überprüfen des KMDF-Treibers zu aktivieren, müssen Sie jede Rückruffunktion mithilfe eines Rollentyps der Rückruffunktion deklarieren. Die Rollentypen der Rückruffunktion werden in den verschiedenen WDF-Headerdateien definiert und sind enthalten, wenn Sie ihren Treiber mit der Wdf.h-Headerdatei erstellen. In der folgenden Tabelle sind die Funktionsrollentypen und die Ereignisrückruffunktionen aufgeführt, denen sie zugeordnet sind.
Sie müssen die Treiberrückruffunktionen vor den Definitionen der Rückruffunktionen deklarieren. Das folgende Beispiel zeigt die Funktionsrollentypdeklaration für die Rückruffunktion EvtDriverDeviceAdd . In diesem Beispiel wird die Rückruffunktion "EvtDriverDeviceAdd" genannt.
#include <NTDDK.h>
#include <wdf.h>
EVT_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd
Wenn eine Rückruffunktion über eine Funktionsprototypdeklaration verfügt, müssen Sie den Funktionsprototyp durch die Funktionsrollentypdeklaration ersetzen. Weitere Informationen zu den Funktionsrollentypdeklarationen finden Sie unter Verwenden von Funktionsrollentypdeklarationen.
In der folgenden Tabelle sind die Rückruffunktionstypen und die Ereignisrückruffunktionen aufgeführt, denen sie zugeordnet sind.
| Funktionsrollentyp | Ereignisrückruffunktion |
|---|---|
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP |
|
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY |
|
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE |
|
EVT_WDF_CHILD_LIST_CREATE_DEVICE |
|
EVT_WDF_CHILD_LIST_DEVICE_REENUMERATED |
|
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP |
|
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE |
|
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY |
|
EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE |
|
EVT_WDF_CHILD_LIST_SCAN_FOR_CHILDREN |
|
EVT_WDF_DEVICE_ARM_WAKE_FROM_S0 |
|
EVT_WDF_DEVICE_ARM_WAKE_FROM_SX |
|
EVT_WDF_DEVICE_CONTEXT_CLEANUP |
|
EVT_WDF_DEVICE_CONTEXT_DESTROY |
|
EVT_WDF_DEVICE_D0_ENTRY |
|
EVT_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED |
|
EVT_WDF_DEVICE_D0_EXIT |
|
EVT_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED |
|
EVT_WDF_DEVICE_DISABLE_WAKE_AT_BUS |
|
EVT_WDF_DEVICE_DISARM_WAKE_FROM_S0 |
|
EVT_WDF_DEVICE_DISARM_WAKE_FROM_SX |
|
EVT_WDF_DEVICE_EJECT |
|
EVT_WDF_DEVICE_ENABLE_WAKE_AT_BUS |
|
EVT_WDF_DEVICE_FILE_CREATE |
|
EVT_WDF_DEVICE_FILTER_RESOURCE_REQUIREMENTS |
|
EVT_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION |
|
EVT_WDF_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION |
|
EVT_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION |
|
EVT_WDF_DEVICE_PREPARE_HARDWARE |
|
EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST |
|
EVT_WDF_DEVICE_QUERY_REMOVE |
|
EVT_WDF_DEVICE_QUERY_STOP |
|
EVT_WDF_DEVICE_RELATIONS_QUERY |
|
EVT_WDF_DEVICE_RELEASE_HARDWARE |
|
EVT_WDF_DEVICE_REMOVE_ADDED_RESOURCES |
|
EVT_WDF_DEVICE_RESOURCE_REQUIREMENTS_QUERY |
|
EVT_WDF_DEVICE_RESOURCES_QUERY |
|
EVT_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP |
|
EVT_WDF_DEVICE_SELF_MANAGED_IO_FLUSH |
|
EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT |
|
EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART |
|
EVT_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND |
|
EVT_WDF_DEVICE_SET_LOCK |
|
EVT_WDF_DEVICE_SHUTDOWN_NOTIFICATION |
|
EVT_WDF_DEVICE_SURPRISE_REMOVAL |
|
EVT_WDF_DEVICE_USAGE_NOTIFICATION |
|
EVT_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED |
|
EVT_WDF_DEVICE_WECKEN_VON_SX_AUSGELÖST |
|
EVT_WDF_DMA_AKTIVATOR_DEAKTIVIEREN |
|
EVT_WDF_DMA_ENABLER_ENABLE |
|
EVT_WDF_DMA_ENABLER_FILL |
|
EVT_WDF_DMA_ENABLER_FLUSH |
|
EVT_WDF_DMA_ENABLER_SELFMANAGED_IO_START |
|
EVT_WDF_DMA_ENABLER_SELFMANAGED_IO_STOP |
|
EVT_WDF_DPC |
|
EVT_WDF_DRIVER_DEVICE_ADD |
|
EVT_WDF_DRIVER_UNLOAD |
|
EVT_WDF_FILE_CLEANUP |
|
EVT_WDF_FILE_CLOSE |
|
EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK |
|
EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK |
|
EVT_WDF_INTERRUPT_DISABLE |
|
EVT_WDF_INTERRUPT_DPC |
|
EVT_WDF_INTERRUPT_ENABLE |
|
EVT_WDF_INTERRUPT_ISR |
|
EVT_WDF_INTERRUPT_SYNCHRONIZE |
|
EVT_WDF_IO_IN_CALLER_CONTEXT |
|
EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK |
|
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK |
|
EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE |
|
EVT_WDF_IO_QUEUE_IO_DEFAULT |
|
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL |
|
EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL |
|
EVT_WDF_IO_QUEUE_IO_READ |
|
EVT_WDF_IO_QUEUE_IO_RESUME |
|
EVT_WDF_IO_QUEUE_IO_STOP |
|
EVT_WDF_IO_QUEUE_IO_WRITE |
|
EVT_WDF_IO_QUEUE_STATE |
|
EVT_WDF_IO_TARGET_QUERY_REMOVE |
|
EVT_WDF_IO_TARGET_REMOVE_CANCELED |
|
EVT_WDF_IO_TARGET_REMOVE_COMPLETE |
|
EVT_WDF_OBJECT_CONTEXT_CLEANUP |
|
EVT_WDF_OBJECT_CONTEXT_DESTROY |
|
EVT_WDF_PROGRAM_DMA |
|
EVT_WDF_REQUEST_CANCEL |
|
EVT_WDF_REQUEST_COMPLETION_ROUTINE |
|
EVT_WDF_TIMER |
|
EVT_WDF_TRACE_CALLBACK |
|
EVT_WDF_WMI_INSTANCE_EXECUTE_METHOD |
|
EVT_WDF_WMI_INSTANCE_QUERY_INSTANCE (Ereignis zur Abfrage einer WMI-Instanz in WDF) |
|
EVT_WDF_WMI_INSTANCE_SET_INSTANCE |
|
EVT_WDF_WMI_INSTANCE_SET_ITEM |
|
EVT_WDF_WMI_PROVIDER_FUNCTION_CONTROL |
|
EVT_WDF_WORKITEM |
|
EVT_WDFDEVICE_WDM_IRP_PREPROCESS |
Funktionsrollentypen, die mehrere Rückruffunktionen zulassen
Es gibt einige Funktionsrollentypen, die mehrere Ereignisrückruffunktionen zugeordnet sein können. Beispielsweise kann ein Treiber mehrere EvtTimerFunc - oder EvtDpcFunc-Rückruffunktionen aufweisen. Die folgende Tabelle zeigt die maximale Anzahl von Rückrufen, die SDV für jeden Funktionsrollentyp unterstützt. Obwohl es für einen Treiber nicht falsch ist, mehr als die maximale Anzahl der in der Tabelle aufgeführten Rückruffunktionen zu haben, wird der Überprüfungsprozess bei Verwendung von SDV erschwert. Informationen zu Änderungen, die Sie möglicherweise an der Datei Sdv-map.h vornehmen müssen, um die zusätzlichen Rückruffunktionen aufzunehmen, finden Sie unter "Doppelte Einstiegspunkte für einen Funktionsrollentyp".
| Funktionsrollentyp | Maximale Anzahl von Rückruffunktionen |
|---|---|
EVT_WDF_DPC |
7 |
EVT_WDF_INTERRUPT_SYNCHRONIZE |
11 |
EVT_WDF_TIMER |
6 |
EVT_WDF_WMI_INSTANCE_EXECUTE_METHOD |
5 |
EVT_WDF_WMI_INSTANCE_QUERY_INSTANCE |
5 |
EVT_WDF_WMI_INSTANCE_SET_INSTANCE |
5 |
EVT_WDF_WMI_INSTANCE_SET_ITEM |
5 |
Funktionsrollentypen und E/A-Warteschlangen
Verwenden Sie die folgenden Funktionsrollentypen, wenn Sie die Anforderungshandler und Rückruffunktionen deklarieren, die auf dem KMDF-Framework basieren, um die E/A-Anforderungen an den Treiber zu übermitteln (für sequenzielle oder parallele Verteiler). Verwenden Sie diese Funktionsrollentypen nicht für die Funktionen, die Anforderungen manuell von der Standardwarteschlange an andere Warteschlangen weiterleiten (manuelle Verteilerfunktion). SDV unterstützt kein Speichermodell, mit dem Anforderungen von einer Warteschlange auf eine andere nachverfolgt werden können.
Weitere Informationen zu E/A-Warteschlangen finden Sie unter Erstellen von E/A-Warteschlangen.
| Funktionsrollentypen, die für eine E/A-Warteschlange verwendet werden, die für die manuelle Übertragung konfiguriert ist |
|---|
EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK |
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK |
EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE |
EVT_WDF_IO_QUEUE_IO_DEFAULT |
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL |
EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL |
EVT_WDF_IO_QUEUE_IO_READ |
EVT_WDF_IO_QUEUE_IO_RESUME |
EVT_WDF_IO_QUEUE_IO_STOP |
EVT_WDF_IO_QUEUE_IO_WRITE |
EVT_WDF_IO_QUEUE_STATE |
Funktionsrollentypen für die Funktionen EvtCleanupCallback und EvtDestroyCallback
Sie müssen die Funktion EvtCleanupCallback und EvtDestroyCallback mit objektspezifischen Funktionsrollentypen deklarieren. SDV erfordert diese objektspezifischen Rollentypen, um festzustellen, ob der Treiber ordnungsgemäß die Rückruffunktion verwendet. Verwenden Sie die folgenden Tabellen, um zu bestimmen, welcher Funktionstyp verwendet werden soll.
| Objekttyp | Funktionsrollentyp für EvtCleanupCallback |
|---|---|
Device-Objekt |
EVT_WDF_DEVICE_CONTEXT_CLEANUP |
E/A-Warteschlangenobjekt |
EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK |
File-Objekt |
EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK |
Alle anderen Objekte |
EVT_WDF_OBJECT_CONTEXT_CLEANUP |
| Objekttyp | Funktionsrollentyp für EvDestroyCallback |
|---|---|
Device-Objekt |
EVT_WDF_DEVICE_CONTEXT_DESTROY |
E/A-Warteschlangenobjekt |
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK |
File-Objekt |
EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK |
Alle anderen Objekte |
EVT_WDF_OBJECT_CONTEXT_DESTROY |