求教张帆书中第7章的ReadTest在console运行程序时,失去不书中的结果,求解
求教张帆书中第7章的ReadTest在console运行程序时,得到不书中的结果,求解
根据书中的这段驱动
然后应该会通过这段程序,把其写入的0XAA,给打印出来
但现在显示的结果是这样

我是把这个控制台的项目直接加入到驱动的项目中

然后用DriverMonitor加载驱动,再运行这个控制台程序,但却得不到书中的结果,请问
这是什么原因呢? 望各位求教。

------解决方案--------------------
用DebugView看看,驱动内部是怎么处理的。
根据书中的这段驱动
NTSTATUS HelloDDKRead(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp)
{
KdPrint(("Enter HelloDDKRead\n"));
NTSTATUS status = STATUS_SUCCESS;
PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(pIrp);
ULONG ulReadLength = stack->Parameters.Read.Length;
pIrp->IoStatus.Status = status;
pIrp->IoStatus.Information = ulReadLength;
memset(pIrp->AssociatedIrp.SystemBuffer, 0xAA, ulReadLength);
IoCompleteRequest(pIrp, IO_NO_INCREMENT);
KdPrint(("Leave HelloDDKRead\n"));
return status;
}
然后应该会通过这段程序,把其写入的0XAA,给打印出来
#include <windows.h>
#include <stdio.h>
int main()
{
HANDLE hDevice =
CreateFile("\\\\.\\HelloDDK",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hDevice == INVALID_HANDLE_VALUE)
{
printf("error code:%d\n", GetLastError());
return 1;
}
UCHAR buffer[10];
ULONG ulRead;
BOOL bRet = ReadFile(hDevice, buffer, 10, &ulRead, NULL);
if (bRet)
{
printf("read %d bytes:", ulRead);
for (int i = 0; i < (int)ulRead; i++)
{
printf("%02X ", buffer[i]);
}
printf("\n");
}
CloseHandle(hDevice);
return 0;
}
但现在显示的结果是这样
我是把这个控制台的项目直接加入到驱动的项目中
然后用DriverMonitor加载驱动,再运行这个控制台程序,但却得不到书中的结果,请问
这是什么原因呢? 望各位求教。
------解决方案--------------------
用DebugView看看,驱动内部是怎么处理的。