DRIVER C++

Páginas: 7 (1644 palabras) Publicado: 1 de septiembre de 2014
COMO SE DESARROLLAN LOS DRIVERS EN C++

Para programar drivers no se usa el compilador del Dev ni del MVC++ ni de ningún otro, se usa la DDK (Driver Development Kit), aunque se pueden configurar tanto el MVC++ como el Dev para usar el compilador del DDK.

Una vez se tenga el DDK, hay que instalarlo, luego se va a Inicio / Todos los programas y buscamos el DDK que se instaló, luego hay que ira Build Environments, desde ahí se puede seleccionar cualquiera, aunque muchos recomiendan usar Win XP Free Build Environment para compilar, lo que tienen que hacer es crear una carpeta y dentro meter el código (main.c, por ejemplo) y un archivo SOURCES y un MAKEFILE.

El SORCES tiene que ser así:
TARGETNAME= prueba
TARGETPATH=.
TARGETTYPE=DRIVER
SOURCES= main.c

Donde prueba es el nombredel driver que se generará y main.c es el archivo con el código fuente, no se tiene que modificar nada más.

El MAKEFILE es siempre el mismo:
!INCLUDE $(NTMAKEENV)\makefile.def

Una vez tengamos esto, ejecutamos el Win XP Free Build Environment y se nos abrirá una consola, cambiamos el directorio actual con el comando CD, una vez situados dentro de la carpeta donde están los 3 archivos (comomínimo), tenemos que escribir:

build –cZ

Esto se encarga de compilar y enlazar (linkear) el archivo, si ha habido errores nos lo va a marcar. Si no ha habido errores, nos va a generar el driver dentro de \i386 (se genera una carpeta dentro de la del proyecto). Una vez hecho esto, el trabajo de la DDK se puede dar por concluido.
El tema de las herramientas no ha terminado, ahora nos falta,como mínimo, una herramienta para cargar el driver y otra para ver los mensajes que el driver nos envía. Ya que un driver no se ejecuta con una consola como los archivos de C/C++ o con una ventana, para poder ver los mensajes que nos envía debemos tener una herramienta adicional.
DebugView: Como su nombre indica, esta herramienta sirve para ver los mensajes que se enviar a través de debug (con elcomando DbgPrint). Aunque no solo está orientada a modo kernel, también sirve para aplicaciones de modo usuario.

OSRLoader: Aunque hay otras, esta es la que uso para cargar los drivers, utiliza el método de cargar lo drivers como servicios, primero seleccionan el driver, registran el servicio y lo ejecutan, una vez terminado, lo pueden parar y para no dejar rastro en el registro puedeneliminar el servicio, aunque esto es opcional.

DE UN EJEMPLO DE COMO CONSTRUIR UN DRIVER DE CUALQUIER TIPO.
FUNDAMENTE CON CÓDIGO FUENTE.

Hola mundo desde el driver
Como en todo programa, tiene que haber un punto de partida, un main. El de los driver’s es así:



Código
1) NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
2) {
3) //Código
4) }

Comovemos, al DriverEntry se le pasan 2 parámetros, el primero es un puntero a la estructura DRIVER_OBJECT, más adelante veremos cómo usar esto. El segundo es un puntero a una cadena Unicode donde esta guardada la ruta del registro con el que se cargó el driver.

Una vez realizadas las tareas en el DriverEntry, tenemos que retornar un valor, si no ha habido ningún error retornaremos STATUS_SUCCESS, de locontrario, el código de error pertinente.

Cabe decir que retornando el valor no se descarga el driver, ya que para poderse descargar se tiene que crear una rutina, precisamente esta rutina se crea a partir del puntero al primer parámetro. Veamos cómo se hace:

Código
1) void Salir(PDRIVER_OBJECT DriverObject)
2) {
3) //Codigo de salida
4) }
5) NTSTATUS DriverEntry( PDRIVER_OBJECTDriverObject, PUNICODE_STRING RegistryPath)
6) {
7) DriverObject->DriverUnload=Salir;
8) return STATUS_SUCCESS;
9) }

Como vemos aquí, creamos una rutina para que al descargar el driver se llame a la rutina, dentro podemos escribir un mensaje de "Cerrando driver..." o algo así, o en su caso, unhookear las apis, ya que si cerramos el driver si unhookear la SSDT nos va a mostrar una bonita...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Drives
  • Driver
  • driver
  • Drive
  • Driver
  • Driver
  • Drivadas
  • DRIVE

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS