baijbup
驱动牛犊
驱动牛犊
  • 注册日期2001-08-03
  • 最后登录2003-05-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2830回复:6

NdisQueryBufferSafe返回一个低段虚拟地址

楼主#
更多 发布于:2001-09-14 11:46
各位大虾有没有遇见这样一种情况:
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;
}

最新喜欢:

moqingsongmoqing...
************************ 寻找快乐的人 ************************
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-09-14 11:51
用NdisQueryBuffer试试看。
我思故我在,脑袋不会坏.
baijbup
驱动牛犊
驱动牛犊
  • 注册日期2001-08-03
  • 最后登录2003-05-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-09-14 12:14
我以前就是用的ndisquerybuffer,不行后才改的。
而且好像ndis建议用ndisquerybuffersafe代替
ndisquerybuffer。
而且我在调用ndisquerybuffersafe之前,对
virtualAddress定义的时候,就赋初值为NULL,
可是还是用一些情况(安装驱动后大概一二十分
钟)就会出现返回一个很小的virtualAddress值,
而且这个值有不是NULL,很郁闷!!!
  另:我用passthru抓到一些包,把整个包的数据
都出来后发现是几个拟太网正头的组合,而且
每个头的第13、14字节为8、0,但是没有ip包内容。
这是正常现象马?
************************ 寻找快乐的人 ************************
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-09-14 13:03
估计是你的PACKET里的数据不对。

0x0800 表明是IP帧。


IP 数据包要通过NdisGetReceivePacket都到的。

我思故我在,脑袋不会坏.
baijbup
驱动牛犊
驱动牛犊
  • 注册日期2001-08-03
  • 最后登录2003-05-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-09-14 13:13
那我现在是在passthru的基础上编程,我想抓住
我发送出去的包。所以我在mpsend函数中加入我
自己的程序。我的思路是这样的:
我在ndissend函数之后调用NdisQueryPacket(MyPacket, NULL, &BufferCount, &firstBuffer, &totalLength1);
得到第一个buffer,然后用ndisgetnextbuffersafe
和ndisgetnexbuffer,得到整个的数据包。
请问这种思路对马?
你说的NdisGetReceivePacket是不是用在接受上,
而且如果网卡比较新,跳用的是ptreceivepacket
函数的话,因为直接就可以得到ndis_packet
所以也不需要用ndisgetnexbuffer。对马?
************************ 寻找快乐的人 ************************
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-09-14 13:47
有问题的。
ndissend如果完成后会调用SendCompleteHandler你看一下,
在SendCompleteHandler里是不是已经把包给释放了。
我思故我在,脑袋不会坏.
baijbup
驱动牛犊
驱动牛犊
  • 注册日期2001-08-03
  • 最后登录2003-05-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-09-15 11:28
大侠说的很对,非常感谢。
我已经给分了
************************ 寻找快乐的人 ************************
游客

返回顶部