Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 |
|
EVT_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY |
|
Lista_adresatów_OPIS_DUPLICATE_EVW_WDF_CHILD |
|
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_IDENTYFIKACJA_OPIS_KOPIA |
|
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 |
|
Zdarzenie_WDF_Urządzenie_Aktywacja_Wzbudzenia_Na_Magistrali |
|
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 (przygotowanie sprzętu urządzenia w systemie WDF) |
|
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 |
|
ZAWIESZENIE_SAMO_ZARZĄDZANEGO_IO_URZĄDZENIA_WDF |
|
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 |
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 |