Programación de controladores NT (drivers)




Easy Code versión 1.06.0.0001 y posteriores incorporan el nuevo tipo de proyecto Driver NT clásico (sys), el cual le permite introducirse en la programación de controladores (drivers) de 32 bits. Cuando se elige un proyecto del tipo Driver NT clásico (sys), se crea la estructura básica y también se agregan los mínimos archivos que se necesitan (ntddk.inc, ntoskrnl.inc y ntoskrnl.lib). Este código predeterminado de driver se puede compilar sin errores, pero simplemente no hace nada.

Además de los archivos .inc usuales que se encuentran en la carpeta \Masm32\Include, la programación de drivers requiere algunos archivos .inc adicionales que pueden encontrarse en la carpeta \EasyCode.Ms\Include. En consecuencia, y para evitar errores en la programación de drivers, tenga en cuenta las siguientes consideraciones:

AVISO: El archivo ntddk.inc es incluido SIEMPRE por Easy Code en los proyectos driver, incluso si se quita del Explorador del Proyecto.


Aunque Easy Code proporciona el soporte necesario, la programación de drivers no es nada fácil, especialmente a la hora de depurar el código, y la mayoria de errores de programación acaban produciendo una pantalla azul (BSOD). Si desea iniciarse en ese tipo de programación, puede encontrar un buen tutorial para principiantes en la web Kernel Mode Drivers.

También puede encontrar un simple ejemplo de driver de 32 bits (ECPDriver), que obtiene todos los procesos que hay en marcha en el sistema, y un pequeño programa para probarlo (ECPDrvTest). Ambos han sido programados por Héctor A. Medina y se encuentran en la carpeta \EasyCode.Ms\Examples. Puede obtener más ejemplos de drivers de 32 bits, clicando el siguiente enlace:

Más ejemplos de drivers para Masm


Puesto que el proyecto predeterminado de driver generado por Easy Code hace uso de la macro TextAddrW, la opción Macros de Easy Code (en las Propiedades del proyecto) debe estar marcada para que el proyecto pueda ser generado sin errores.


OBSERVACIONES: El tipo de proyecto driver de Easy Code solamente contempla la programación de drivers NT de 32 bits (.sys) para Windows NT y posteriores, por lo cual no hay ningún soporte para drivers de Windows 95/98/ME (.vxd). Sin embargo, puede diseñar y generar drivers NT en Windows 95/98/ME, aunque no podrá probarlos porque no funcionan en ninguno de esos tres sistemas operativos.

AGRADECIMIENTOS: Héctor Antonio Medina, quien con su constante trabajo, ayuda y asesoramiento ha hecho posible que Easy Code incluya el soporte necesario para la programación de drivers.

MUY IMPORTANTE: La librería ntoskrnl.lib que viene con las versiones anteriores a MASM32 v11, referencia todas sus llamadas al archivo ntoskrnl.dll en lugar de ntoskrnl.exe (ntoskrnl.dll no existe en el sistema). En consecuencia, los proyectos generados con esa librería no pueden funcionar nunca. Para solucionar este problema, solamente debe hacer un clic en el enlace indicado más abajo para descargar la librería ntoskrnl.lib debidamente modificada que funciona correctamente, y moverla a la carpeta \Masm32\Lib sobreescribiendo la existente (ningún otro proyecto se verá afectado por este cambio). Sin embargo, este cambio NO SERÁ necesario si está utilizando MASM32 v11 o posterior.

Descargue la librería ntoskrnl.lib corregida para versiones anteriores a MAMS32 v11