Récupération d’informations à l’aide de GetNetworkParams
La fonction GetNetworkParams remplit un pointeur vers une structure FIXED_INFO avec des données sur les paramètres réseau actuels.
Pour utiliser GetNetworkParams
Déclarez un pointeur vers un objet FIXED_INFO appelé pFixedInfo et un objet ULONG appelé ulOutBufLen. Ces variables sont passées en tant que paramètres à la fonction GetNetworkParams . Créez également une variable DWORD dwRetVal (utilisée pour la vérification des erreurs).
FIXED_INFO *pFixedInfo; IP_ADDR_STRING *pIPAddr; ULONG ulOutBufLen; DWORD dwRetVal;
Allouez de la mémoire pour les structures.
Notes
La taille de ulOutBufLen n’est pas suffisante pour contenir les informations. Consultez l’étape suivante.
pFixedInfo = (FIXED_INFO *) malloc(sizeof (FIXED_INFO)); ulOutBufLen = sizeof (FIXED_INFO);
Effectuez un appel initial à GetNetworkParams pour obtenir la taille requise pour la variable ulOutBufLen .
Notes
Cette fonction de fonction échoue et est utilisée pour garantir que la variable ulOutBufLen spécifie une taille suffisante pour contenir toutes les données retournées à pFixedInfo. Il s’agit d’un modèle de programmation courant pour les structures de données et les fonctions de ce type.
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"); } }
Effectuez un deuxième appel à GetNetworkParams en utilisant la vérification générale des erreurs et en retournant sa valeur à la variable DWORD dwRetVal ; utilisé pour la vérification des erreurs plus avancée.
if (dwRetVal = GetNetworkParams(pFixedInfo, &ulOutBufLen) != NO_ERROR) { printf("GetNetworkParams failed with error %d\n", dwRetVal); if (pFixedInfo) { free(pFixedInfo); } }
Si l’appel a réussi, accédez aux données à partir de la structure de données 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");
Libérez toute la mémoire allouée pour la structure pFixedInfo .
if (pFixedInfo) { free(pFixedInfo); pFixedInfo = NULL; }
Étape suivante : Gestion des cartes réseau à l’aide de GetAdaptersInfo
Étape précédente : Création d’une application d’assistance IP de base