Udostępnij przez


Deklaracje funkcji KMDF weryfikatora sterowników statycznych

Aby umożliwić sdV weryfikowanie sterownika KMDF, należy zadeklarować każdą funkcję wywołania zwrotnego przy użyciu typu roli funkcji wywołania zwrotnego. Typy ról funkcji wywołania zwrotnego są definiowane w różnych plikach nagłówków WDF i są uwzględniane podczas tworzenia sterownika za pomocą pliku nagłówka Wdf.h. W poniższej tabeli przedstawiono typy ról funkcji i funkcje wywołania zwrotnego zdarzeń, z którymi są skojarzone.

Należy zadeklarować funkcje wywołania zwrotnego sterownika przed definicjami funkcji wywołania zwrotnego. W poniższym przykładzie przedstawiono deklarację typu roli dla funkcji wywołania zwrotnego EvtDriverDeviceAdd. W tym przykładzie funkcja wywołania zwrotnego nosi nazwę EvtDriverDeviceAdd.

#include <NTDDK.h>  
#include <wdf.h>
EVT_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd

Jeśli funkcja wywołania zwrotnego ma deklarację prototypu funkcji, należy zastąpić prototyp funkcji deklaracją typu roli funkcji. Aby uzyskać więcej informacji na temat deklaracji typów ról funkcji, zobacz Używanie deklaracji typów ról funkcji.

W poniższej tabeli przedstawiono typy funkcji wywołania zwrotnego i funkcje wywołania zwrotnego zdarzeń, z którymi są skojarzone.

Typ roli funkcji Funkcja wywołania zwrotnego zdarzeń

EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP

EvtChildListAddressDescriptionCleanup

EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY

EvtChildListAddressDescriptionCopy

Lista_adresatów_OPIS_DUPLICATE_EVW_WDF_CHILD

EvtChildListIdentificationDescriptionDuplicate

EVT_WDF_CHILD_LIST_CREATE_DEVICE

EvtChildListCreateDevice

EVT_WDF_CHILD_LIST_DEVICE_REENUMERATED

EvtChildListDeviceReenumerated

EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP

EvtChildListIdentificationDescriptionCleanup

EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE

EvtChildListIdentificationDescriptionCompare

EVT_WDF_CHILD_LIST_IDENTYFIKACJA_OPIS_KOPIA

EvtChildListIdentificationDescriptionCopy

EVT_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE

EvtChildListIdentificationDescriptionDuplicate

EVT_WDF_CHILD_LIST_SCAN_FOR_CHILDREN

EvtChildListScanForChildren

EVT_WDF_DEVICE_ARM_WAKE_FROM_S0

EvtDeviceArmWakeFromS0

EVT_WDF_DEVICE_ARM_WAKE_FROM_SX

EvtDeviceArmWakeFromSx

EVT_WDF_DEVICE_CONTEXT_CLEANUP

EvtCleanupCallback

EVT_WDF_DEVICE_CONTEXT_DESTROY

EvtDestroyCallback

EVT_WDF_DEVICE_D0_ENTRY

EvtDeviceD0Entry

EVT_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED

EvtDeviceD0EntryPostInterruptsEnabled

EVT_WDF_DEVICE_D0_EXIT

EvtDeviceD0Exit

EVT_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED

EvtDeviceD0ExitPreInterruptsDisabled

EVT_WDF_DEVICE_DISABLE_WAKE_AT_BUS

EvtDeviceDisableWakeAtBus

EVT_WDF_DEVICE_DISARM_WAKE_FROM_S0

EvtDeviceDisarmWakeFromS0

EVT_WDF_DEVICE_DISARM_WAKE_FROM_SX

EvtDeviceDisarmWakeFromSx

EVT_WDF_DEVICE_EJECT

EvtDeviceEject

Zdarzenie_WDF_Urządzenie_Aktywacja_Wzbudzenia_Na_Magistrali

EvtDeviceEnableWakeAtBus

EVT_WDF_DEVICE_FILE_CREATE

EvtDeviceFileUtwórz

EVT_WDF_DEVICE_FILTER_RESOURCE_REQUIREMENTS

EvtDeviceFilterAddResourceRequirements

EVT_WDF_DEVICE_PNP_STATE_CHANGE_NOTIFICATION

EvtDevicePnpStateChange

EVT_WDF_DEVICE_POWER_POLICY_STATE_CHANGE_NOTIFICATION

EvtDevicePnpStateChange

EVT_WDF_DEVICE_POWER_STATE_CHANGE_NOTIFICATION

EvtDevicePowerStateChange

