Compartir a través de


Tutorial: Escritura de un controlador universal de Windows (UMDF 2) basado en una plantilla

En este artículo se describe cómo escribir un controlador universal de Windows mediante User-Mode Driver Framework (UMDF) 2. Comienza con una plantilla de Microsoft Visual Studio y, a continuación, implementa e instala el controlador en un equipo independiente.

Prerrequisitos

  • Siga los pasos para instalar Windows Driver Kit (WDK). Las Herramientas de depuración para Windows se incluyen al instalar el WDK.

  • Instale Visual Studio 2022. Al instalar Visual Studio 2022, seleccione la carga de trabajo Desarrollo de escritorio con C++ y, a continuación, en Componentes individuales, agregue lo siguiente:

    • Bibliotecas con mitigaciones de Spectre de ARM64/ARM64EC de MSVC v143 de VS 2022 C++ (más recientes)
    • Bibliotecas con mitigaciones de Spectre de MSVC v143 - VS 2022 C++ x64/x86 (más recientes)
    • Últimas herramientas de compilación de ATL de C++ para v143 con mitigaciones de Spectre (ARM64/ARM64EC)
    • Últimas herramientas de compilación de ATL de C++ para v143 con mitigaciones de Spectre (x86 y x64)
    • Últimas herramientas de compilación de MFC de C++ para v143 con mitigaciones de Spectre (ARM64/ARM64EC)
    • Últimas herramientas de compilación de MFC de C++ para v143 con mitigaciones de Spectre (x86 y x64)
    • Kit para controladores de Windows

Creación y compilación de un controlador

Nota:

Al crear un nuevo controlador KMDF o UMDF, debe seleccionar un nombre de controlador que tenga 32 caracteres o menos. Este límite de longitud se define en wdfglobals.h.

  1. Abre Visual Studio. En el menú Archivo, elija Nuevo > Proyecto.

  2. En el cuadro de diálogo Crear un nuevo proyecto, seleccione de C++ en la lista desplegable de la izquierda, elija Windows en el menú desplegable central y elija Controlador en la lista desplegable derecha.

  3. Seleccione Controlador de modo de usuario (UMDF V2) en la lista de tipos de proyecto. Seleccione Siguiente.

    Captura de pantalla del cuadro de diálogo de nuevo proyecto, mostrando el controlador de modo de usuario seleccionado.

    Sugerencia

    Si no encuentra plantillas de proyecto de controlador en Visual Studio, la extensión de Visual Studio de WDK no se instaló correctamente. Para resolver este problema, inicie el Instalador de Visual Studio, haga clic en Modificar, agregue Kit para controladores de Windows en la pestaña Componente individual y seleccione Modificar.

  4. En el cuadro de diálogo Configurar el nuevo proyecto , escriba "UmdfDriver" en el campo Nombre del proyecto.

    Nota:

    Al crear un nuevo controlador KMDF o UMDF, debe seleccionar un nombre de controlador que tenga 32 caracteres o menos. Este límite de longitud se define en wdfglobals.h.  

  5. En el campo Ubicación , escriba el directorio donde desea crear el nuevo proyecto.

  6. Compruebe Colocar solución y proyecto en el mismo directorio y seleccione Crear.

    Captura de pantalla del cuadro de diálogo de configuración del proyecto.

    Visual Studio crea un proyecto y una solución. Puede verlos en la ventana Explorador de soluciones. (Si la ventana explorador de soluciones no está visible, elija Explorador de soluciones en el menú Ver ). La solución tiene un proyecto de controlador denominado UmdfDriver. Para ver el código fuente del controlador, abra cualquiera de los archivos en Archivos de código fuente. Driver.c y Device.c son buenos lugares para empezar.

    Captura de pantalla del explorador de soluciones que muestra los archivos en el proyecto de controlador.

  7. En la ventana Explorador de soluciones, seleccione y mantenga presionada (o haga clic con el botón derecho) Solución "UmdfDriver" (1 de 1 proyecto) y elija Administrador de configuración. Elija una configuración y una plataforma para el proyecto de controlador. Por ejemplo, elija Depuración y x64.

  8. En la ventana Explorador de soluciones, seleccione y mantenga presionado (o haga clic con el botón derecho) UmdfDriver y elija Propiedades. Vaya a Propiedades de configuración > Configuración del controlador > General y tenga en cuenta que el valor predeterminado de Plataforma de destino es Universal.

  9. Para compilar el controlador, seleccione Compilar solución en el menú Compilar. Microsoft Visual Studio muestra el progreso de la compilación en la ventana Salida . (Si la ventana Salida no está visible, elija Salida en el menú Ver ).

    Compruebe que la salida de compilación incluye:

    >    Driver is 'Universal'.
    

    Al comprobar que la solución se ha compilado correctamente, puede cerrar Visual Studio.

  10. Para ver el controlador integrado, en el Explorador de archivos, vaya a la carpeta UmdfDriver y, a continuación, a x64\Debug\UmdfDriver. El directorio incluye los siguientes archivos:

    • UmdfDriver.dll:-el archivo de controlador en modo de usuario
    • UmdfDriver.inf-:un archivo de información que Windows usa al instalar el controlador

