使用 DeviceIoControl 从应用程序向驱动程序发送数据
data send using DeviceIoControl from app to driver
我可以将数据驱动程序发送到应用程序。
在应用中:
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()
从应用程序接受数据。
我想select回答。请回答不评论。
我解决了。
解决办法是
驱动程序使用 Irp->AssociatedIrp.Systembuffer 从应用程序接收数据;所以,只打印这个指针的数据。
我可以将数据驱动程序发送到应用程序。
在应用中:
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()
从应用程序接受数据。
我想select回答。请回答不评论。
我解决了。 解决办法是 驱动程序使用 Irp->AssociatedIrp.Systembuffer 从应用程序接收数据;所以,只打印这个指针的数据。