ygmlq
驱动牛犊
驱动牛犊
  • 注册日期2002-05-27
  • 最后登录2014-11-07
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望23点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1550回复:2

passthru里PtReceive函数里的经典问题

楼主#
更多 发布于:2004-07-26 11:27
我在passthru里的PtReceive函数里调用了分析包的函数出现了
IRQL_NOT_LESS_OR_EQUAL的错误,怎么回事请大侠指点,代码如下:

PtReceive(...)
{
    PADAPT pAdapt = (PADAPT)ProtocolBindingContext;
    PNDIS_PACKET SSPacket, Packet;
    NDIS_STATUS status = NDIS_STATUS_SUCCESS;

    DEBUG_PRINT("==>PtReceive\n");

    if (pAdapt->MiniportHandle == NULL) {
        return NDIS_STATUS_FAILURE;
    }
    else {
        Packet=NdisGetReceivedPacket(pAdapt->BindingHandle, MacReceiveContext);
        AnalyzeContent(Packet);// 分析包的函数
    ......
    }
    ......
}
void AnalyzeContent(PNDIS_PACKET Packet)
{
    PVOID  VirtualAddress = NULL;
    UINT BufferLength = 0;
    PNDIS_BUFFER FirstBuffer = NULL;
    NDIS_PHYSICAL_ADDRESS HighestAcceptableMax;

    NdisQueryPacket(Packet, NULL, NULL,
&FirstBuffer, NULL);
    NdisQueryBufferSafe(FirstBuffer, &VirtualAddress, &BufferLength, LowPagePriority);
    DbgPrint("Buffer VirtualAddress = %08x", (UINT)VirtualAddress);
DbgPrint("BufferLength = %08x\n", BufferLength);
}
不知道是不是NdisQueryBufferSafe引起的错误.
生死有命,富贵由天
ygmlq
驱动牛犊
驱动牛犊
  • 注册日期2002-05-27
  • 最后登录2014-11-07
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望23点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-27 09:18
在PtReceive里Packet为空怎么得到包数据?
生死有命,富贵由天
bingjie
驱动小牛
驱动小牛
  • 注册日期2001-08-15
  • 最后登录2007-11-29
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-27 09:44
你都知道是经典问题了就应该在论坛上搜一下这方面的帖子,Packet=NdisGetReceivePacket并不是总能成功的,这取决于底层Miniport提交数据的方式
游客

返回顶部