Implementar e instalar el controlador universal de Windows

Normalmente, al probar y depurar un controlador, el depurador y el controlador se ejecutan en equipos independientes. El equipo que ejecuta el depurador se denomina equipo hosty el equipo que ejecuta el controlador se denomina equipo de destino . El equipo de destino también se denomina equipo de prueba.

Importante

Hasta ahora, ha usado Visual Studio para compilar un controlador en el ordenador host. Ahora debe configurar un equipo de destino. Siga las instrucciones de Configurar un equipo para la implementación y pruebas de controladores (WDK 10). Ahora, estás listo para implementar, instalar, cargar y depurar tu controlador.

  1. En el equipo host, abra la solución en Visual Studio. Puede hacer doble clic en el archivo de solución, UmdfDriver.sln, en la carpeta UmdfDriver.

  2. En la ventana Explorador de soluciones, seleccione y mantenga presionado (o haga clic con el botón derecho) UmdfDriver y elija Propiedades.

  3. En la ventana Páginas de propiedades de UmdfDriver, vaya a Configuración de propiedades > Instalación y despliegue del controlador>, como se muestra aquí.

  4. Active Quitar versiones anteriores del controlador antes de la implementación.

  5. En Nombre de dispositivo de destino, seleccione el nombre del equipo que configuró para probar y depurar.

  6. Seleccione Actualización del controlador de ID de hardware y escriba el identificador de hardware del controlador. En este ejercicio, el identificador de hardware es Root\UmdfDriver. Selecciona Aceptar.

    captura de pantalla de las páginas de propiedades de umdfdriver, en la que se muestra la instalación del controlador de implementación seleccionada

    Nota:

    En este ejercicio, el identificador de hardware no identifica una parte real del hardware. Identifica un dispositivo imaginario que se coloca en el árbol de dispositivos como hijo del nodo raíz. En el caso del hardware real, no seleccione Hardware ID Driver Update (Actualización del controlador de id. de hardware); en su lugar, seleccione Instalar y comprobar. Puede ver el identificador de hardware en el archivo de información del controlador (INF). En la ventana Explorador de soluciones, vaya a UmdfDriver Driver Files (Archivos de controlador de UmdfDriver>) y haga doble clic en UmdfDriver.inf. El identificador de hardware está en [Standard.NT$ARCH$].

    [Standard.NT$ARCH$]
    %DeviceName%=MyDevice_Install,Root\UmdfDriver
    
  7. En el menú Depurar , elija Iniciar depuración o presione F5 en el teclado.

  8. Espere hasta que el controlador se implemente, instale y cargue en el equipo de destino. Esto puede tardar varios minutos.

Uso de Driver Module Framework (DMF)

Driver Module Framework (DMF) es una extensión de WDF que permite una funcionalidad adicional para un desarrollador de controladores WDF. Ayuda a los desarrolladores a escribir cualquier tipo de controlador WDF mejor y más rápido.

DMF como marco permite la creación de objetos WDF denominados módulos DMF. El código de estos módulos DMF se puede compartir entre distintos controladores. Además, DMF agrupa una biblioteca de módulos DMF que desarrollamos para nuestros controladores y consideramos que proporcionaría valor a otros desarrolladores de controladores.

DMF no reemplaza WDF. DMF es un segundo marco que se usa con WDF. El desarrollador que usa DMF sigue usando WDF y todos sus primitivos para escribir controladores de dispositivo.

Para obtener más información, consulta Driver Module Framework (DMF).