能力值:
( LV9,RANK:260 )
2 楼
用MmGetMdlVirtualAddress试试
能力值:
( LV6,RANK:90 )
3 楼
是不是BOOL WINAPI DeviceIoControl(
__in HANDLE hDevice,
__in DWORD dwIoControlCode,
__in_opt LPVOID lpInBuffer,
__in DWORD nInBufferSize,
__out_opt LPVOID lpOutBuffer,
__in DWORD nOutBufferSize,
__out_opt LPDWORD lpBytesReturned,
__inout_opt LPOVERLAPPED lpOverlapped
的输出缓冲为null??
能力值:
( LV2,RANK:10 )
4 楼
是在上面的代码:
pOutputBuffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);
if (pOutputBuffer)
执行后,pOutpBuffer 为空。
我还是先试下 MmGetMdlVirtualAddress ()看看。
谢谢了啊!
能力值:
( LV6,RANK:90 )
5 楼
我把我的意图说明白点,
用DeviceIoControl进行应用层和驱动层间的通信,如果调用DeviceIoControl时,设置输出缓冲为NULL。也就是此次通信并不需要从驱动层获得数据,系统又何必对输出缓冲再搞个mdl映射,直接pOutputBuffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority) = NULL。
如果你说的情况是这样子的,那就没啥奇怪的。初学驱动。说错莫怪
能力值:
( LV2,RANK:10 )
6 楼
skypismire 谢谢你的关注。
你的意思是。我的应用层在调用 DeviceIoControl 的时候
__out_opt LPVOID lpOutBuffer,
__in DWORD nOutBufferSize,
上面两个参数可能设置为空是吧!
但是,我分明分配到了足够的空间了再调用该函数的啊!我想该不是那得问题。
DDK 上已经有了相应的说法了。
NormalPagePriority indicates that the mapping request can fail if system is very low on resources. An example of this is a noncritical local file system request.
不过还是谢谢你们的帮助。
能力值:
( LV9,RANK:260 )
7 楼
你传出了多少东西?一般来说是不会system is very low on resources的,请检查驱动中有没有正确设置pIrp->IoStatus.Information。
能力值:
( LV2,RANK:10 )
8 楼
Irp->IoStatus.Information 的设置一般有什么要求呢?
在 IOCTL 通信的这个地方,一般应该设置为数据传输的字节数吧!如果是这个的话,我想我应该是没错的啊!还是有什么其他的要求?
能力值:
( LV2,RANK:10 )
9 楼
Irp->IoStatus.Information 的设置一般有什么要求呢?
在 IOCTL 通信的这个地方,一般应该设置为数据传输的字节数吧!如果是这个的话,应该是在数据传输完成后再设置的吧!我想我应该是没错的啊!还是有什么其他的要求?