2 puntos por GN⁺ 2025-02-10 | Aún no hay comentarios. | Compartir por WhatsApp

Cómo escribir un controlador simple en Rust

  • El ecosistema del lenguaje Rust crece día a día y es el único lenguaje convencional que ofrece seguridad de memoria y concurrencia en tiempo de compilación. También son ventajas su sistema de construcción potente y abundante (cargo) y la creciente cantidad de paquetes (crates).
  • Rust, como lenguaje de programación de sistemas, puede usarse en áreas similares a C/C++. La verbosidad al convertir tipos de C a Rust puede mitigarse con wrappers y macros adecuados.
  • En este artículo se explica cómo cambiar la prioridad de hilos escribiendo una versión en Rust del controlador "Booster" presentado en el libro Windows Kernel Programming.

Primeros pasos

  • Para preparar la compilación del controlador, hay que consultar Windows Drivers-rs, e instalar WDK y LLVM.
  • Se puede crear un nuevo proyecto de biblioteca en Rust para escribir el controlador: cargo new --lib booster
  • Hay que agregar un archivo build.rs para configurar el enlace estático con el CRT.

Escritura del código

  • En el kernel no existe la biblioteca estándar, así que se empieza con #![no_std].
  • El crate wdk_sys proporciona interoperabilidad con funciones de kernel de bajo nivel, y el crate wdk ofrece wrappers de alto nivel.
  • Vec y String están definidos en el módulo alloc y pueden usarse proporcionando un asignador global.
  • DriverEntry es el punto de entrada de todos los controladores del kernel de Windows, y se puede hacer salida de depuración usando la macro println! de Rust.

Manejo de solicitudes

  • Hay que manejar las solicitudes IRP_MJ_CREATE, IRP_MJ_CLOSE e IRP_MJ_WRITE.
  • La función boost_write es la parte que realmente cambia la prioridad del hilo.
  • Se usa la estructura ThreadData para pasar solicitudes al controlador.

Instalación y pruebas del controlador

  • El archivo del controlador puede instalarse con la herramienta sc.exe y cargarse en el sistema con sc start.
  • Se puede probar usando una aplicación en C++ para comunicarse con el controlador y pasar la estructura correcta.

Conclusión

  • Es posible escribir controladores de kernel en Rust, y se espera que el soporte mejore rápidamente.
  • Para aprovechar al máximo las ventajas de Rust, es importante crear wrappers seguros para reducir la verbosidad del código y evitar bloques unsafe.
  • El código de este artículo puede consultarse en GitHub: https://github.com/zodiacon/Booster

Aún no hay comentarios.

Aún no hay comentarios.