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

Para habilitar o SDV para analisar um driver NDIS, você deve declarar suas funções usando as declarações de tipo de função de função para NDIS. Os tipos de função são definidos em Ndis.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 as Declarações de Função NDIS do Verificador de Driver Estático.

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

O exemplo de código a seguir mostra a declaração de tipo de função para a função de retorno de chamada MiniportPause . Neste exemplo, a função de retorno de chamada é chamada myMiniportPause. O tipo de função é MINIPORT_PAUSE.

MINIPORT_PAUSE myMiniportPause;

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.

O exemplo a seguir mostra declarações de função NDIS do arquivo de cabeçalho MP.h, que está localizado no subdiretório SDV fail_drivers do WDK. As funções relacionadas são declaradas em Main.c.

\tools\sdv\samples\fail_drivers\NDIS\fail_driver1.

/--------------------------------------
// Miniport routines in MAIN.C
//--------------------------------------

NDIS_STATUS
DriverEntry(
    IN  PDRIVER_OBJECT      DriverObject,
    IN  PUNICODE_STRING     RegistryPath
    );


MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE MPAllocateComplete;

MINIPORT_HALT MPHalt;
MINIPORT_SET_OPTIONS MPSetOptions;
MINIPORT_INITIALIZE MPInitialize;
MINIPORT_PAUSE MPPause;
MINIPORT_RESTART MPRestart;
MINIPORT_OID_REQUEST MPOidRequest;
MINIPORT_INTERRUPT_DPC MPHandleInterrupt;
MINIPORT_ISR MPIsr;
MINIPORT_RESET MPReset;
MINIPORT_RETURN_NET_BUFFER_LISTS MPReturnNetBufferLists;
MINIPORT_CANCEL_OID_REQUEST MPCancelOidRequest;
MINIPORT_SHUTDOWN MPShutdown;
MINIPORT_SEND_NET_BUFFER_LISTS MPSendNetBufferLists;
MINIPORT_CANCEL_SEND MPCancelSendNetBufferLists;
MINIPORT_DEVICE_PNP_EVENT_NOTIFY MPPnPEventNotify;
MINIPORT_UNLOAD MPUnload;
MINIPORT_CHECK_FOR_HANG MPCheckForHang;
MINIPORT_ENABLE_INTERRUPT MpEnableInterrupt;
MINIPORT_DISABLE_INTERRUPT MpDisableInterrupt;
MINIPORT_SYNCHRONIZE_INTERRUPT MPSynchronizeInterrupt;
MINIPORT_PROCESS_SG_LIST MPProcessSGList;
NDIS_TIMER_FUNCTION MpDemonstrationTimer;
NDIS_IO_WORKITEM MPQueuedWorkItem;

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 função MiniportInterrupt usando o tipo de função de função MINIPORT_ISR:

MINIPORT_ISR myMPIsr;

Quando você implementa a rotina de interrupção, myMPIsr, os tipos de parâmetro devem corresponder aos usados por MINIPORT_ISR, ou seja, NDIS_HANDLE, PBOOLEAN e PULONG (consulte a função MiniportInterrupt para sintaxe).

BOOLEAN 
myMPIsr(
    __in  NDIS_HANDLE      MiniportInterruptContext,
    __out PBOOLEAN        QueueMiniportInterruptDpcHandler,
    __out PULONG          TargetProcessors
    ) {
}

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.