Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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ções de retorno de chamada são definidos nos vários arquivos de cabeçalho do WDF e são incluídos quando você compila seu driver com o arquivo de cabeçalho Wdf.h. A tabela a seguir mostra os tipos de função e as funções de retorno de chamada de evento às 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 de 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, você deverá substituir o protótipo da 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ção de retorno de chamada e as funções de retorno de chamada de evento às quais estão associadas.
| Tipo de função de cargo | Função de retorno de chamada 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_LISTA_DE_DISPOSITIVOS_REENUMERADOS_FILHO |
|
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 (Notificação de Alteração de Estado PNP de Dispositivo WDF) |
|
EVT_WDF_ALTERACAO_DE_ESTADO_DE_POLITICA_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 (Evento de consulta de remoção de dispositivo) |
|
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 (Consulta de Requisitos de Recursos do 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 |
|
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 |
Tipos de papel de função que permitem várias funções de retorno de chamada
Há alguns tipos de função de papel que podem ter várias funções de retorno de chamada de eventos associadas a elas. Por exemplo, um driver pode ter funções de retorno de chamada múltiplas, como EvtTimerFunc ou EvtDpcFunc. A tabela a seguir mostra o número máximo de callbacks que o SDV suporta para cada tipo de função. Embora não esteja incorreto para um driver ter mais do que o número máximo de funções de retorno de chamada listadas na tabela, isso complica o processo de verificação ao usar o SDV. Para obter informações sobre as 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 função.
| Tipo de papel da 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ções 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 do framework KMDF para processar as solicitações de E/S ao driver (para envio sequencial ou paralelo). Não use esses tipos de papéis 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 dá suporte a um modelo de memória que permite que ele acompanhe solicitações de uma fila para outra.
Para obter mais informações sobre filas de E/S, consulte Criando filas de E/S.
| Tipos de função usados para a 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 papéis 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 ao objeto. O SDV requer esses tipos de função específicos ao 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 papel de função para EvtCleanupCallback |
|---|---|
Objeto de 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 papel de função para EvDestroyCallback |
|---|---|
Objeto de 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 |