Declarar funciones mediante tipos de rol de función para controladores NDIS

Para habilitar SDV para analizar un controlador NDIS, debe declarar las funciones mediante las declaraciones de tipo de rol de función para NDIS. Los tipos de rol de función se definen en Ndis.h.

Para obtener la lista de tipos de roles de función y sus funciones de devolución de llamada de eventos correspondientes, consulte las declaraciones de función NDIS del comprobador de controladores estáticos.

Cada función de devolución de llamada de un controlador NDIS debe declararse especificando el tipo de rol correspondiente.

En el ejemplo de código siguiente se muestra la declaración de tipo de rol de función para la función de devolución de llamada MiniportPause . En este ejemplo, la función de devolución de llamada se denomina myMiniportPause. El tipo de rol de función es MINIPORT_PAUSE.

MINIPORT_PAUSE myMiniportPause;

Si una función de devolución de llamada tiene una declaración de prototipo de función, debe reemplazar el prototipo de función por la declaración de tipo de rol de función.

En el ejemplo siguiente se muestran declaraciones de función NDIS del archivo de encabezado MP.h, que se encuentra en el subdirectorio SDV fail_drivers del WDK. Las funciones relacionadas se declaran en 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 función y tipos de rol de función

Según sea necesario en el lenguaje de programación C, los tipos de parámetros que se usan en la definición de función deben coincidir con los tipos de parámetro del prototipo de función o, en este caso, el tipo de rol de función. SDV depende de las firmas de función para el análisis y omite las funciones cuyas firmas no coinciden.

Por ejemplo, debe declarar una función MiniportInterrupt mediante el tipo de rol de función MINIPORT_ISR:

MINIPORT_ISR myMPIsr;

Al implementar la rutina de interrupción, myMPIsr, los tipos de parámetro deben coincidir con los usados por MINIPORT_ISR, es decir, NDIS_HANDLE, PBOOLEAN y PULONG (vea la función MiniportInterrupt para obtener sintaxis).

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

Ejecución del análisis de código para controladores para comprobar las declaraciones de función

Para ayudarle a determinar si el código fuente está preparado, ejecute Análisis de código para controladores. El análisis de código para controladores comprueba las declaraciones de tipo de rol de función y puede ayudar a identificar las declaraciones de función que podrían haberse perdido o advertirle cuando los parámetros de la definición de función no coinciden con los del tipo de rol de función.