c - 使用 DeviceIoControl 从应用程序向驱动程序发送数据

标签 c windows driver ioctl deviceiocontrol

我可以向应用程序发送数据驱动程序。

在应用中:

DeviceIoControl(dHandle, IOCTL_TEST, (PVOID)InputBuffer, sizeof(InputBuffer), (PVOID)OutputBuffer, sizeof(OutputBuffer), &dwRet, 0);
printf("num : %s\n", OutputBuffer);

在驱动程序中:

char pData[1024];
pData="eeee";
case IOCTL_TEST:
        pInputBuffer = Irp->AssociatedIrp.SystemBuffer;
        pOutputBuffer = Irp->AssociatedIrp.SystemBuffer;
        inputBufferLength = pStack->Parameters.DeviceIoControl.OutputBufferLength;
        RtlCopyMemory(pOutputBuffer, pData, strlen(pData));
        break;
Irp.IoStatus.Information=1024;

结果在应用程序控制台打印 "eeee"

但我不知道如何将应用程序数据发送给驱动程序。 DeviceIoControl的3、4参数是输入缓冲区和长度。
如果我在应用程序中添加 char InputBuffer[1024] = "InputBuffer's data"; ,驱动程序如何接收此数据? 我想使用 DbgPrint() 从应用程序接受数据。


我要选择答案。请回答而不是评论。

最佳答案

我解决了。 解决办法是 驱动程序使用 Irp->AssociatedIrp.Systembuffer 从应用程序接收数据;因此,只需打印此指针的数据即可。

关于c - 使用 DeviceIoControl 从应用程序向驱动程序发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27854081/

相关文章:

windows - Remove-Item 不删除文件

linux - 获取 Linux 内核模块中现有设备类(结构类)的指针

android - Eclipse Device Chooser 找不到我的 Dell Streak

Windows:插入未格式化的闪存驱动器时抑制警告

c - C 中读取任意长度输入行的程序

c - 我无法在 else 语句中使用 scanf()

c - "iovcnt"中 "writev"参数的允许最大值?

c - 如何处理UDP协议(protocol)的多个重传定时器?

javascript - 如何根据边框元素在winjs ListView 中删除焦点

c# - 为 .NET 开发和调试优化 IIS7