【发布时间】:2015-02-25 12:53:52
【问题描述】:
司机:
PIO_STACK_LOCATION pIoStackLocation = IoGetCurrentIrpStackLocation(pIrp);
PVOID pBuf = pIrp->AssociatedIrp.SystemBuffer;
switch (pIoStackLocation->Parameters.DeviceIoControl.IoControlCode)
{
case IOCTL_TEST:
DbgPrint("IOCTL IOCTL_TEST.");
DbgPrint("int received : %i", pBuf);
break;
}
用户空间应用:
int test = 123;
int outputBuffer;
DeviceIoControl(hDevice, IOCTL_SET_PROCESS, &test, sizeof(test), &outputBuffer, sizeof(outputBuffer), &dwBytesRead, NULL);
std::cout << "Output reads as : " << outputBuffer << std::endl;
用户空间应用程序打印出通过输出缓冲区接收回的正确值,但在调试视图中,打印出的值似乎是垃圾(即:“int received : 169642096”)
我做错了什么?
【问题讨论】:
-
您的驱动程序代码正在打印指针,而不是 int 值。你想要
*pBuf。