Introducción a la programación de drivers en Windows

Iniciado por Hendrix, 12 Octubre 2008, 20:43 PM

0 Miembros y 4 Visitantes están viendo este tema.

bizco

#70
pon todo el codigo.

CitarPointer to a wide-character string. Note that the strings returned by the various LSA functions might not be null terminated.


puede que sea eso lo que te crea problema, prueba con %wZ con el UNICODE_STRING.

Hendrix

Para evitar pantallazos, intenta esto:



__try{
//Aqui tu codigo

}__except(EXCEPTION_EXECUTE_HANDLER){
NtStatus = GetExceptionCode();
DbgPrint("Exception: %d.\n", NtStatus);
}


De todos modos:


- RtlUnicodeStringToAnsiString

Ejemplo:


ANSI_STRING aStr;

RtlUnicodeStringToAnsiString(&aStr,CadenaUnicode,TRUE);



Un Saludo  ;)
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

Distorsion



NTSTATUS HookedDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
NTSTATUS       ntStatus;
PIO_STACK_LOCATION IoStack=IoGetCurrentIrpStackLocation(Irp);

PFILE_OBJECT FileObject;
POBJECT_NAME_INFORMATION wcFilePath;
ANSI_STRING aStr;

if (PsReferenceProcessFilePointer(PsGetCurrentProcess(),&FileObject)==STATUS_SUCCESS)
{
__try{
if (IoQueryFileDosDeviceName(FileObject,&wcFilePath)==STATUS_SUCCESS)
{
DbgPrint("Ruta archivo: %ws .\n",wcFilePath->Name.Buffer);
}
else
{
DbgPrint("Ruta archivo: %ws .\n",FileObject->FileName.Buffer);
}
}__except(EXCEPTION_EXECUTE_HANDLER){
ntStatus = GetExceptionCode();
DbgPrint("Exception: %d.\n", ntStatus);
}



}



Este es el codigo, controlar las excepciones no me sirve de nada porque me da pantallazo azul igual :-(

Con el %wZ sige mostrando la barra y transformando la cadena con RtlUnicodeStringToAnsiString me devuelve un punto en vez de una barra.

Lo raro aparte del cuelgue de IoQueryFileDosDeviceName es que no me imprima 'Ruta archivo:' solo una barra.

Distorsion

Estoy liado con la comunicación entre modo kernel y user  >:D

Tal como esta en el ejemplo puedes dar una orden desde modo user y al acabar la operación en el kernel devolver un resultado ya que segun creo la funcion:
DeviceIoControl(hDevice,(DWORD)Escribe,iBuffer,(DWORD)sizeof(iBuffer),(LPVOID)oBuffer,(DWORD)sizeof(oBuffer),&a,NULL)==true)

es bloqueante y espera a que desde el kernel se envié una repuesta.

Pero yo soy un caprichoso y me gustaría al revés, que el kernel enviara un int y se quedara esperando la respuesta del modo usuario, otro int. Pero claro creo que con el DeviceIoControl no es posible.

A alguien se le ocurre algo?¿
;)

bizco

Create un evento y con readfile lees los datos desde modo usuario.

Miseryk

Hola a to2, se viene el 2011 :O y se aproxima el 2012 :):):):):):), no he podido descargar ni encontrar esta herramienta, "WinDbg", otra cosa, cómo puedo hacer para saber el OffsetFlink y el OffsetBlink, son &H88 y &H8C? Desde yá muchas gracias y feliz año. (Y)
Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It's never too late to change our luck
So, don't let them steal your light
Don't let them break your stride
There is light on the other side
And you'll see all the raindrops falling behind
Make it out tonight
it's a revolution

CL!!!

wachi

hola a todos ,desde hace un tiempo para aca me estoy introduciendo a la programacion de drivers,ya me he leido el tute de Hendrix ,el cual esta muy bueno,peor quiero hacerles una pregunta ,existe algun IDE para programar los driver que tenga ayuda inteligente (es decir que cuando yo de Ctrl + Space) me salgan las funciones de las diferentes librerias ?????

gracias de antemano......
Si lo que vas a decir no es mas bello que el silencio : no lo digas