EVT_WDF_DEVICE_PREPARE_HARDWARE (przygotowanie sprzętu urządzenia w systemie WDF)

EvtDevicePrepareHardware

EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST

EvtDeviceProcessQueryInterfaceRequest

EVT_WDF_DEVICE_QUERY_REMOVE

EvtDeviceQueryRemove

EVT_WDF_DEVICE_QUERY_STOP

EvtDeviceQueryStop

EVT_WDF_DEVICE_RELATIONS_QUERY

EvtDeviceRelationsQuery

EVT_WDF_DEVICE_RELEASE_HARDWARE

EvtDeviceReleaseHardware

EVT_WDF_DEVICE_REMOVE_ADDED_RESOURCES

EvtDeviceRemoveAddedResources

EVT_WDF_DEVICE_RESOURCE_REQUIREMENTS_QUERY

EvtDeviceResourceRequirementsQuery

EVT_WDF_DEVICE_RESOURCES_QUERY

EvtDeviceResourcesQuery

EVT_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP

EvtDeviceSelfManagedIoCleanup

EVT_WDF_DEVICE_SELF_MANAGED_IO_FLUSH

EvtDeviceSelfManagedIoFlush

EVT_WDF_DEVICE_SELF_MANAGED_IO_INIT

EvtDeviceSelfManagedIoInit

EVT_WDF_DEVICE_SELF_MANAGED_IO_RESTART

EvtDeviceSelfManagedIoRestart

ZAWIESZENIE_SAMO_ZARZĄDZANEGO_IO_URZĄDZENIA_WDF

EvtDeviceSelfManagedIoSuspend

EVT_WDF_DEVICE_SET_LOCK

EvtDeviceSetLock

EVT_WDF_DEVICE_SHUTDOWN_NOTIFICATION

EvtDeviceShutdownNotification

EVT_WDF_DEVICE_SURPRISE_REMOVAL

EvtDeviceSurpriseRemoval

EVT_WDF_DEVICE_USAGE_NOTIFICATION

EvtDeviceUsageNotification

EVT_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED

EvtDeviceWakeFromS0Triggered

EVT_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED

EvtDeviceWakeFromSxTriggered

EVT_WDF_DMA_ENABLER_DISABLE

EvtDmaEnablerDisable

EVT_WDF_DMA_ENABLER_ENABLE

EvtDmaEnablerEnable

EVT_WDF_DMA_ENABLER_FILL

EvtDmaEnablerFill

EVT_WDF_DMA_ENABLER_FLUSH

EvtDmaEnablerFlush

EVT_WDF_DMA_ENABLER_SELFMANAGED_IO_START

EvtDmaEnablerSelfManagedIoStart

EVT_WDF_DMA_ENABLER_SELFMANAGED_IO_STOP

EvtDmaEnablerSelfManagedIoStop

EVT_WDF_DPC

EvtDpcFunc

EVT_WDF_DRIVER_DEVICE_ADD

EvtDriverDeviceAdd

EVT_WDF_DRIVER_UNLOAD

EvtDriverUnload

EVT_WDF_FILE_CLEANUP

EvtFileCleanup

EVT_WDF_FILE_CLOSE

EvtFileClose

EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK

EvtCleanupCallback

EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK

EvtDestroyCallback

EVT_WDF_INTERRUPT_DISABLE

EvtInterruptDisable

EVT_WDF_INTERRUPT_DPC

EvtInterruptDpc

EVT_WDF_INTERRUPT_ENABLE

EvtInterruptEnable

EVT_WDF_INTERRUPT_ISR

EvtInterruptIsr

EVT_WDF_INTERRUPT_SYNCHRONIZE

EvtInterruptSynchronize

EVT_WDF_IO_IN_CALLER_CONTEXT

EvtIoInCallerContext

EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK

EvtCleanupCallback

EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK

EvtDestroyCallback

EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE

EvtIoCanceledOnQueue

EVT_WDF_IO_QUEUE_IO_DEFAULT

EvtIoDefault

EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL

EvtIoDeviceControl

EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL

EvtIoInternalDeviceControl

EVT_WDF_IO_QUEUE_IO_READ

EvtIoRead

EVT_WDF_IO_QUEUE_IO_RESUME

EvtIoResume

EVT_WDF_IO_QUEUE_IO_STOP

EvtIoStop

EVT_WDF_IO_QUEUE_IO_WRITE

EvtIoWrite

EVT_WDF_IO_QUEUE_STATE

EvtIoQueueState

EVT_WDF_IO_TARGET_QUERY_REMOVE

EvtIoTargetQueryRemove

