阅读:1542回复:3
[请教]驱动同应用程序间通讯的读写问题
请各位高手指点:
开发环境driverworks,仿武安河的readwrite例程改写如下: 应用程序: 定义了全局变量: char *buf; int N=16; main中: 调用doWrite(N); void doWrite(int n) { int i; int j=0; ULONG nWritten; buf = (char *) malloc(n); if (buf == NULL) { printf(\"Failed to allocate buffer for write\"); Exit(1); } for (i=0; i<n; i++) { j=j+1; buf = j; } // Write data to driver printf(\"Writing to device - \"); WriteFile(hDevice, buf, n, &nWritten, NULL); printf(\" written to device (%d bytes attempted).\\n\", n); free(buf); } 驱动: NTSTATUS Mydriver425Device::Write(KIrp I) { NTSTATUS status = STATUS_SUCCESS; PUCHAR pBuffer = (PUCHAR)I.BufferedWriteSource(); ULONG dwTotalSize = I.WriteSize(CURRENT); PUCHAR pMyBuffer = new (NonPagedPool) UCHAR[dwTotalSize]; RtlCopyMemory(pMyBuffer,pBuffer,dwTotalSize); I.Information() = dwTotalSize; // KIrp Current = CurrentIrp(); return I.PnpComplete(this, status); } 编译无问题,运行重启,系统2000,用softice调试,rtlcopymemory之后出现pagefault错误,是否是因为应用程序分配的是分页内存,但武例程中也没有专门进行非分页分配,请各位指点一二 [编辑 - 4/29/05 by bluesword] |
|
沙发#
发布于:2005-04-30 12:12
看看pBuffer是不是NULL
|
|
|
板凳#
发布于:2005-05-04 09:46
谢谢楼上的回答,之前用softice调试时显示局部变量使用如下形式:
[kk]+pbuffer=0x00000000,我在softice中,输入d pbuffer查看应用程序中内存的内容,发现不是所写的1,2,3,4,5,6,...16的内容 另外我在读老外用ddk写的程序时,发现程序中分配pmybuffer时,其空间大小为[[long]filethred]+sizeof(pbuffer)(大致形式如此),而武安河的则是sizeof(pbuffer),也就是说老外分配的空间考虑了首地址的大小,这是否是一个原因呢? |
|
地板#
发布于:2005-05-05 16:19
ding
|
|