Поделиться через


Получение сведений с помощью GetNetworkParams

Функция GetNetworkParams заполняет указатель на структуру FIXED_INFO с данными о текущих параметрах сети.

Чтобы использовать getNetworkParams

  1. Объявите указатель на объект FIXED_INFO с именем pFixedInfo, а объект ULONG с именем ulOutBufLen. Эти переменные передаются в качестве параметров функции GetNetworkParams. Кроме того, создайте переменную DWORDdwRet Val (используется для проверки ошибок).

        FIXED_INFO *pFixedInfo;
        IP_ADDR_STRING *pIPAddr;
    
        ULONG ulOutBufLen;
        DWORD dwRetVal;
    
  2. Выделите память для структур.

    Заметка

    Размер ulOutBufLen недостаточно для хранения информации. См. следующий шаг.

     

        pFixedInfo = (FIXED_INFO *) malloc(sizeof (FIXED_INFO));
        ulOutBufLen = sizeof (FIXED_INFO);
    
  3. Выполните первоначальный вызов GetNetworkParams, чтобы получить размер, необходимый для переменной ulOutBufLen.

    Заметка

    Эта функция не выполнится, поскольку она используется для того, чтобы переменная ulOutBufLen указала достаточный размер для хранения всей информации, возвращаемой в pFixedInfo. Это общая модель программирования для структур данных и функций этого типа.

     

        if (GetNetworkParams(pFixedInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
            free(pFixedInfo);
            pFixedInfo = (FIXED_INFO *) malloc(ulOutBufLen);
            if (pFixedInfo == NULL) {
                printf("Error allocating memory needed to call GetNetworkParams\n");
            }
        }
    
  4. Выполните второй вызов GetNetworkParams с помощью общей проверки на ошибки и возвращения значения в переменную DWORD DWORD dwRetVal; которая используется для более продвинутой проверки ошибок.

        if (dwRetVal = GetNetworkParams(pFixedInfo, &ulOutBufLen) != NO_ERROR) {
            printf("GetNetworkParams failed with error %d\n", dwRetVal);
            if (pFixedInfo) {
                free(pFixedInfo);
            }
        }        
    
  5. Если вызов выполнен успешно, перейдите к данным из структуры данных pFixedInfo.

            printf("\tHost Name: %s\n", pFixedInfo->HostName);
            printf("\tDomain Name: %s\n", pFixedInfo->DomainName);
            printf("\tDNS Servers:\n");
            printf("\t\t%s\n", pFixedInfo->DnsServerList.IpAddress.String);
    
            pIPAddr = pFixedInfo->DnsServerList.Next;
            while (pIPAddr) {
                printf("\t\t%s\n", pIPAddr->IpAddress.String);
                pIPAddr = pIPAddr->Next;
            }
    
            printf("\tNode Type: ");
            switch (pFixedInfo->NodeType) {
            case 1:
                printf("%s\n", "Broadcast");
                break;
            case 2:
                printf("%s\n", "Peer to peer");
                break;
            case 4:
                printf("%s\n", "Mixed");
                break;
            case 8:
                printf("%s\n", "Hybrid");
                break;
            default:
                printf("\n");
            }
    
            printf("\tNetBIOS Scope ID: %s\n", pFixedInfo->ScopeId);
    
            if (pFixedInfo->EnableRouting)
                printf("\tIP Routing Enabled: Yes\n");
            else
                printf("\tIP Routing Enabled: No\n");
    
            if (pFixedInfo->EnableProxy)
                printf("\tWINS Proxy Enabled: Yes\n");
            else
                printf("\tWINS Proxy Enabled: No\n");
    
            if (pFixedInfo->EnableDns)
                printf("\tNetBIOS Resolution Uses DNS: Yes\n");
            else
                printf("\tNetBIOS Resolution Uses DNS: No\n");
    
  6. Освобождает любую память, выделенную для структуры pFixedInfo.

        if (pFixedInfo) {
            free(pFixedInfo);
            pFixedInfo = NULL;
        }
    

Следующий шаг: управление сетевыми адаптерами с помощью GetAdaptersInfo

Предыдущий шаг: создание базового вспомогательного IP-приложения