Abrufen von Informationen mithilfe von GetNetworkParams
Die GetNetworkParams-Funktion füllt einen Zeiger auf eine FIXED_INFO-Struktur mit Daten zu den aktuellen Netzwerkeinstellungen aus.
So verwenden Sie GetNetworkParams
Deklarieren Sie einen Zeiger auf ein FIXED_INFO-Objekt namens pFixedInfo und ein ULONG-Objekt namens ulOutBufLen. Diese Variablen werden als Parameter an die GetNetworkParams-Funktion übergeben. Erstellen Sie auch eine DWORD-VariabledwRetVal (wird für die Fehlerüberprüfung verwendet).
FIXED_INFO *pFixedInfo; IP_ADDR_STRING *pIPAddr; ULONG ulOutBufLen; DWORD dwRetVal;
Zuordnen von Arbeitsspeicher für die Strukturen.
Hinweis
Die Größe von ulOutBufLen reicht nicht aus, um die Informationen zu enthalten. Mehr dazu finden Sie im nächsten Schritt.
pFixedInfo = (FIXED_INFO *) malloc(sizeof (FIXED_INFO)); ulOutBufLen = sizeof (FIXED_INFO);
Führen Sie einen ersten Aufruf von GetNetworkParams durch, um die für die ulOutBufLen-Variable erforderliche Größe zu erhalten.
Hinweis
Diese Funktionsfunktion schlägt fehl und wird verwendet, um sicherzustellen, dass die UlOutBufLen-Variable eine Größe angibt, die ausreicht, um alle an pFixedInfo zurückgegebenen Daten zu speichern. Dies ist ein gängiges Programmiermodell für Datenstrukturen und Funktionen dieses Typs.
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"); } }
Führen Sie einen zweiten Aufruf von GetNetworkParams durch, indem Sie die allgemeine Fehlerüberprüfung verwenden und ihren Wert an die DWORD-VariabledwRetVal zurückgeben. wird für eine erweiterte Fehlerüberprüfung verwendet.
if (dwRetVal = GetNetworkParams(pFixedInfo, &ulOutBufLen) != NO_ERROR) { printf("GetNetworkParams failed with error %d\n", dwRetVal); if (pFixedInfo) { free(pFixedInfo); } }
Wenn der Aufruf erfolgreich war, greifen Sie auf die Daten aus der pFixedInfo-Datenstruktur zu.
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");
Geben Sie den für die pFixedInfo-Struktur zugewiesenen Arbeitsspeicher frei.
if (pFixedInfo) { free(pFixedInfo); pFixedInfo = NULL; }
Nächster Schritt: Verwalten von Netzwerkadaptern mithilfe von GetAdaptersInfo
Vorheriger Schritt: Erstellen einer einfachen IP-Hilfsanwendung