Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
För att aktivera SDV och verifiera din KMDF-drivrutin måste du deklarera varje callbackfunktion med en rolltyp för callbackfunktion. Rolltyperna för återanropsfunktionen definieras i de olika WDF-huvudfilerna och ingår när du skapar drivrutinen med Wdf.h-huvudfilen. I följande tabell visas funktionsrolltyperna och funktionerna för återanrop av händelser som de är associerade med.
Du måste deklarera drivrutinens återanropsfunktioner före definitionerna för återanropsfunktionen. I följande exempel visas deklarationen av funktionsrolltyp för callback-funktionen EvtDriverDeviceAdd. I det här exemplet kallas återanropsfunktionen EvtDriverDeviceAdd.
#include <NTDDK.h>
#include <wdf.h>
EVT_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd
Om en återanropsfunktion har en funktionsprototypdeklaration måste du ersätta funktionsprototypen med deklarationen för funktionsrolltyp. Mer information om deklarationer av funktionsrolltyp finns i Använda deklarationer av funktionsrolltyp.
I följande tabell visas typerna av callback-funktioner och de händelseåteranropsfunktioner som de är associerade med.
| Funktionsrolltyp | Händelseåteranropsfunktion |
|---|---|
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_IDENTIFIERINGSBESKRIVNING_DUBBELKOPI |
|
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_WAKE_FROM_SX_TRIGGERED |
|
EVT_WDF_DMA_ENABLER_DISABLE |
|
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 |
|
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 |
Funktionsrolltyper som tillåter flera återanropsfunktioner
Det finns vissa funktionsrolltyper som kan ha flera funktioner för återanrop av händelser som är associerade med dem. En drivrutin kan till exempel ha flera EvtTimerFunc - eller EvtDpcFunc-återanropsfunktioner . I följande tabell visas det maximala antalet återanrop som SDV stöder för varje funktionsrolltyp. Även om det inte är fel att en drivrutin har fler än det maximala antalet återanropsfunktioner som anges i tabellen, komplicerar det verifieringsprocessen när du använder SDV. Information om ändringar som du kan behöva göra i filen Sdv-map.h för att hantera ytterligare återanropsfunktioner finns i Duplicera startpunkter för en funktionsrolltyp.
| Funktionsrolltyp | Maximalt antal återanropsfunktioner |
|---|---|
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 |
Funktionsrolltyper och I/O-köer
Använd följande funktionsrolltyper när du deklarerar begärarhanterare och callbackfunktioner som förlitar sig på KMDF-ramverket för att leverera I/O-begäranden till drivrutinen (för sekventiell eller parallell sändning). Använd inte dessa funktionsrolltyper för de funktioner som manuellt vidarebefordrar begäranden från standardkön till andra köer (manuell sändning). SDV stöder inte en minnesmodell som gör att den kan spåra begäranden från en kö till en annan.
Mer information om I/O-köer finns i Skapa I/O-köer.
| Funktionsrolltyper som används för en I/O-kö som är konfigurerad för manuell bearbetning |
|---|
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 |
Funktionsrolltyper för funktionerna EvtCleanupCallback och EvtDestroyCallback
Du måste deklarera funktionen EvtCleanupCallback och EvtDestroyCallback med objektspecifika funktionsrolltyper. SDV kräver dessa objektspecifika rolltyper för att avgöra om drivrutinen använder återanropsfunktionen korrekt. Använd följande tabeller för att avgöra vilken funktionstyp som ska användas.
| Objekttyp | Funktionsrolltyp för EvtCleanupCallback |
|---|---|
Enhetsobjekt |
EVT_WDF_DEVICE_CONTEXT_CLEANUP |
I/O-köobjekt |
EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK |
Filobjekt |
EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK |
Alla andra objekt |
EVT_WDF_OBJECT_CONTEXT_CLEANUP |
| Objekttyp | Funktionsrolltyp för EvDestroyCallback |
|---|---|
Enhetsobjekt |
EVT_WDF_DEVICE_CONTEXT_DESTROY |
I/O-köobjekt |
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK |
Filobjekt |
EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK |
Alla andra objekt |
EVT_WDF_OBJECT_CONTEXT_DESTROY |