首页
社区
课程
招聘
[求助]GetAdaptersInfo MSDN例子有异常
发表于: 2011-8-17 21:59 7816

[求助]GetAdaptersInfo MSDN例子有异常

2011-8-17 21:59
7816

GetAdaptersInfo   得到网卡信息
MSDN上面这个函数有个实例。我朋友机器总是在下面那句出现异常
但是我公司机器和我的机器都不会出现问题。 不知道为什么?

if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {

MSDN 上面完整 例子 我也贴这里吧:

//-----------------------------------------------------------------------------

// It is possible for an adapter to have multiple
// IPv4 addresses, gateways, and secondary WINS servers
// assigned to the adapter.
// Note that this sample code only prints out the
// first entry for the IP address/mask, gateway,
// and secondary WINS server for each adapter.

PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;

/* variables used to print DHCP time info */
struct tm newtime;
char buffer[32];   
errno_t error;

pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);

// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
  free(pAdapterInfo);
  pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);
  if (pAdapterInfo == NULL) {
    printf("Error allocating memory needed to call GetAdaptersinfo\n");
    return 1;
}

if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
  pAdapter = pAdapterInfo;
  while (pAdapter) {
    printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
    printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
    printf("\tAdapter Addr: \t");
    for (UINT i = 0; i < pAdapter->AddressLength; i++) {
      if (i == (pAdapter->AddressLength - 1))
         printf("%.2X\n",(int)pAdapter->Address[i]);
      else
        printf("%.2X-",(int)pAdapter->Address[i]);
    }
    printf("\tIP Address: \t%s\n", pAdapter->IpAddressList.IpAddress.String);
    printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);

    printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
    printf("\t***\n");

    if (pAdapter->DhcpEnabled) {
      printf("\tDHCP Enabled: Yes\n");
      printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String);

      printf("\tLease Obtained: ");
      /* Display local time */
      error = _localtime32_s(&newtime, &pAdapter->LeaseObtained);
      if (error)
        printf("\tInvalid Argument to _localtime32_s\n");
      else {
        // Convert to an ASCII representation
        error = asctime_s(buffer, 32, &newtime);
        if (error)
          printf("Invalid Argument to asctime_s\n");
        else
          /* asctime_s returns the string terminated by \n\0 */
          printf("%s", buffer);
      }

      printf("\tLease Expires:  ");
      error = _localtime32_s(&newtime, &pAdapter->LeaseExpires);
      if (error)
        printf("Invalid Argument to _localtime32_s\n");
      else {
        // Convert to an ASCII representation
        error = asctime_s(buffer, 32, &newtime);
        if (error)
          printf("Invalid Argument to asctime_s\n");
        else  
          /* asctime_s returns the string terminated by \n\0 */
          printf("%s", buffer);
      }
    }
    else
      printf("\tDHCP Enabled: No\n");
   
    if (pAdapter->HaveWins) {
      printf("\tHave Wins: Yes\n");
      printf("\t\tPrimary Wins Server: \t%s\n", pAdapter->PrimaryWinsServer.IpAddress.String);
      printf("\t\tSecondary Wins Server: \t%s\n", pAdapter->SecondaryWinsServer.IpAddress.String);
    }
    else
      printf("\tHave Wins: No\n");
    pAdapter = pAdapter->Next;
  }
}
else {
  printf("GetAdaptersInfo failed with error: %d\n", dwRetVal);

if (pAdapterInfo)
  free(pAdapterInfo);
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 212
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
能把出错信息贴出来下不??

是不是网卡太多个了
2011-8-17 22:09
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
回楼上的  我的机器才是多个网卡 但是朋友的不是

不过问题找到了    我问的问题说是异常是笔误  对不起大家了

问题是微软MSDN例子中下面一段  最下面少了个括号

        ULONG  ulTmp = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen);
        if ( ulTmp == ERROR_BUFFER_OVERFLOW)
        {
                DBGS("测试问题 KAISHI22222222223333333333333333");
                free(pAdapterInfo);
                DBGS("测试问题 KA44444444444444444");
                pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);
DBGS("测试问题 KAISHI111111");
                if (pAdapterInfo == NULL) {
                        DBGS("Error allocating memory needed to call GetAdaptersinfo\n");
                        return 1;
                }
        }    //搽  MSDN  这里少了个  括号  这里这里
2011-8-17 22:26
0
雪    币: 212
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
介个,介个,我...石化了
2011-8-17 22:30
0
雪    币: 1489
活跃值: (993)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
这种编码风格不好,匹配的括号都不好看.
2011-8-17 23:31
0
游客
登录 | 注册 方可回帖
返回
//