Compartir a través de


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

Para habilitar SDV para analizar un controlador KMDF, debe declarar las funciones mediante las declaraciones de tipo de rol de función para KMDF. Los tipos de rol de función se definen en Wdf.h y en otros archivos de encabezado KMDF que se incluyen en Wdf.h. Para obtener la lista de tipos de roles de función y sus funciones de devolución de llamada de eventos correspondientes, vea Static Driver Verifier KMDF Function Declarations.

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

Por ejemplo, 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 EvtDriverDeviceAdd . En este ejemplo, la función de devolución de llamada se denomina myDriver_EvtDriverDeviceAdd. El tipo de rol de función es EVT_WDF_DRIVER_DEVICE_ADD.

EVT_WDF_DRIVER_DEVICE_ADD myDriver_EvtDriverDeviceAdd;

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.

La lista siguiente procede del archivo de encabezado Fail_Driver6.h. Las funciones relacionadas se declaran en FailDriver6.c.

/*++

Copyright (C) Microsoft.  All rights reserved.
Module Name:
    fail_driver6.h
Environment:
    Kernel mode
--*/

#include <NTDDK.h>  
#include <wdf.h>

#include "fail_library6.h"

DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd;
EVT_WDF_IO_QUEUE_IO_READ EvtIoRead;
EVT_WDF_IO_QUEUE_IO_WRITE EvtIoWrite;
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtIoDeviceControl;
EVT_WDF_DEVICE_CONTEXT_CLEANUP DeviceContextCleanUp;
EVT_WDF_DEVICE_CONTEXT_DESTROY DeviceContextDestroy;
EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK QueueCleanup;
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK QueueDestroy;
EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK FileContextCleanup;
EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK FileContextDestroy;

Después de declarar las funciones de devolución de llamada del controlador mediante declaraciones de tipo de rol, puede examinar el controlador. El examen del controlador genera el archivo Sdv-map.h, que puede examinar para determinar si los puntos de entrada se han identificado correctamente.

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.

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 rutina EvtDriverDeviceAdd mediante el tipo de rol de función EVT_WDF_DRIVER_DEVICE_ADD.

EVT_WDF_DRIVER_DEVICE_ADD myEvtDriverDeviceAdd;

Al implementar la función myEvtDriverDeviceAdd, los tipos de parámetros deben coincidir con los usados por EVT_WDF_DRIVER_DEVICE_ADD, a saber, WDFDRIVER y PWDFDEVICE_INIT (vea La rutina EvtDriverDeviceAdd para la sintaxis).

NTSTATUS
 myEvtDriverDeviceAdd (
  WDFDRIVER Driver,
 PWDFDEVICE_INIT DeviceInit
 )
{
}