EVT_WDF_IO_TARGET_REMOVE_CANCELED

EvtIoTargetRemoveCanceled

EVT_WDF_IO_TARGET_REMOVE_COMPLETE

EvtIoTargetRemoveComplete

EVT_WDF_OBJECT_CONTEXT_CLEANUP

EvtCleanupCallback

EVT_WDF_OBJECT_CONTEXT_DESTROY

EVT_WDF_PROGRAM_DMA

EvtProgramDma

EVT_WDF_REQUEST_CANCEL

EvtRequestCancel

EVT_WDF_REQUEST_COMPLETION_ROUTINE

CompletionRoutine

EVT_WDF_TIMER

EvtTimerFunc

EVT_WDF_TRACE_CALLBACK

EVT_WDF_WMI_INSTANCE_EXECUTE_METHOD

EvtWmiInstanceExecuteMethod

EVT_WDF_WMI_INSTANCE_QUERY_INSTANCE

EvtWmiInstanceQueryInstance

EVT_WDF_WMI_INSTANCE_SET_INSTANCE

EvtWmiInstanceSetInstance

EVT_WDF_WMI_INSTANCE_SET_ITEM

EvtWmiInstanceSetItem

EVT_WDF_WMI_PROVIDER_FUNCTION_CONTROL

EvtWmiProviderFunctionControl

EVT_WDF_WORKITEM

EvtWorkItem

EVT_WDFDEVICE_WDM_IRP_PREPROCESS

EvtDeviceWdmIrpPreprocess

Typy ról funkcji, które zezwalają na wiele funkcji wywołania zwrotnego

Istnieją pewne typy ról funkcji, które mogą mieć wiele funkcji wywołania zwrotnego zdarzeń skojarzonych z nimi. Na przykład sterownik może mieć wiele funkcji wywołania zwrotnego, takich jak EvtTimerFunc lub EvtDpcFunc. W poniższej tabeli przedstawiono maksymalną liczbę wywołań zwrotnych, które są obsługiwane przez zestaw SDV dla każdego typu roli funkcji. Choć dla sterownika nie jest błędem posiadanie większej liczby funkcji wywołania zwrotnego niż maksymalna liczba wymieniona w tabeli, komplikuje to proces weryfikacji podczas korzystania z SDV. Aby uzyskać informacje o zmianach, które mogą być konieczne w pliku Sdv-map.h, w celu uwzględnienia dodatkowych funkcji wywołania zwrotnego, zobacz Zduplikowane punkty wejścia dla typu roli funkcji.

Typ roli funkcji Maksymalna liczba funkcji wywołania zwrotnego

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

Typy ról funkcji i kolejki we/wy

Użyj następujących typów ról funkcji podczas deklarowania funkcji Obsługi żądań i funkcji wywołania zwrotnego, które opierają się na strukturze KMDF, aby dostarczać żądania we/wy do sterownika (w przypadku sekwencyjnego lub równoległego wysyłania). Nie używaj tych typów ról funkcji dla funkcji, które ręcznie przesyłają żądania z domyślnej kolejki do innych kolejek (ręczne wysyłanie). SdV nie obsługuje modelu pamięci, który umożliwia śledzenie żądań z jednej kolejki do innej.

Aby uzyskać więcej informacji na temat kolejek wejścia/wyjścia, zobacz Tworzenie kolejek wejścia/wyjścia.

Role funkcji używane dla kolejki I/O skonfigurowanej do ręcznego przekazywania

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

Typy ról funkcji dla funkcji EvtCleanupCallback i EvtDestroyCallback

Należy zadeklarować funkcję EvtCleanupCallback i EvtDestroyCallback z typami ról funkcji specyficznymi dla obiektu. SdV wymaga tych typów ról specyficznych dla obiektu w celu określenia, czy sterownik prawidłowo używa funkcji wywołania zwrotnego. Użyj poniższych tabel, aby określić typ funkcji do użycia.

Typ obiektu Typ roli funkcji dla EvtCleanupCallback

Obiekt urządzenia

EVT_WDF_DEVICE_CONTEXT_CLEANUP

Obiekt kolejki we/wy

EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK

Obiekt pliku

EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK

Wszystkie inne obiekty

EVT_WDF_OBJECT_CONTEXT_CLEANUP

Typ obiektu Typ roli funkcji dla EvDestroyCallback

Obiekt urządzenia

EVT_WDF_DEVICE_CONTEXT_DESTROY

Obiekt kolejki we/wy

EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK

Obiekt pliku

EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK

Wszystkie inne obiekty

EVT_WDF_OBJECT_CONTEXT_DESTROY