Compartir a través de


Examinar el controlador

El examen del controlador mediante la opción de comando /scan es opcional. Si no examina antes de comprobar el controlador, SDV examina las declaraciones de tipo de rol de función y crea un archivo Sdv-map.h al comprobar el controlador.

Durante este examen, SDV intenta detectar los puntos de entrada del controlador que necesita para comprobar el controlador. Registra los resultados del examen en Sdv-map.h, un archivo que crea en el directorio de orígenes del controlador.

Sin embargo, es muy importante revisar este archivo, ya sea después del paso de examen o después de la comprobación, para asegurarse de que SDV ha detectado los puntos de entrada correctos. Si faltan puntos de entrada o no son correctos, es posible que la comprobación no sea confiable. Lo más importante es que si SDV no puede detectar ningún punto de entrada, no puede comprobar el controlador.

Solo tiene que examinar una vez por cada controlador. A partir de entonces, SDV conserva el archivo Sdv-map.h para el controlador para futuras comprobaciones.

Examine el archivo Sdv-map.h

Después de ejecutar un comando de examen o comprobar el controlador, abra el archivo Sdv-map.h y examine el archivo. Sdv-map.h es un archivo de texto con formato. Puede leerlo en cualquier editor de texto, como el Bloc de notas.

Compare el contenido del archivo Sdv-map.h con los tipos de rol de función declarados para el controlador. Examine el contenido del archivo Sdv-map.h para ver que las rutinas de devolución de llamada o envío del controlador se han identificado correctamente.

El archivo Sdv-map.h no es necesario para enumerar todos los puntos de entrada del controlador; solo los puntos de entrada de los códigos de función principales de IRP o los tipos de rol de función que se usan en el análisis. No agregue ningún código de función principal irP ni tipos de rol de función al archivo.

Para obtener información detallada sobre el archivo Sdv-map.h, consulte Sdv-map.h. El formato se describe en Formato del archivo Sdv-map.h. Los errores que pueden aparecer en el archivo Sdv-map.h se describen en Aprobación del archivo Sdv-map.h.

En el ejemplo siguiente se muestra el contenido del archivo Sdv-map.h de Fail_driver1, un controlador WDM de ejemplo en el directorio tools\sdv\samples\fail_drivers\wdm.

//Approved=false
//DriverAddDevice
#define fun_AddDevice DriverAddDevice
//DriverEntry
#define fun_DriverEntry DriverEntry
//DriverUnload
#define fun_DriverUnload DriverUnload
//CompletionRoutine
#define fun_IO_COMPLETION_ROUTINE_1 CompletionRoutine
//DpcForIsrRoutine
#define fun_IO_DPC_ROUTINE_1 DpcForIsrRoutine
//DispatchCreate
#define fun_IRP_MJ_CREATE DispatchCreate
//DispatchPnp
#define fun_IRP_MJ_PNP DispatchPnp
//DispatchPower
#define fun_IRP_MJ_POWER DispatchPower
//DispatchRead
#define fun_IRP_MJ_READ DispatchRead
//DispatchSystemControl
#define fun_IRP_MJ_SYSTEM_CONTROL DispatchSystemControl
//InterruptServiceRoutine
#define fun_KSERVICE_ROUTINE_1 InterruptServiceRoutine

Corrija el archivo Sdv-map.h.

Antes de comprobar un controlador, corrija los errores en el archivo Sdv-map.h. SDV comprobará un controlador, incluso si el archivo Sdv-map.h es incorrecto o no está aprobado, pero es posible que los resultados de la comprobación no sean confiables. Por ejemplo, si no declara la rutina de envío o devolución de llamada de un controlador mediante el tipo de rol de función correspondiente, la rutina del controlador no aparecerá en el archivo Sdv-map.h. Por lo tanto, podría perder la búsqueda de defectos en el código porque SDV considera las reglas que usan tipos de rol de función como no aplicables, incluso si especificó esas reglas como parte de la comprobación.

Para corregir un archivo Sdv-map.h, asegúrese de que las rutinas de envío o devolución de llamada del controlador se declaran mediante los tipos de rol de función adecuados. A continuación, vuelva a examinar el controlador y compruebe que aparecen en el archivo Sdv-map.h.

Aprobar el archivo Sdv-map.h

Después de determinar que el archivo Sdv-map.h es correcto, puede aprobar el archivo. Si no realizó ningún cambio en el archivo, no es necesario aprobarlo.

SDV comprobará un controlador incluso si el archivo Sdv-map.h no está aprobado.

Para aprobar el archivo Sdv-map.h, en la primera línea del archivo, cambie:

//Approved=false

a:

//Approved=true

Solo tiene que aprobar el archivo Sdv-map.h una vez para cada controlador. A partir de entonces, SDV conserva el archivo Sdv-map.h aprobado para el controlador para futuras comprobaciones. Si desea que SDV vuelva a examinar el código fuente en busca de declaraciones de tipo de rol de función, elimine el archivo.

En el ejemplo siguiente se muestra el archivo Sdv-map.h aprobado para el controlador de ejemplo de KMDF, Fail_Driver1. SDV usa el archivo Sdv-map.h para asignar las funciones de devolución de llamada declaradas del controlador con los tipos de rol de función que sdV necesita para la comprobación.

//Approved=true
//DriverEntry
#define fun_DriverEntry DriverEntry
//EvtDriverDeviceAdd
#define fun_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd
//EvtIoDeviceControl
#define fun_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtIoDeviceControl
//EvtIoInternalDeviceControl
#define fun_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl
//EvtIoRead
#define fun_WDF_IO_QUEUE_IO_READ EvtIoRead
//EvtRequestCancel
#define fun_WDF_REQUEST_CANCEL_1 EvtRequestCancel