Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Para habilitar o SDV para verificar seu driver KMDF, você deve declarar cada função de retorno de chamada, usando um tipo de função de retorno de chamada. Os tipos de função de retorno de chamada são definidos nos vários arquivos de cabeçalho WDF e são incluídos quando você cria seu driver com o arquivo de cabeçalho Wdf.h. A tabela a seguir mostra os tipos de papel de função e as funções de retorno de chamada de evento com as quais estão associados.
Você deve declarar as funções de retorno de chamada do driver antes das definições da função de retorno de chamada. O exemplo a seguir mostra a declaração do tipo de função para a função de retorno de chamada EvtDriverDeviceAdd. Neste exemplo, a função de retorno de chamada é chamada EvtDriverDeviceAdd.
#include <NTDDK.h>
#include <wdf.h>
EVT_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd
Se uma função de retorno de chamada tiver uma declaração de protótipo de função, deve substituir o protótipo de função pela declaração de tipo de função. Para obter mais informações sobre as declarações de tipo de função, consulte Usando Declarações de Tipo de Função.
A tabela a seguir mostra os tipos de funções de retorno de chamada e as funções de retorno de chamada de evento às quais estão associadas.
| Tipo de função | Função de callback de evento |
|---|---|
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 (Entrada D0 de dispositivo WDF pós-habilitação de interrupções) |
|
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 (notificação de mudança de estado de política de energia do dispositivo) |
|
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_QUERY_REQUISITOS_RECURSOS_DISPOSITIVO |
|
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 |
#B0 #A1 EvtIoInCallerContext #A2 #C3 |
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_DESTINO_REMOVER_CANCELADO |
|
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 |
Tipos de função que permitem múltiplos retornos de chamada
Existem alguns tipos de papéis de função que podem ter várias funções de callback de eventos associadas a eles. Por exemplo, um driver pode ter várias funções de retorno de chamada EvtTimerFunc ou EvtDpcFunc. A tabela a seguir mostra o número máximo de retornos de chamada que o SDV suporta para cada tipo de função. Embora não seja incorreto para um driver ter um número de funções de retorno de chamada superior ao máximo listado na tabela, isso acaba por complicar o processo de verificação ao usar SDV. Para obter informações sobre alterações que talvez seja necessário fazer no arquivo Sdv-map.h para acomodar as funções de retorno de chamada adicionais, consulte Pontos de entrada duplicados para um tipo de papel de função.
| Tipo de função | Número máximo de funções de retorno de chamada |
|---|---|
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 |
Tipos de função e filas de E/S
Use os seguintes tipos de função ao declarar os manipuladores de solicitação e as funções de retorno de chamada que dependem da estrutura KMDF para entregar as solicitações de E/S ao driver (para despacho sequencial ou paralelo). Não use esses tipos de função para as funções que encaminham manualmente solicitações da fila padrão para outras filas (despacho manual). O SDV não suporta um modelo de memória que lhe permita controlar pedidos de uma fila para outra.
Para obter mais informações sobre filas de E/S, consulte Criação de filas de E/S.
| Tipos de função usados para fila de E/S configurada para despacho manual |
|---|
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 |
Tipos de função para as funções EvtCleanupCallback e EvtDestroyCallback
Você deve declarar a função EvtCleanupCallback e EvtDestroyCallback com tipos de função específicos do objeto. O SDV requer estes tipos de papéis específicos para objeto para determinar se o driver está usando corretamente a função de retorno de chamada. Use as tabelas a seguir para determinar qual tipo de função usar.
| Tipo de objeto | Tipo de função para EvtCleanupCallback |
|---|---|
Objeto do dispositivo |
EVT_WDF_DEVICE_CONTEXT_CLEANUP |
Objeto de fila de E/S |
EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK |
Objeto de arquivo |
EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK |
Todos os outros objetos |
EVT_WDF_OBJECT_CONTEXT_CLEANUP |
| Tipo de objeto | Tipo de função para EvDestroyCallback |
|---|---|
Objeto do dispositivo |
EVT_WDF_DEVICE_CONTEXT_DESTROY |
Objeto de fila de E/S |
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK |
Objeto de arquivo |
EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK |
Todos os outros objetos |
EVT_WDF_OBJECT_CONTEXT_DESTROY |