Dichiarazione di funzioni tramite tipi di ruolo per i driver NDIS

Per abilitare SDV per analizzare un driver NDIS, è necessario dichiarare le funzioni usando le dichiarazioni di tipo di ruolo per NDIS. I tipi di ruolo della funzione sono definiti in Ndis.h.

Per l'elenco dei tipi di ruolo di funzione e delle relative funzioni di callback evento corrispondenti, vedere dichiarazioni di funzione NDIS del driver statico.

Ogni funzione di callback in un driver NDIS deve essere dichiarata specificando il tipo di ruolo corrispondente.

Nell'esempio di codice seguente viene illustrata la dichiarazione del tipo di ruolo funzione per la funzione callback MiniportPause . In questo esempio la funzione di callback è denominata myMiniportPause. Il tipo di ruolo della funzione è MINIPORT_PAUSE.

MINIPORT_PAUSE myMiniportPause;

Se una funzione di callback ha una dichiarazione di prototipo di funzione, è necessario sostituire il prototipo di funzione con la dichiarazione del tipo di ruolo funzione.

Nell'esempio seguente vengono illustrate dichiarazioni di funzione NDIS dal file di intestazione MP.h, che si trova nella sottodirectory SDV fail_drivers di WDK. Le funzioni correlate vengono dichiarate in 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;

Parametri di funzione e tipi di ruolo funzione

Come richiesto nel linguaggio di programmazione C, i tipi di parametri usati nella definizione della funzione devono corrispondere ai tipi di parametro del prototipo di funzione o, in questo caso, al tipo di ruolo della funzione. SDV dipende dalle firme delle funzioni per l'analisi e ignora le funzioni le cui firme non corrispondono.

Ad esempio, è necessario dichiarare una funzione MiniportInterrupt usando il tipo di ruolo funzione MINIPORT_ISR:

MINIPORT_ISR myMPIsr;

Quando si implementa la routine di interruzione, myMPIsr, i tipi di parametro devono corrispondere a quelli usati da MINIPORT_ISR, ovvero NDIS_HANDLE, PBOOLEAN e PULONG (vedere la funzione MiniportInterrupt per la sintassi).

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

Esecuzione dell'analisi del codice per i driver per verificare le dichiarazioni di funzione

Per determinare se il codice sorgente è preparato, eseguire Analisi del codice per i driver. Analisi del codice per i driver verifica le dichiarazioni di tipo di ruolo della funzione e consente di identificare le dichiarazioni di funzione che potrebbero non essere state perse o avvisare quando i parametri della definizione della funzione non corrispondono a quelli nel tipo di ruolo della funzione.