当前位置: 代码迷 >> 驱动开发 >> 求教张帆书中第7章的ReadTest在console运行程序时,失去不书中的结果,求解
  详细解决方案

求教张帆书中第7章的ReadTest在console运行程序时,失去不书中的结果,求解

热度:50   发布时间:2016-04-28 10:08:33.0
求教张帆书中第7章的ReadTest在console运行程序时,得到不书中的结果,求解
根据书中的这段驱动

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看看,驱动内部是怎么处理的。
  相关解决方案