2009-11-04 12 views

cevap

8

Bu kod çalışması gerekir: Yalnızca IPhelper API master gereken

{ 
    ULONG outBufLen = 0; 
    DWORD dwRetVal = 0; 
    IP_ADAPTER_INFO* pAdapterInfos = (IP_ADAPTER_INFO*) malloc(sizeof(IP_ADAPTER_INFO)); 

    // retry up to 5 times, to get the adapter infos needed 
    for(int i = 0; i < 5 && (dwRetVal == ERROR_BUFFER_OVERFLOW || dwRetVal == NO_ERROR); ++i) 
    { 
     dwRetVal = GetAdaptersInfo(pAdapterInfos, &outBufLen); 
     if(dwRetVal == NO_ERROR) 
     { 
      break; 
     } 
     else if(dwRetVal == ERROR_BUFFER_OVERFLOW) 
     { 
      free(pAdapterInfos); 
      pAdapterInfos = (IP_ADAPTER_INFO*) malloc(outBufLen); 
     } 
     else 
     { 
      pAdapterInfos = 0; 
      break; 
     } 
    } 
    if(dwRetVal == NO_ERROR) 
    { 
     IP_ADAPTER_INFO* pAdapterInfo = pAdapterInfos; 
     while(pAdapterInfo) 
     { 
      IP_ADDR_STRING* pIpAddress = &(pAdapterInfo->IpAddressList); 
      while(pIpAddress != 0) 
      { 
          // 
          // <<<< 
          // here pAdapterInfo->Address should contain the MAC address 
          // >>>> 
          // 

       pIpAddress = pIpAddress->Next; 
      } 
      pAdapterInfo = pAdapterInfo->Next; 
     } 
    } 
    free(pAdapterInfos); 
    return false; 
} 
+0

Neden pAdapterInfos yığın yerine mallock kullanarak ayırıyor? – user626528

+1

Arabellek daha büyük olduğundan, yalnızca bu bir yapı. Döngü, boyut parametresini günceller. – Christopher

+0

(Evet, bu cevabın eski olduğunu biliyorum.) Bu kodun bit ve parçaları açıklayan birkaç yorumdan ziyade, düzyazılarda nasıl işlediğini açıklayabilir misiniz? –

4

... Bu örnekler sadece ne gerek yapmakla get you started bir bağlantı vardır.

İlgili konular