Compartilhar via


Verificando o driver

A verificação do driver usando a opção de comando /scan é opcional. Se você não verificar antes de verificar o driver, o SDV examinará as declarações de tipo de função de função e criará um arquivo Sdv-map.h ao verificar o driver.

Durante essa verificação, o SDV tenta detectar os pontos de entrada do driver necessários para verificar o driver. Ele registra os resultados da verificação em Sdv-map.h, um arquivo que ele cria no diretório de fontes do driver.

No entanto, é muito importante que você examine esse arquivo, após a etapa de verificação ou após a verificação, para garantir que o SDV tenha detectado os pontos de entrada corretos. Se os pontos de entrada estiverem ausentes ou estiverem errados, a verificação poderá não ser confiável. Mais importante, se o SDV não puder detectar nenhum ponto de entrada, ele não poderá verificar o driver.

Você só precisa verificar uma vez para cada driver. Depois disso, o SDV retém o arquivo Sdv-map.h para o driver para verificações futuras.

Examinar o arquivo Sdv-map.h

Depois de executar um comando de verificação ou verificar o driver, abra o arquivo Sdv-map.h e examine o arquivo. Sdv-map.h é um arquivo de texto formatado. Você pode lê-lo em qualquer editor de texto, como o Bloco de Notas.

Compare o conteúdo do arquivo Sdv-map.h com os tipos de função declarados para o driver. Examine o conteúdo do arquivo Sdv-map.h para ver se as rotinas de retorno de chamada ou expedição do driver foram identificadas corretamente.

O arquivo Sdv-map.h não é necessário para listar todos os pontos de entrada no driver; apenas os pontos de entrada para os códigos de função principais do IRP ou tipos de função que são usados na análise. Não adicione nenhum código de função principal do IRP ou tipos de função de função ao arquivo.

Para obter informações detalhadas sobre o arquivo Sdv-map.h, consulte Sdv-map.h. O formato é descrito em Formato do arquivo Sdv-map.h. Os erros que podem aparecer no arquivo Sdv-map.h são descritos em Aprovando o arquivo Sdv-map.h.

O exemplo a seguir mostra o conteúdo do arquivo Sdv-map.h do Fail_driver1, um driver WDM de exemplo no diretório tools\sdv\samples\fail_drivers\wdm.

//Approved=false
//DriverAddDevice
#define fun_AddDevice DriverAddDevice
//DriverEntry
#define fun_DriverEntry DriverEntry
//DriverUnload
#define fun_DriverUnload DriverUnload
//CompletionRoutine
#define fun_IO_COMPLETION_ROUTINE_1 CompletionRoutine
//DpcForIsrRoutine
#define fun_IO_DPC_ROUTINE_1 DpcForIsrRoutine
//DispatchCreate
#define fun_IRP_MJ_CREATE DispatchCreate
//DispatchPnp
#define fun_IRP_MJ_PNP DispatchPnp
//DispatchPower
#define fun_IRP_MJ_POWER DispatchPower
//DispatchRead
#define fun_IRP_MJ_READ DispatchRead
//DispatchSystemControl
#define fun_IRP_MJ_SYSTEM_CONTROL DispatchSystemControl
//InterruptServiceRoutine
#define fun_KSERVICE_ROUTINE_1 InterruptServiceRoutine

Corrigir o arquivo Sdv-map.h

Antes de verificar um driver, corrija os erros no arquivo Sdv-map.h. O SDV verificará um driver, mesmo que o arquivo Sdv-map.h esteja incorreto ou não seja aprovado, mas os resultados da verificação podem não ser confiáveis. Por exemplo, se você não declarar a rotina de expedição ou retorno de chamada de um driver usando o tipo de função de função correspondente, a rotina do driver não aparecerá no arquivo Sdv-map.h. Consequentemente, você pode perder a localização de defeitos em seu código porque o SDV considera as regras que usam tipos de função como não aplicáveis, mesmo que você tenha especificado essas regras como parte da verificação.

Para corrigir um arquivo Sdv-map.h, certifique-se de que as rotinas de expedição ou retorno de chamada do driver sejam declaradas usando os tipos de função apropriados. Em seguida, verifique novamente o driver e verifique se ele aparece no arquivo Sdv-map.h.

Aprovar o arquivo Sdv-map.h

Depois de determinar que o arquivo Sdv-map.h está correto, você pode aprovar o arquivo. Se você não fez nenhuma alteração no arquivo, não precisará aprová-lo.

O SDV verificará um driver mesmo se o arquivo Sdv-map.h não for aprovado.

Para aprovar o arquivo Sdv-map.h, na primeira linha do arquivo, altere:

//Approved=false

para:

//Approved=true

Você só precisa aprovar o arquivo Sdv-map.h uma vez para cada driver. Depois disso, o SDV retém o arquivo Sdv-map.h aprovado para o driver para verificações futuras. Se você quiser que o SDV examine o código-fonte novamente em busca de declarações de tipo de função, basta excluir o arquivo.

O exemplo a seguir mostra o arquivo Sdv-map.h aprovado para o driver de exemplo KMDF, Fail_Driver1. O SDV usa o arquivo Sdv-map.h para mapear as funções de retorno de chamada declaradas do driver com os tipos de função que o SDV precisa para verificação.

//Approved=true
//DriverEntry
#define fun_DriverEntry DriverEntry
//EvtDriverDeviceAdd
#define fun_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd
//EvtIoDeviceControl
#define fun_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtIoDeviceControl
//EvtIoInternalDeviceControl
#define fun_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl
//EvtIoRead
#define fun_WDF_IO_QUEUE_IO_READ EvtIoRead
//EvtRequestCancel
#define fun_WDF_REQUEST_CANCEL_1 EvtRequestCancel