taijun
驱动牛犊
驱动牛犊
  • 注册日期2003-10-08
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1291回复:3

对17那段程序中的发送函数有些疑问,向mikeluo及诸位同仁请教!

楼主#
更多 发布于:2003-10-16 11:42
程序如下:
// send函数开始
VOID _stdcall NSHIM_Send(
    OUT PNDIS_STATUS Status,
    IN  NDIS_HANDLE  NdisBindingHandle,
    IN  PNDIS_PACKET Packet
    )
{
 USHORT sndkeyno; //传送密钥
 UCHAR i;
// 通过循环来找出那个visual adapter被绑定
 for(i=0;i<BindingAdapterNum;i++){
  if(BindingAdapterInfo.BindingHandle==NdisBindingHandle&& BindingAdapter
Info.CtrlActived)
// BindingAdapterInfo.CtrlActived什莫意思?
    break;
 }
 if(i==BindingAdapterNum) goto forward;  // 没有绑定的visual adapter
 // NdisQueryPacket自己定义,返回当前发送包的长度
NdisQueryPacket(Packet, NULL, NULL, NULL, &CurSendPktLen);  
 if(CurSendPktLen>MaxSendPktLen) MaxSendPktLen=CurSendPktLen;
//SendBuffer是不是发送缓存的标示符?和CurSendBuffer有什莫区别?
 if(SendBuffer!=NULL){
// 为什莫要+1500* SendPktListHead?SendPktListHead是什莫含义?
CurSendBuffer=SendBuffer+1500*SendPktListHead;
  SendMACHeader=(PMAC_HEADER)CurSendBuffer;// SendMACHeader什莫意思?
  SendIPHeader=(PIP_HEADER)(CurSendBuffer+MAC_HEADER_LEN);
  // CopyPacketToBuffer是不是把包的数据复制到CurSendBuffer所指的地址上?
CopiedLen=CopyPacketToBuffer(
     CurSendBuffer,
     Packet,
     0,
     MAC_HEADER_LEN  //+IP_HEADER_LEN /*这个参数不知道什莫意思啊?
     );
  if(SendMACHeader->ProtocolType==IP_PROTOCOL){
   CopiedLen = CopyPacketToBuffer(
     CurSendBuffer+MAC_HEADER_LEN,//+IP_HEADER_LEN,
     Packet,
     MAC_HEADER_LEN, //+IP_HEADER_LEN,
     CurSendPktLen-MAC_HEADER_LEN  //-IP_HEADER_LEN
     );
   switch( QueryAccessList(SendIPHeader,QUERY_SEND_PACKET,&sndkeyno) ){
   case PACKET_REFUSE :
    *Status=NDIS_STATUS_SUCCESS;
    return;
   case PACKET_CLEAR :
    break;
   case PACKET_MUD :
    CurSendPktLen = Encrypt_reg(
         (PUCHAR)SendIPHeader+IP_HEADER_LEN,
         CurSendPktLen-MAC_HEADER_LEN-IP_HEADER_LEN,
         sndkeyno
         );
    CurSendPktLen += (MAC_HEADER_LEN+IP_HEADER_LEN);
    Old_cksum = SendIPHeader->HeaderCRC;
    SendIPHeader->HeaderCRC = 0;
    SendIPHeader->LengthL = (CurSendPktLen-MAC_HEADER_LEN)&0xff;
    SendIPHeader->LengthU = ((CurSendPktLen-MAC_HEADER_LEN)&0xff00)>>8;
    New_cksum = In_cksum((PUCHAR)SendIPHeader,20);
    SendIPHeader->HeaderCRC = New_cksum;
    break;
   }
   NdisQueryPacket(SendPktList[SendPktListHead], NULL, NULL, &BUFFER, NULL);

   if(BUFFER!=NULL){
    NdisUnchainBufferAtBack( SendPktList[SendPktListHead],&BUFFER);
    NdisFreeBuffer(BUFFER);
   }
   NdisAllocateBuffer(
      &ReturnStatus,
      &BUFFER,
      SendBufferPoolHandle,
      CurSendBuffer, //VirtualAddress,
      CurSendPktLen   //Length
      );
   NdisChainBufferAtBack( SendPktList[SendPktListHead],BUFFER);
   SendPktList[SendPktListHead]->ProtocolReserved[0]=SendPktListHead;
   ReservedPkt[SendPktListHead]=Packet;
   NdisSendAddr( Status,
      NdisBindingHandle,
      SendPktList[SendPktListHead]
      );
   if(*Status!=NDIS_STATUS_SUCCESS){
    SendPktListHead++;
    if(SendPktListHead==MAX_SEND_PKT_LIST)
     SendPktListHead=0;
   }
   return;
  }
 }
forward:
 _asm pop edi
 _asm pop esi
 _asm pop ebx
 //_asm pop ebp
 _asm leave
 _asm jmp [NdisSendAddr]
}
// send 函数结束
代码中的注释是一些我的理解和一些不明白的地方,我认为主要是有几个变量的含义不明白如:
BindingAdapterInfo.CtrlActived
MaxSendPktLen
SendBuffer,CurSendBuffer
SendPktList
SendMACHeader,SendIPHeader
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-16 13:00
17的代码我没有仔细的看过,对你有用的也就是hook的流程,如果你不用hook的话也就没有太大的用处了。他的那个代码是做vpn的,不过和你们要设计的结构肯定是千差万别的,贴出来的那部分代码也就是让你能了解一些hook的流程,对你做vpn没有什么帮助的。
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-16 13:01
17的代码我没有仔细的看过,对你有用的也就是hook的流程,如果你不用hook的话也就没有太大的用处了。他的那个代码是做vpn的,不过和你们要设计的结构肯定是千差万别的,贴出来的那部分代码也就是让你能了解一些hook的流程,对你做vpn没有什么帮助的。而且那是17在97年的时候写的,vpn的发展和现在也不可同日而语。
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
taijun
驱动牛犊
驱动牛犊
  • 注册日期2003-10-08
  • 最后登录2005-01-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-10-16 13:10
谢谢斑竹了,看来还要在前进的道路上摸索!
游客

返回顶部