阅读:2830回复:6
NdisQueryBufferSafe返回一个低段虚拟地址
各位大虾有没有遇见这样一种情况:
NdisQueryBufferSafe(firstBuffer, &virtualAddress, &totalLength,NormalPagePriority); 中virtualAddress返回的是0x00000000005. 我的程序如下,它只能防止virtualAddress返回NULL,但是现在 有时候回返回virtualAddress=0x00000005(用SOFT_ICE跟踪的), 请问这是为什么呢?有什么方法解决吗? NdisQueryPacket(MyPacket, NULL, &BufferCount, &firstBuffer, &totalLength1); if( firstBuffer != NULL) { NdisQueryBufferSafe(firstBuffer, &virtualAddress, &totalLength,NormalPagePriority); if(virtualAddress==NULL) { goto Error; } |
|
最新喜欢:moqing...
|
沙发#
发布于:2001-09-14 11:51
用NdisQueryBuffer试试看。
|
|
|
板凳#
发布于:2001-09-14 12:14
我以前就是用的ndisquerybuffer,不行后才改的。
而且好像ndis建议用ndisquerybuffersafe代替 ndisquerybuffer。 而且我在调用ndisquerybuffersafe之前,对 virtualAddress定义的时候,就赋初值为NULL, 可是还是用一些情况(安装驱动后大概一二十分 钟)就会出现返回一个很小的virtualAddress值, 而且这个值有不是NULL,很郁闷!!! 另:我用passthru抓到一些包,把整个包的数据 都出来后发现是几个拟太网正头的组合,而且 每个头的第13、14字节为8、0,但是没有ip包内容。 这是正常现象马? |
|
|
地板#
发布于:2001-09-14 13:03
估计是你的PACKET里的数据不对。
0x0800 表明是IP帧。 IP 数据包要通过NdisGetReceivePacket都到的。 |
|
|
地下室#
发布于:2001-09-14 13:13
那我现在是在passthru的基础上编程,我想抓住
我发送出去的包。所以我在mpsend函数中加入我 自己的程序。我的思路是这样的: 我在ndissend函数之后调用NdisQueryPacket(MyPacket, NULL, &BufferCount, &firstBuffer, &totalLength1); 得到第一个buffer,然后用ndisgetnextbuffersafe 和ndisgetnexbuffer,得到整个的数据包。 请问这种思路对马? 你说的NdisGetReceivePacket是不是用在接受上, 而且如果网卡比较新,跳用的是ptreceivepacket 函数的话,因为直接就可以得到ndis_packet 所以也不需要用ndisgetnexbuffer。对马? |
|
|
5楼#
发布于:2001-09-14 13:47
有问题的。
ndissend如果完成后会调用SendCompleteHandler你看一下, 在SendCompleteHandler里是不是已经把包给释放了。 |
|
|
6楼#
发布于:2001-09-15 11:28
大侠说的很对,非常感谢。
我已经给分了 |
|
|