Subversion Repositories userdetect2

Rev

Rev 68 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. unit iphlp;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows;
  7.  
  8. const
  9.   MAX_INTERFACE_NAME_LEN = $100;
  10.   ERROR_SUCCESS = 0;
  11.   MAXLEN_IFDESCR = $100;
  12.   MAXLEN_PHYSADDR = 8;
  13.  
  14.   MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0 ;
  15.   MIB_IF_OPER_STATUS_UNREACHABLE = 1;
  16.   MIB_IF_OPER_STATUS_DISCONNECTED = 2;
  17.   MIB_IF_OPER_STATUS_CONNECTING = 3;
  18.   MIB_IF_OPER_STATUS_CONNECTED = 4;
  19.   MIB_IF_OPER_STATUS_OPERATIONAL = 5;
  20.  
  21.   MIB_IF_TYPE_OTHER = 1;
  22.   MIB_IF_TYPE_ETHERNET = 6;
  23.   MIB_IF_TYPE_TOKENRING = 9;
  24.   MIB_IF_TYPE_FDDI = 15;
  25.   MIB_IF_TYPE_PPP = 23;
  26.   MIB_IF_TYPE_LOOPBACK = 24;
  27.   MIB_IF_TYPE_SLIP = 28;
  28.  
  29.   MIB_IF_ADMIN_STATUS_UP = 1;
  30.   MIB_IF_ADMIN_STATUS_DOWN = 2;
  31.   MIB_IF_ADMIN_STATUS_TESTING = 3;
  32.  
  33. type
  34.   MIB_IFROW = Record
  35.     wszName: Array[0 .. (MAX_INTERFACE_NAME_LEN*2-1)] of char;
  36.     dwIndex: LongInt;
  37.     dwType: LongInt;
  38.     dwMtu: LongInt;
  39.     dwSpeed: LongInt;
  40.     dwPhysAddrLen: LongInt;
  41.     bPhysAddr: Array[0 .. (MAXLEN_PHYSADDR-1)] of Byte;
  42.     dwAdminStatus: LongInt;
  43.     dwOperStatus: LongInt;
  44.     dwLastChange: LongInt;
  45.     dwInOctets: LongInt;
  46.     dwInUcastPkts: LongInt;
  47.     dwInNUcastPkts: LongInt;
  48.     dwInDiscards: LongInt;
  49.     dwInErrors: LongInt;
  50.     dwInUnknownProtos: LongInt;
  51.     dwOutOctets: LongInt;
  52.     dwOutUcastPkts: LongInt;
  53.     dwOutNUcastPkts: LongInt;
  54.     dwOutDiscards: LongInt;
  55.     dwOutErrors: LongInt;
  56.     dwOutQLen: LongInt;
  57.     dwDescrLen: LongInt;
  58.     bDescr: Array[0 .. (MAXLEN_IFDESCR - 1)] of Char;
  59.   end;
  60.  
  61. const
  62.   MAX_HOSTNAME_LEN    = 128;
  63.   MAX_DOMAIN_NAME_LEN = 128;
  64.   MAX_SCOPE_ID_LEN    = 256;
  65.  
  66.   MAX_ADAPTER_NAME_LENGTH        = 256;
  67.   MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
  68.   MAX_ADAPTER_ADDRESS_LENGTH     = 8;
  69.  
  70.   IPHelper = 'iphlpapi.dll';
  71.  
  72. type
  73.   PIPAddressString = ^TIPAddressString;
  74.   PIPMaskString    = ^TIPAddressString;
  75.   TIPAddressString = record
  76.     _String: array[0..(4 * 4) - 1] of Char;
  77.   end;
  78.   TIPMaskString = TIPAddressString;
  79.   PIPAddrString = ^TIPAddrString;
  80.   TIPAddrString = packed record
  81.     Next: PIPAddrString;
  82.     IpAddress: TIPAddressString;
  83.     IpMask: TIPMaskString;
  84.     Context: DWORD;
  85.   end;
  86.   PFixedInfo = ^TFixedInfo;
  87.   TFixedInfo = packed record
  88.     HostName: array[0..MAX_HOSTNAME_LEN + 4 - 1] of Char;
  89.     DomainName: array[0..MAX_DOMAIN_NAME_LEN + 4 - 1] of Char;
  90.     CurrentDnsServer: PIPAddrString;
  91.     DnsServerList: TIPAddrString;
  92.     NodeType: UINT;
  93.     ScopeId: array[0..MAX_SCOPE_ID_LEN + 4 - 1] of Char;
  94.     EnableRouting,
  95.     EnableProxy,
  96.     EnableDns: UINT;
  97.   end;
  98.  
  99.   IP_ADDRESS_STRING = record
  100.     S: array [0..15] of Char;
  101.   end;
  102.   IP_MASK_STRING = IP_ADDRESS_STRING;
  103.   PIP_MASK_STRING = ^IP_MASK_STRING;
  104.  
  105.   PIP_ADDR_STRING = ^IP_ADDR_STRING;
  106.   IP_ADDR_STRING = record
  107.     Next: PIP_ADDR_STRING;
  108.     IpAddress: IP_ADDRESS_STRING;
  109.     IpMask: IP_MASK_STRING;
  110.     Context: DWORD;
  111.   end;
  112.  
  113.   PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
  114.   IP_ADAPTER_INFO = record
  115.     Next: PIP_ADAPTER_INFO;
  116.     ComboIndex: DWORD;
  117.     AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 3] of Char;
  118.     Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of Char;
  119.     AddressLength: UINT;
  120.     Address: array [0..MAX_ADAPTER_ADDRESS_LENGTH - 1] of BYTE;
  121.     Index: DWORD;
  122.     Type_: UINT;
  123.     DhcpEnabled: UINT;
  124.     CurrentIpAddress: PIP_ADDR_STRING;
  125.     IpAddressList: IP_ADDR_STRING;
  126.     GatewayList: IP_ADDR_STRING;
  127.     DhcpServer: IP_ADDR_STRING;
  128.     HaveWins: BOOL;
  129.     PrimaryWinsServer: IP_ADDR_STRING;
  130.     SecondaryWinsServer: IP_ADDR_STRING;
  131.     LeaseObtained: Cardinal;
  132.     LeaseExpires: Cardinal;
  133.   end;
  134.  
  135. function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO; pOutBufLen: PULONG): DWORD; stdcall;
  136. function GetNetworkParams(pFixedInfo: PFixedInfo; pOutBufLen: PULONG): DWORD; stdcall;
  137. function SendArp(DestIP, SrcIP: ULONG; pMacAddr: PULONG; PhyAddrLen: PULONG) : DWORD; stdcall;
  138. function GetIfTable(pIfTable: Pointer; var pdwSize: LongInt; bOrder: LongInt): LongInt; stdcall;
  139.  
  140. implementation
  141.  
  142. function GetAdaptersInfo; external IPHelper Name 'GetAdaptersInfo';
  143. function GetNetworkParams; external IPHelper Name 'GetNetworkParams';
  144. function SendArp; external IPHelper name 'SendARP';
  145. function GetIfTable; external IPHelper Name 'GetIfTable';
  146.  
  147. end.
  148.  
  149.