Retrieving Information Using GetNetworkParams

The GetNetworkParams function fills a pointer to a FIXED_INFO structure with data about the current network settings.

To use GetNetworkParams

  1. Declare a pointer to a FIXED_INFO object called pFixedInfo, and a ULONG object called ulOutBufLen. These variables are passed as parameters to the GetNetworkParams function. Also create a DWORD variable dwRetVal (used for error checking).

        FIXED_INFO *pFixedInfo;
        IP_ADDR_STRING *pIPAddr;
        ULONG ulOutBufLen;
        DWORD dwRetVal;
  2. Allocate memory for the structures.


    The size of ulOutBufLen is not sufficient to hold the information. See the next step.


        pFixedInfo = (FIXED_INFO *) malloc(sizeof (FIXED_INFO));
        ulOutBufLen = sizeof (FIXED_INFO);
  3. Make an initial call to GetNetworkParams to get the size required for the ulOutBufLen variable.


    This function function will fail, and is used to ensure that the ulOutBufLen variable specifies a size sufficient for holding all the data returned to pFixedInfo. This is a common programming model for data structures and functions of this type.


        if (GetNetworkParams(pFixedInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
            pFixedInfo = (FIXED_INFO *) malloc(ulOutBufLen);
            if (pFixedInfo == NULL) {
                printf("Error allocating memory needed to call GetNetworkParams\n");
  4. Make a second call to GetNetworkParams using general error checking and returning its value to the DWORD variable dwRetVal; used for more advanced error checking.

        if (dwRetVal = GetNetworkParams(pFixedInfo, &ulOutBufLen) != NO_ERROR) {
            printf("GetNetworkParams failed with error %d\n", dwRetVal);
            if (pFixedInfo) {
  5. If the call was successful, access the data from the pFixedInfo data structure.

            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");
            case 2:
                printf("%s\n", "Peer to peer");
            case 4:
                printf("%s\n", "Mixed");
            case 8:
                printf("%s\n", "Hybrid");
            printf("\tNetBIOS Scope ID: %s\n", pFixedInfo->ScopeId);
            if (pFixedInfo->EnableRouting)
                printf("\tIP Routing Enabled: Yes\n");
                printf("\tIP Routing Enabled: No\n");
            if (pFixedInfo->EnableProxy)
                printf("\tWINS Proxy Enabled: Yes\n");
                printf("\tWINS Proxy Enabled: No\n");
            if (pFixedInfo->EnableDns)
                printf("\tNetBIOS Resolution Uses DNS: Yes\n");
                printf("\tNetBIOS Resolution Uses DNS: No\n");
  6. Free any memory allocated for the pFixedInfo structure.

        if (pFixedInfo) {
            pFixedInfo = NULL;

Next Step: Managing Network Adapters Using GetAdaptersInfo

Previous Step: Creating a Basic IP Helper Application