Проблемы с передачей параметров в драйвер!
От: iilisav  
Дата: 06.11.08 17:44
Оценка:
Пытаюсь передать из юзер мода 0xFF драйверу, чтобы потом записать в память, использую DeviceIoControl. Но ничего не доходит почему то. Посылаю вот так:


  char BufferValue [512];

  hDevice = CreateFile ("\\\\.\\MyDevice", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

  memset(BufferValue, 0, 512);
  strcpy( BufferValue, Edit1->Text.c_str());
  DeviceIoControl(hDevice, IOCTL_TEST_SMTH, NULL, 0, &BufferValue, sizeof(BufferValue), &ReturetLength, NULL);


пытаюсь ловить вот так:




VOID *Mem;
char *Byt = 0;
MEMORY_CACHING_TYPE cache = 0;    
PHYSICAL_ADDRESS  Padd;      
PCHAR ioBuffer = 0;

NTSTATUS
DriverDeviceControl(IN PDEVICE_OBJECT DeviceObject,
                    IN PIRP Irp)
{
  NTSTATUS ntStatus;
  PIO_STACK_LOCATION irpStack;
  PDEVICE_EXTENSION extension;
  ULONG ioControlCode;
  
  Irp->IoStatus.Status = STATUS_SUCCESS;
  Irp->IoStatus.Information = 0;
  irpStack = IoGetCurrentIrpStackLocation(Irp);
  extension = DeviceObject->DeviceExtension;
  ioBuffer = Irp->AssociatedIrp.SystemBuffer;
  ioControlCode = irpStack->Parameters.DeviceIoControl.IoControlCode;
  
   switch (ioControlCode)
    { 
     case TEST_SMTH:                 

    Padd.HighPart = 0; 
    Padd.LowPart = 0xC8000;//адрес памяти

    ioBuffer = Irp->AssociatedIrp.SystemBuffer;//как бы ловлю
    
        Mem = MmMapIoSpace( Padd, 512, cache );//маппим память
        Byt = (char*)Mem;//передаю
    *Byt = (char)ioBuffer;//записываю
        mmUnmapIoSpace( Mem, 512 );//анмаппим память       
    
     break; 
   
   break;
 
   default:
      Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
   break;
  }
  ntStatus = Irp->IoStatus.Status;
  IoCompleteRequest(Irp, IO_NO_INCREMENT); 
  return ntStatus;
}


извиняюсь за кучу кода, но не могу понять почему не работает-) Заранее спасибо!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.