Сгенерировал с помошью DriverStudio 3.1 код.
Полный профан в драйверах - понемножку разбираюсь.
В частности вопрос:
Это чтение
NTSTATUS dramaReadDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
{
PDRAMA_DEVICE_EXTENSION deviceExtension;
NTSTATUS status;
PIO_STACK_LOCATION irpStack;
PVOID readBuffer;
ULONG readLength;
deviceExtension = (PDRAMA_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
status = dramaCheckIoLock(&deviceExtension->IoLock, Irp);
if (!NT_SUCCESS(status) || (status == STATUS_PENDING))
{
return status;
}
// Get our IRP stack location
irpStack = IoGetCurrentIrpStackLocation(Irp);
// Get the read buffer length
readLength = irpStack->Parameters.Read.Length;
if (readLength == 0)
{
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
Irp->IoStatus.Status = status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
dramaDecrementIoCount(&deviceExtension->IoLock);
return status;
}
readBuffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);
status = STATUS_NOT_IMPLEMENTED;
Irp->IoStatus.Information = readLength; //!!!!!!!!!!!!!!!!!!!
Irp->IoStatus.Status = status;
IoCompleteRequest (Irp, IO_NO_INCREMENT);
dramaDecrementIoCount(&deviceExtension->IoLock);
return status;
}
Как посмотреть данные в readBuffer'е?
И аналогично для записи - коды одинаковые
.