Compartir a través de


Puntos de entrada duplicados para un tipo de rol de función

Para la mayoría de los tipos de roles de función, SDV asume que el controlador tiene, como máximo, una función de devolución de llamada para cada punto de entrada. Sin embargo, hay algunos tipos de roles de función que pueden tener varias funciones de devolución de llamada de eventos asociadas a ellos. Por ejemplo, un controlador KMDF puede tener varias funciones de devolución de llamada EvtTimerFunc o EvtDpcFunc (que usan las anotaciones de tipo de rol EVT_WDF_TIMER y EVT_WDF_DPC). En este caso, SDV anexa un entero al tipo de función en Sdv-map.h. Por ejemplo, si el controlador tiene dos funciones de devolución de llamada DPC, SDV las asigna a fun_WDF_DPC_1 y fun_WDF_DPC_2.

Si un controlador supera el número máximo de funciones de devolución de llamada para un tipo de rol, SDV muestra el mensaje siguiente.

Static Driver Verifier found more than one entry point for '[role type]'

Si un tipo de rol de función tiene más puntos de entrada que los que admite SDV, no hay necesariamente algo incorrecto con el controlador. Sin embargo, para obtener resultados de comprobación precisos, debe editar el archivo Sdv.-map.h para quitar las entradas duplicadas.

Por ejemplo, el siguiente archivo Sdv-map.h muestra que hay dos funciones CompletionRoutine anotadas mediante el tipo de rol EVT_WDF_REQUEST_COMPLETION_ROUTINE. En el archivo Sdv-map.h, SDV define EvtRequestReadCompletionRoutine y EvtRequestWriteCompletionRoutine como fun_WDF_REQUEST_COMPLETION_ROUTINE.

//Approved=false
#define fun_WDF_DRIVER_DEVICE_ADD OsrFxEvtDeviceAdd
#define fun_WDF_IO_QUEUE_IO_READ OsrFxEvtIoRead
#define fun_WDF_IO_QUEUE_IO_STOP OsrFxEvtIoStop
#define fun_WDF_DEVICE_D0_EXIT OsrFxEvtDeviceD0Exit
#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestReadCompletionRoutine
#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestWriteCompletionRoutine
#define fun_WDF_OBJECT_CONTEXT_CLEANUP OsrFxEvtDriverContextCleanup
#define fun_WDF_DEVICE_D0_ENTRY OsrFxEvtDeviceD0Entry
#define fun_WDF_DEVICE_PREPARE_HARDWARE OsrFxEvtDevicePrepareHardware
#define fun_WDF_IO_QUEUE_IO_WRITE OsrFxEvtIoWrite
#define fun_WDF_IO_QUEUE_IO_DEVICE_CONTROL OsrFxEvtIoDeviceControl

Para quitar la duplicación, convierta en comentario la segunda rutina de finalización (reemplace el #d en #define por dos delimitadores de comentario (//). A continuación, establezca Approved=true y ejecute una comprobación.

#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestReadCompletionRoutine
//efine fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestWriteCompletionRoutine

Después de ver los resultados de la comprobación con la rutina de finalización única, vuelva a editar el archivo Sdv-map.h, pero esta vez convierta en comentario la rutina de finalización que se acaba de comprobar y quite el comentario (reemplace por //#d) de la rutina de finalización que no se comprobó. A continuación, vuelva a ejecutar SDV.

Tipos de roles de función que admiten varios puntos de entrada

Algunos tipos de roles de función admiten varias entradas. Cuando el número de entradas supera el máximo admitido, SDV también los notifica como entradas duplicadas. Puede tratar estas entradas adicionales de la misma manera que controla las entradas duplicadas, comentando selectivamente las instrucciones #define para las rutinas de devolución de llamada en el archivo Sdv-map.h y realizando comprobaciones independientes. Por ejemplo, si el controlador tiene ocho funciones de devolución de llamada DPC (que usan el tipo de rol EVT_WDF_DPC), puede hacer lo siguiente:

  • Edite Sdv-map.h y comente las instrucciones define para fun_WDF_DPC_5 a través de fun_WDF_DPC_8.

  • Ejecute SDV en el controlador.

  • A continuación, vuelva a editar Sdv-map.h para definir fun_WDF_DPC_5 a través de fun_WDF_DPC_8 y convierta en comentario las instrucciones define para fun_WDF_DPC_1 a través de fun_WDF_DPC_4.

  • Ejecute SDV en el controlador.

Consulte Anotaciones de KMDF del comprobador de controladores estáticos para obtener una lista de tipos de roles de función que pueden tener más de una función de devolución de llamada. En la lista se muestra el número máximo de funciones de devolución de llamada que SDV admite para esos tipos de roles.