dewolfe
驱动牛犊
驱动牛犊
  • 注册日期2007-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分190分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
阅读:1518回复:4

蓝屏!大家帮我看看!

楼主#
更多 发布于:2007-05-31 14:17
这是一个MpSendPackets()调用的函数用来修改数据包,但是执行到NdisMoveMemory()系统就蓝屏!提示DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)!
BOOLEAN TransOut(PUCHAR pcontent)
{
  PIP_Header pIPHeader = (PIP_Header)(pcontent+14);
  NDIS_STATUS Status;
  NDIS_PHYSICAL_ADDRESS phyaddr = {-1};
  PVOID checkbuff = NULL;
  //pIPHeader->ip_saddr = RtlUlongByteSwap(192.168.1.101);
  PSD_Header psdhdr;
  unsigned short iphdrlen = (pIPHeader->ip_verlen & 0x0f) * sizeof(ULONG);

  Status = NdisAllocateMemory((PVOID)&checkbuff, 2014, 0, phyaddr);
  if (NDIS_STATUS_SUCCESS != Status)
        return FALSE;
  NdisZeroMemory(checkbuff, 2014);

  
  if(pIPHeader->ip_protocol == 6)
  {
    PTCP_Header pTCPHeader;
    USHORT tcphdrlen;
    pTCPHeader = (PTCP_Header)(pcontent+14+iphdrlen);
    //tcphdrlen = ((pTCPHeader->dataoffset & 0xf0) >> 4) * sizeof(ULONG);
    tcphdrlen = k_htons(pIPHeader->ip_totallength) - iphdrlen;

    //为修改check做准备
    //修改源地址和校验和
    //pIPHeader->ip_saddr = k_htonl(19);
    pIPHeader->ip_checksum = 0;
    pTCPHeader->tcp_checksum = 0;

    //填充TCP伪首部
    psdhdr.saddr = pIPHeader->ip_saddr;
    psdhdr.daddr = pIPHeader->ip_daddr;
    psdhdr.len   = k_htons(tcphdrlen);
    psdhdr.mbz   = 0;
    psdhdr.protc = 6;

    //计算TCP首部校验和
    NdisMoveMemory((UCHAR*)checkbuff,&psdhdr,sizeof(psdhdr));
    NdisMoveMemory((UCHAR*)checkbuff+sizeof(psdhdr),pTCPHeader,tcphdrlen);
    pTCPHeader->tcp_checksum = checksum((USHORT *)checkbuff,sizeof(psdhdr)+tcphdrlen);

    //计算IP首部校验和
    pIPHeader->ip_checksum = checksum((USHORT *)pIPHeader,iphdrlen);
    NdisFreeMemory(checkbuff, 2014, 0);
    return TRUE;
  }
  else if(pIPHeader->ip_protocol == 17)
  {
    PUDP_Header pUDPHeader;
    USHORT udplen;
    pUDPHeader = (PUDP_Header)(pcontent+14+iphdrlen);
    udplen     = k_htons(pUDPHeader->udp_len);
    //为修改check做准备
    //修改源地址校验和
    //pIPHeader->ip_saddr = benji;
    pIPHeader->ip_checksum = 0;
    pUDPHeader->udp_checksum = 0;

    //填充UDP伪首部
    psdhdr.saddr = pIPHeader->ip_saddr;
    psdhdr.daddr = pIPHeader->ip_daddr;
    psdhdr.len   = pUDPHeader->udp_len;
    psdhdr.mbz   = 0;
    psdhdr.protc = 17;

    //计算UDP校验和,包括所有UDP数据
    NdisMoveMemory((UCHAR*)checkbuff,&psdhdr,sizeof(psdhdr));
    NdisMoveMemory((UCHAR*)checkbuff+sizeof(psdhdr),pUDPHeader,udplen);
    pUDPHeader->udp_checksum = checksum((USHORT *)checkbuff,sizeof(psdhdr)+udplen);

    //计算IP首部校验和
    pIPHeader->ip_checksum = checksum((USHORT *)pIPHeader,iphdrlen);
    NdisFreeMemory(checkbuff, 2014, 0);
    return TRUE;
  }
  else
      NdisFreeMemory(checkbuff, 2014, 0);
      return FALSE;

}
我是一名大四的学生,正在做ip地址的伪装,有很多问题不明白,希望大家能帮我一下。
dewolfe
驱动牛犊
驱动牛犊
  • 注册日期2007-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分190分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-05-31 14:19
不知道该怎么改!
我是一名大四的学生,正在做ip地址的伪装,有很多问题不明白,希望大家能帮我一下。
gutian98
禁止发言
禁止发言
  • 注册日期2003-01-12
  • 最后登录2016-12-11
  • 粉丝4
  • 关注2
  • 积分760分
  • 威望8026点
  • 贡献值1点
  • 好评度364点
  • 原创分0分
  • 专家分21分
  • 金点子奖
  • 社区居民
板凳#
发布于:2007-05-31 14:32
用户被禁言,该主题自动屏蔽!
dewolfe
驱动牛犊
驱动牛犊
  • 注册日期2007-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分190分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-05-31 14:58
没有过期!
我是一名大四的学生,正在做ip地址的伪装,有很多问题不明白,希望大家能帮我一下。
dewolfe
驱动牛犊
驱动牛犊
  • 注册日期2007-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分190分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-05-31 21:36
解决了!函数放的地方不对!
我是一名大四的学生,正在做ip地址的伪装,有很多问题不明白,希望大家能帮我一下。
游客

返回顶部