Пытаюсь передать из юзер мода 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;
}
извиняюсь за кучу кода, но не могу понять почему не работает-) Заранее спасибо!!!