anylin
驱动牛犊
驱动牛犊
  • 注册日期2005-06-07
  • 最后登录2008-11-04
  • 粉丝0
  • 关注0
  • 积分365分
  • 威望45点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:1313回复:3

这段收包的代码有问题么

楼主#
更多 发布于:2005-07-26 22:12
PUCHAR in = (PUCHAR)I.IoctlBuffer();
              
                                                 //指定堆栈为当前堆栈
                                                 EStackLocation s = CURRENT;
                                                 //获取输入缓冲区的长度
                                                 UINT size = I.IoctlInputBufferSize(s);

                                                 for(UINT i = 0; i< size; i++)
                                                 {
                                                        recData[ i ] = in[ i ];
                                                 }

                                                 //产生一个收包信号
                                                 if(pAdapter != NULL)
                                                 {
                                                        //pAdapter是指向当前Adapter的指针
                                                        NdisMEthIndicateReceive(*pAdapter,
                                                                                                  pAdapter,
                                                                                                  (PCHAR)recData,
                                                                                                  ETHE_HEADER_LEN,
                                                                                                  (PCHAR)recData + ETHE_HEADER_LEN,
                                                                                                  size - ETHE_HEADER_LEN,
                                                                                                  size - ETHE_HEADER_LEN);

                                                        NdisMEthIndicateReceiveComplete(*pAdapter);
                                                 }
                                                 else
                                                 {
                                                        TRACE("receive packet failed!");
                                                 }
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-07-27 15:39
1。drivernetwork作了很多封装,一旦出问题,就不太好定位。
2。这种问题,你先检查你的数据包的格式对不对。
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-07-28 20:34
NdisMEthIndicateReceive用ddk来写,第一个参数是pAdapt->MiniportHandle,你在drivernetwork 中用
*pAdapter来表示这个参数,和ddk是表示同一个含义吗?如果不是,肯定是有问题
anylin
驱动牛犊
驱动牛犊
  • 注册日期2005-06-07
  • 最后登录2008-11-04
  • 粉丝0
  • 关注0
  • 积分365分
  • 威望45点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-07-28 20:57
应改不是这个问题吧
KNdisMiniAdapter的基类KObject定义了对 * 的重载

是这样的:
// Retrieve "context" (the object pointer itself)
inline PVOID Context() const { return this; }
// Retrieve pointer to the handle (for friendly classes which might assign indirectly)
inline Handle_t* HandlePTR() { return &m_Handle; }

而且在KNdisMiniAdapter成员函数SetAttributesEx里是这样调用的
NdisMSetAttributesEx(*this, this, CheckForHangTimeInSeconds, AttributeFlags, AdapterType);
游客

返回顶部