我一直在寻找一种方法来将设备驱动程序产生的数据发送到用户模式应用程序。例如,我将用户模式中的特定进程ID发送到我的设备驱动程序,并且我的设备驱动程序在进行一些计算之后将其发送回用户模式。 我的设备驱动程序与IOCTL一起运行。所以一旦我认为在PIRP结构中有一个空间/缓冲区作为发送到用户模式应用程序的结构。经过大量的搜索,我没有任何有用的参考,使用信息。有人在这件事上给我任何线索吗? 即使它有点帮助,我也会很感激。提前谢谢。
答案 0 :(得分:0)
当您调用DeviceIoControl API时,将调用MajorFunction [IRP_MJ_DEVICE_CONTROL]的指定例程。
正如您所提到的,您收到了指向IRP的指针。根据您定义的IOCTL类型,您可以将数据发送给被叫方,在这种情况下,这是用户模式应用程序。
METHOD_BUFFERED 对于此传输类型,IRP在Irp-> AssociatedIrp.SystemBuffer处提供指向缓冲区的指针。此缓冲区表示在调用DeviceIoControl和IoBuildDeviceIoControlRequest时指定的输入缓冲区和输出缓冲区。驱动程序将数据传输出缓冲区,然后传输到此缓冲区中。