una duda, intentando comunicar mu con mk.

Iniciado por black_flowers, 8 Diciembre 2010, 12:59 PM

0 Miembros y 1 Visitante están viendo este tema.

black_flowers

hola, estaba siguiendo el pdf de hendrix para comunicar el modo usuario con el modo kernell y tengo algunas dudas basicas. Yo lo estoy haciendo en windows 7 y utilizo para compilar el x86 free build environment, del windows 7, del ddk. El código del driver es este (faltan las rutinas de unload, y de control que no las pongo porque no importan en esta duda):

#include <ntddk.h>

const WCHAR Device[]=L"\\Device\\bananas";   //modo kernell
const WCHAR sLink[]=L"\\DosDevices";   //modo usuario
UNICODE_STRING Dev,lnk;

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{   NTSTATUS s;
unsigned int i;
   //DriverObject->DriverUnload=Salir;
   for(i=0;i<IRP_MJ_MAXIMUM_FUNCTION;i++)
   {
      // DriverObject->MajorFunction[i]=Control;
   }
   RtlInitUnicodeString(&Dev,Device);
   RtlInitUnicodeString(&lnk,sLink);
   s=IoCreateDevice(DriverObject,0,&Dev,FILE_DEVICE_UNKNOWN,0,0,&DriverObject->DeviceObject);
   if (NT_SUCCESS(s))
   {
       s=IoCreateSymbolicLink(&lnk,&Dev);
       if(!NT_SUCCESS(s))
       {
           IoDeleteDevice(DriverObject->DeviceObject);
           DbgPrint("Linking Error");
       }
       else
       {
           DbgPrint("Cargado");
       }
   }
   else
   {
       DbgPrint("Error IoCreate");
   }
   return STATUS_SUCCESS;
}


Con este codigo me da "Linking Error", con lo cual el DeviceObject debería estar creado y llamarse "bananas", pero he buscado con el WinObject dentro del directorio "Device" y no he visto el objeto creado.

¿No debería de haberse creado el objeto "bananas" dentro del directorio "Device"?

Además tampoco he visto por ningún sitio el directorio DosDevices.

Un saludo.

Arkangel_0x7C5

const WCHAR   sLink[]=L"\\DosDevices";   //modo usuario

Eso se supone que es un directorio donde debes de poner el nombre del enlace
typo: sLink[]=L"\\DosDevices\\bananas";

tambien puedes sustituir 'DosDevices' por '??' y funciona igual.

black_flowers

vale, gracias.
Pero sigo sin entender por qué no encuenctro mi device creado con el nombre "bananas" en la carpeta "Device", con el WinObj. ¿no debería estar creado el dispositivo en dicha carpeta?

un saludo.

Arkangel_0x7C5

Si, pero solo si no da error en alguna parte, por estas lineas:


IoDeleteDevice(DriverObject->DeviceObject);
DbgPrint("Linking Error");

black_flowers

estaba escribiendo aquí una parrafada que te cagas porque no me aparecía el objeto y acabo de entender tu respuesta. Es cierto que me dá ese error, y no me había fijado en que al dar ese error se destruye el DeviceObject con lo cual es lógico que no este cargado.

Bueno ahora habrá que intentar crear el simbolic link de manera satisfactoria,

sigo intentandolo, un saludo. ;D