Declarando funções usando tipos de função para drivers KMDF

Para habilitar o SDV para analisar um driver KMDF, você deve declarar suas funções usando as declarações de tipo de função de função para KMDF. Os tipos de função são definidos em Wdf.h e em outros arquivos de cabeçalho KMDF incluídos no Wdf.h. Para obter a lista de tipos de função de função e suas funções de retorno de chamada de evento correspondentes, consulte Declarações de função KMDF do Verificador de Driver Estático.

Cada função de retorno de chamada de evento em um driver KMDF deve ser declarada especificando o tipo de função correspondente.

Por exemplo, o exemplo de código 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 myDriver_EvtDriverDeviceAdd. O tipo de função é EVT_WDF_DRIVER_DEVICE_ADD.

EVT_WDF_DRIVER_DEVICE_ADD myDriver_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 de função pela declaração de tipo de função de função.

A listagem a seguir é do arquivo de cabeçalho Fail_Driver6.h. As funções relacionadas são declaradas em FailDriver6.c.

/*++

Copyright (C) Microsoft.  All rights reserved.
Module Name:
    fail_driver6.h
Environment:
    Kernel mode
--*/

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

#include "fail_library6.h"

DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd;
EVT_WDF_IO_QUEUE_IO_READ EvtIoRead;
EVT_WDF_IO_QUEUE_IO_WRITE EvtIoWrite;
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtIoDeviceControl;
EVT_WDF_DEVICE_CONTEXT_CLEANUP DeviceContextCleanUp;
EVT_WDF_DEVICE_CONTEXT_DESTROY DeviceContextDestroy;
EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK QueueCleanup;
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK QueueDestroy;
EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK FileContextCleanup;
EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK FileContextDestroy;

Depois de declarar as funções de retorno de chamada do driver usando declarações de tipo de função, você poderá verificar o driver. A verificação do driver produz o arquivo Sdv-map.h, que você pode examinar para determinar se os pontos de entrada foram identificados corretamente.

Executando a Análise de Código para Drivers para verificar as declarações de função

Para ajudá-lo a determinar se o código-fonte está preparado, execute a Análise de Código para Drivers. A Análise de Código para Drivers verifica se há declarações de tipo de função e pode ajudar a identificar declarações de função que podem ter sido perdidas ou avisar quando os parâmetros da definição de função não correspondem aos do tipo de função.

Parâmetros de função e tipos de função

Conforme necessário na linguagem de programação C, os tipos de parâmetro que você usa na definição de função devem corresponder aos tipos de parâmetro do protótipo de função ou, nesse caso, ao tipo de função. O SDV depende das assinaturas de função para análise e ignora funções cujas assinaturas não correspondem.

Por exemplo, você deve declarar uma rotina EvtDriverDeviceAdd usando o tipo de função EVT_WDF_DRIVER_DEVICE_ADD função.

EVT_WDF_DRIVER_DEVICE_ADD myEvtDriverDeviceAdd;

Quando você implementa a função myEvtDriverDeviceAdd, os tipos de parâmetro devem corresponder aos usados por EVT_WDF_DRIVER_DEVICE_ADD, ou seja, WDFDRIVER e PWDFDEVICE_INIT (consulte Rotina EvtDriverDeviceAdd para sintaxe ).

NTSTATUS
 myEvtDriverDeviceAdd (
  WDFDRIVER Driver,
 PWDFDEVICE_INIT DeviceInit
 )
{
}