IP_ADAPTER_INFO-Struktur (iptypes.h)
Die IP_ADAPTER_INFO-Struktur enthält Informationen zu einem bestimmten Netzwerkadapter auf dem lokalen Computer.
Syntax
typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO *Next;
DWORD ComboIndex;
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
DWORD Index;
UINT Type;
UINT DhcpEnabled;
PIP_ADDR_STRING CurrentIpAddress;
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
Members
Next
Typ: Struktur _IP_ADAPTER_INFO*
Ein Zeiger auf den nächsten Adapter in der Liste der Adapter.
ComboIndex
Art: DWORD
Reserviert.
AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]
Typ: char[MAX_ADAPTER_NAME_LENGTH + 4]
Eine ANSI-Zeichenfolge des Namens des Adapters.
Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]
Typ: char[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]
Eine ANSI-Zeichenfolge, die die Beschreibung des Adapters enthält.
AddressLength
Typ: UINT
Die Länge der Hardwareadresse für den Adapter in Bytes.
Address[MAX_ADAPTER_ADDRESS_LENGTH]
Typ: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]
Die Hardwareadresse für den Adapter, der als BYTE-Array dargestellt wird.
Index
Art: DWORD
Der Adapterindex.
Der Adapterindex kann sich ändern, wenn ein Adapter deaktiviert und dann aktiviert wird, oder unter anderen Umständen, und er sollte nicht als persistent betrachtet werden.
Type
Typ: UINT
Der Adaptertyp. Mögliche Werte für den Adaptertyp sind in der Headerdatei Ipifcons.h aufgeführt.
In der folgenden Tabelle sind allgemeine Werte für den Adaptertyp aufgeführt, obwohl andere Werte unter Windows Vista und höher möglich sind.
DhcpEnabled
Typ: UINT
Ein Optionswert, der angibt, ob das Dynamic Host Configuration Protocol (DHCP) für diesen Adapter aktiviert ist.
CurrentIpAddress
Typ: PIP_ADDR_STRING
Reserviert.
IpAddressList
Typ: IP_ADDR_STRING
Die Liste der IPv4-Adressen, die diesem Adapter zugeordnet sind, wird als verknüpfte Liste von IP_ADDR_STRING-Strukturen dargestellt. Einem Adapter können mehrere IPv4-Adressen zugewiesen sein.
GatewayList
Typ: IP_ADDR_STRING
Die IPv4-Adresse des Gateways für diesen Adapter, dargestellt als verknüpfte Liste von IP_ADDR_STRING Strukturen. Einem Adapter können mehrere IPv4-Gatewayadressen zugewiesen sein. Diese Liste enthält in der Regel einen einzelnen Eintrag für die IPv4-Adresse des Standardgateways für diesen Adapter.
DhcpServer
Typ: IP_ADDR_STRING
Die IPv4-Adresse des DHCP-Servers für diesen Adapter, die als verknüpfte Liste von IP_ADDR_STRING-Strukturen dargestellt wird. Diese Liste enthält einen einzelnen Eintrag für die IPv4-Adresse des DHCP-Servers für diesen Adapter. Der Wert 255.255.255.255 gibt an, dass der DHCP-Server nicht erreicht werden konnte oder gerade erreicht wird.
Dieser Member ist nur gültig, wenn das DhcpEnabled-Element ungleich null ist.
HaveWins
Typ: BOOL
Ein Optionswert, der angibt, ob dieser Adapter den Windows Internet Name Service (WINS) verwendet.
PrimaryWinsServer
Typ: IP_ADDR_STRING
Die IPv4-Adresse des primären WINS-Servers, der als verknüpfte Liste von IP_ADDR_STRING-Strukturen dargestellt wird. Diese Liste enthält einen einzelnen Eintrag für die IPv4-Adresse des primären WINS-Servers für diesen Adapter.
Dieser Member ist nur gültig, wenn das HaveWins-ElementTRUE ist.
SecondaryWinsServer
Typ: IP_ADDR_STRING
Die IPv4-Adresse des sekundären WINS-Servers, der als verknüpfte Liste von IP_ADDR_STRING Strukturen dargestellt wird. Einem Adapter können mehrere sekundäre WINS-Serveradressen zugewiesen sein.
Dieser Member ist nur gültig, wenn das HaveWins-ElementTRUE ist.
LeaseObtained
Typ: time_t
Der Zeitpunkt, zu dem die aktuelle DHCP-Lease abgerufen wurde.
Dieser Member ist nur gültig, wenn das DhcpEnabled-Element ungleich null ist.
LeaseExpires
Typ: time_t
Der Zeitpunkt, zu dem die aktuelle DHCP-Lease abläuft.
Dieser Member ist nur gültig, wenn das DhcpEnabled-Element ungleich null ist.
Hinweise
Die IP_ADAPTER_INFO-Struktur ist auf IPv4-Informationen zu einem bestimmten Netzwerkadapter auf dem lokalen Computer beschränkt. Die IP_ADAPTER_INFO-Struktur wird durch Aufrufen der GetAdaptersInfo-Funktion abgerufen.
Bei Verwendung von Visual Studio 2005 und höher wird der time_t Datentyp standardmäßig auf einen 8-Byte-Datentyp festgelegt, nicht auf den 4-Byte-Datentyp, der für die LeaseObtained - und LeaseExpires-Member auf einer 32-Bit-Plattform verwendet wird. Um die IP_ADAPTER_INFO-Struktur auf einer 32-Bit-Plattform ordnungsgemäß zu verwenden, definieren Sie _USE_32BIT_TIME_T (z. B. als Option verwenden -D _USE_32BIT_TIME_T
), wenn Sie die Anwendung kompilieren, um den Datentyp time_t zu einem 4-Byte-Datentyp zu erzwingen.
Für die Verwendung unter Windows XP und höher enthält die IP_ADAPTER_ADDRESSES-Struktur sowohl IPv4- als auch IPv6-Informationen. Die GetAdaptersAddresses-Funktion ruft IPv4- und IPv6-Adapterinformationen ab.
Beispiele
In diesem Beispiel werden die Adapterinformationen abgerufen und verschiedene Eigenschaften der einzelnen Adapter ausgegeben.
#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("Lookback\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;
}
Anforderungen
Unterstützte Mindestversion (Client) | Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows 2000 Server [nur Desktop-Apps] |
Kopfzeile | iptypes.h (include Iphlpapi.h) |