Declarando funções usando tipos de função para drivers NDIS
Para habilitar o SDV para analisar um driver NDIS, é preciso declarar suas funções usando as declarações de tipo 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 e suas funções de retorno de chamada de evento correspondentes, consulte as Declarações de função NDIS do Driver Verifier 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 se chama 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.
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 exigido 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 coincidem.
Por exemplo, você deve declarar uma função MiniportInterrupt usando o tipo 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 ver a sintaxe).
BOOLEAN
myMPIsr(
__in NDIS_HANDLE MiniportInterruptContext,
__out PBOOLEAN QueueMiniportInterruptDpcHandler,
__out PULONG TargetProcessors
) {
}
Execução da análise de código para drivers para verificar as declarações de função
Para ajudar você a determinar se o código-fonte está preparado, execute 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, bem como avisar quando os parâmetros da definição de função não correspondem aos parâmetros do tipo de função.