Пытаюсь передать из юзер мода 0xFF драйверу, чтобы потом записать в память, использую DeviceIoControl. Но ничего не доходит почему то. Посылаю вот так:
I> ioBuffer = Irp->AssociatedIrp.SystemBuffer;//как бы ловлю
I> Mem = MmMapIoSpace( Padd, 512, cache );//маппим память
I> Byt = (char*)Mem;//передаю
Вы таким образом хотели записать в Byt 512 байт из ioBuffer?
I> *Byt = (char)ioBuffer;//записываю
I> mmUnmapIoSpace( Mem, 512 );//анмаппим память
I>
я просто не знаю какая длинна у ioBuffer и как её можно узнать-) Но думаю наверно это не из-за этого или я не прав? Тогда как получить длину? Заранее спасибо!
Здравствуйте, iilisav, Вы писали:
I>я просто не знаю какая длинна у ioBuffer и как её можно узнать-)
ULONG uLength = irpStack->Parameters.DeviceIoControl.InputBufferLength;
METHOD_BUFFERED
For this transfer type, IRPs supply a pointer to a buffer at Irp->AssociatedIrp.SystemBuffer. This buffer represents both the input buffer and the output buffer that are specified in calls to DeviceIoControl and IoBuildDeviceIoControlRequest. The driver transfers data out of, and then into, this buffer.
For input data, the buffer size is specified by Parameters.DeviceIoControl.InputBufferLength in the driver's IO_STACK_LOCATION structure. For output data, the buffer size is specified by Parameters.DeviceIoControl.OutputBufferLength in the driver's IO_STACK_LOCATION structure.
The size of the space that the system allocates for the single input/output buffer is the larger of the two length values.
Сначало читаем из Irp->AssociatedIrp.SystemBuffer. Это входные данные. В твоем случае их размер 0.
Затем пишем в Irp->AssociatedIrp.SystemBuffer. Это выходные данные. В твоем случае их размер 512.
I>я просто не знаю какая длинна у ioBuffer и как её можно узнать-) Но думаю наверно это не из-за этого или я не прав? Тогда как получить длину? Заранее спасибо!
В приведенном коде длина вообще не учитывается. В ячейку 0xC8000 записывается младшее значение указателя Irp->AssociatedIrp.SystemBuffer.
Догадываюсь, что это не то, что задумывалось. А что задумывалось не пойму.
Здравствуйте, MShura, Вы писали:
MS>Сначало читаем из Irp->AssociatedIrp.SystemBuffer. Это входные данные. В твоем случае их размер 0. MS>Затем пишем в Irp->AssociatedIrp.SystemBuffer. Это выходные данные. В твоем случае их размер 512.
То есть хочу передать в буфер 0xFF. Потом записать его по адресу 0xc8000. Но ничего не получается то ли не приходит вообще то ли не записывается в память. Кстати пробовал вывести значение буфера через DbgPrint вообще перезагрузка-)
I>То есть хочу передать в буфер 0xFF. Потом записать его по адресу 0xc8000. Но ничего не получается то ли не приходит вообще то ли не записывается в память. Кстати пробовал вывести значение буфера через DbgPrint вообще перезагрузка-)