Funzione GetAdaptersInfo (iphlpapi.h)
La funzione GetAdaptersInfo recupera le informazioni sull'adattatore per il computer locale.
In Windows XP e versioni successive: Usare la funzione GetAdaptersAddresses anziché GetAdaptersInfo.
Sintassi
IPHLPAPI_DLL_LINKAGE ULONG GetAdaptersInfo(
[out] PIP_ADAPTER_INFO AdapterInfo,
[in, out] PULONG SizePointer
);
Parametri
[out] AdapterInfo
Puntatore a un buffer che riceve un elenco collegato di strutture IP_ADAPTER_INFO .
[in, out] SizePointer
Puntatore a una variabile ULONG che specifica le dimensioni del buffer a cui punta il parametro pAdapterInfo . Se questa dimensione non è sufficiente per contenere le informazioni sull'adattatore, GetAdaptersInfo inserisce questa variabile con le dimensioni necessarie e restituisce un codice di errore di ERROR_BUFFER_OVERFLOW.
Valore restituito
Se la funzione ha esito positivo, il valore restituito viene ERROR_SUCCESS (definito allo stesso valore di NO_ERROR).
Se la funzione ha esito negativo, il valore restituito è uno dei codici di errore seguenti.
Codice restituito | Descrizione |
---|---|
|
Il buffer per ricevere le informazioni sull'adattatore è troppo piccolo. Questo valore viene restituito se la dimensione del buffer indicata dal parametro pOutBufLen è troppo piccola per contenere le informazioni sull'adattatore o il parametro pAdapterInfo è un puntatore NULL . Quando viene restituito questo codice di errore, il parametro pOutBufLen punta alle dimensioni del buffer necessarie. |
|
Sono state recuperate informazioni sull'adattatore non valide. |
|
Uno dei parametri non è valido. Questo errore viene restituito se il parametro pOutBufLen è un puntatore NULL o il processo chiamante non ha accesso in lettura/scrittura alla memoria a cui punta pOutBufLen o il processo chiamante non ha accesso in scrittura alla memoria a cui punta il parametro pAdapterInfo . |
|
Nessuna informazione sull'adattatore per il computer locale. |
|
La funzione GetAdaptersInfo non è supportata dal sistema operativo in esecuzione nel computer locale. |
|
Se la funzione ha esito negativo, usare FormatMessage per ottenere la stringa del messaggio per l'errore restituito. |
Commenti
La funzione GetAdaptersInfo può recuperare informazioni solo per gli indirizzi IPv4.
Nelle versioni precedenti a Windows 10, l'ordine in cui le schede vengono visualizzate nell'elenco restituito da questa funzione può essere controllato dalla cartella Connessioni di rete: selezionare la voce di menu Impostazioni avanzate dal menu Avanzate. A partire da Windows 10, l'ordine non è specificato.
Le funzioni GetAdaptersInfo e GetInterfaceInfo non restituiscono informazioni sull'interfaccia di loopback IPv4. Le informazioni sull'interfaccia di loopback vengono restituite dalla funzione GetIpAddrTable .
In Windows XP e versioni successive: L'elenco di adattatori restituiti da GetAdaptersInfo include adattatori unidirezionali. Per generare un elenco di adattatori che possono inviare e ricevere dati, chiamare GetUniDirectionalAdapterInfo ed escludere gli adattatori restituiti dall'elenco restituito da GetAdaptersInfo.
Esempio
In questo esempio vengono recuperate le informazioni sull'adattatore e vengono stampate varie proprietà di ogni adattatore.
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "IPHLPAPI.lib")
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
/* Note: could also use malloc() and free() */
int __cdecl main()
{
/* Declare and initialize variables */
// 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, and gateway, and
// the primary and secondary WINS server for each adapter.
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;
UINT i;
/* variables used to print DHCP time info */
struct tm newtime;
char buffer[32];
errno_t error;
ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(sizeof (IP_ADAPTER_INFO));
if (pAdapterInfo == NULL) {
printf("Error allocating memory needed to call GetAdaptersinfo\n");
return 1;
}
// 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("\tComboIndex: \t%d\n", pAdapter->ComboIndex);
printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
printf("\tAdapter Addr: \t");
for (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("\tIndex: \t%d\n", pAdapter->Index);
printf("\tType: \t");
switch (pAdapter->Type) {
case MIB_IF_TYPE_OTHER:
printf("Other\n");
break;
case MIB_IF_TYPE_ETHERNET:
printf("Ethernet\n");
break;
case MIB_IF_TYPE_TOKENRING:
printf("Token Ring\n");
break;
case MIB_IF_TYPE_FDDI:
printf("FDDI\n");
break;
case MIB_IF_TYPE_PPP:
printf("PPP\n");
break;
case MIB_IF_TYPE_LOOPBACK:
printf("Loopback\n");
break;
case MIB_IF_TYPE_SLIP:
printf("Slip\n");
break;
default:
printf("Unknown type %ld\n", pAdapter->Type);
break;
}
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 DHCP Server: \t%s\n",
pAdapter->DhcpServer.IpAddress.String);
printf("\t Lease Obtained: ");
/* Display local time */
error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained);
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);
}
printf("\t Lease Expires: ");
error = _localtime32_s(&newtime, (__time32_t*) &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 Primary Wins Server: %s\n",
pAdapter->PrimaryWinsServer.IpAddress.String);
printf("\t Secondary Wins Server: %s\n",
pAdapter->SecondaryWinsServer.IpAddress.String);
} else
printf("\tHave Wins: No\n");
pAdapter = pAdapter->Next;
printf("\n");
}
} else {
printf("GetAdaptersInfo failed with error: %d\n", dwRetVal);
}
if (pAdapterInfo)
FREE(pAdapterInfo);
return 0;
}
Requisiti
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | iphlpapi.h |
Libreria | Iphlpapi.lib |
DLL | Iphlpapi.dll |
Vedi anche
Informazioni di riferimento sulle funzioni helper IP