Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die GetIpAddrTable-Funktion ruft die Schnittstellen-zu-IPv4-Adresszuordnungstabelle ab.
Syntax
IPHLPAPI_DLL_LINKAGE DWORD GetIpAddrTable(
[out] PMIB_IPADDRTABLE pIpAddrTable,
[in, out] PULONG pdwSize,
[in] BOOL bOrder
);
Die Parameter
[out] pIpAddrTable
Ein Zeiger auf einen Puffer, der die Adresszuordnungstabelle "Schnittstelle zu IPv4" als MIB_IPADDRTABLE Struktur empfängt.
[in, out] pdwSize
Gibt bei eingaben die Größe in Byte des Puffers an, auf den der pIpAddrTable-Parameter verweist.
Wenn der Puffer bei der Ausgabe nicht groß genug ist, um die zurückgegebene Zuordnungstabelle zu enthalten, legt die Funktion diesen Parameter auf die erforderliche Puffergröße in Bytes fest.
[in] bOrder
Wenn dieser Parameter WAHR ist, wird die zurückgegebene Zuordnungstabelle nach IPv4-Adresse in aufsteigender Reihenfolge sortiert. Die Sortierung erfolgt in der Bytereihenfolge des Netzwerks. Beispielsweise kommt 10.0.0.255 unmittelbar vor 10.0.1.0.
Rückgabewert
Wenn die Funktion erfolgreich ist, wird der Rückgabewert NO_ERROR.
Wenn die Funktion fehlschlägt, ist der Rückgabewert einer der folgenden Fehlercodes.
| Rückgabecode | Description |
|---|---|
|
Der Puffer, auf den der pIpAddrTable-Parameter verweist, ist nicht groß genug. Die erforderliche Größe wird in der DWORD-Variablen zurückgegeben, auf die der pdwSize-Parameter verweist. |
|
Der parameter pdwSize ist NULL, oder GetIpAddrTable kann nicht in den Speicher geschrieben werden, auf den der pdwSize-Parameter verweist. |
|
Diese Funktion wird für das Betriebssystem, das im lokalen System verwendet wird, nicht unterstützt. |
|
Verwenden Sie FormatMessage , um die Nachrichtenzeichenfolge für den zurückgegebenen Fehler abzurufen. |
Bemerkungen
Die GetIpAddrTable-Funktion ruft die Zuordnungstabelle der Schnittstelle zu IPv4 auf einem lokalen Computer ab und gibt diese Informationen in einer MIB_IPADDRTABLE Struktur zurück.
Die von der GetIpAddrTable-Funktion zurückgegebenen IPv4-Adressen sind vom Status der Netzwerkschnittstellen auf einem lokalen Computer betroffen. Das manuelle Zurücksetzen einer Netzwerkschnittstellenkarte (Network Interface Card, NIC) und bestimmter PnP-Ereignisse kann dazu führen, dass eine IP-Adresse entfernt oder geändert wird.
Unter Windows Server 2003 und Windows XP sind die von der GetIpAddrTable-Funktion zurückgegebenen IPv4-Adressen ebenfalls betroffen, wenn die Medienerkennungsfunktion des TCP/IP-Stapels auf einem lokalen Computer durch Aufrufen der DisableMediaSense-Funktion deaktiviert wurde. Wenn die Medienerkennung deaktiviert wurde, gibt die GetIpAddrTable-Funktion möglicherweise IPv4-Adressen zurück, die mit getrennten Schnittstellen verknüpft sind. Diese Ipv4-Adressen für getrennte Schnittstellen sind nicht gültig für die Verwendung.
Unter Windows Server 2008 und Windows Vista sind die von der GetIpAddrTable-Funktion zurückgegebenen IPv4-Adressen nicht von der Medienerkennungsfunktion des TCP/IP-Stapels auf einem lokalen Computer betroffen. Die GetIpAddrTable-Funktion gibt nur gültige IPv4-Adressen zurück.
Die unter Windows XP verfügbare GetAdaptersAddresses-Funktion kann zum Abrufen von IPv6- und IPv4-Adressen und Schnittstelleninformationen verwendet werden.
Die MIB_IPADDRTABLE Struktur, die von der GetIpAddrTable-Funktion zurückgegeben wird, kann Abstand für die Ausrichtung zwischen dem dwNumEntries-Element und dem ersten MIB_IPADDRROW Arrayeintrag im Tabellenelement enthalten. Der Abstand für die Ausrichtung kann auch zwischen den MIB_IPADDRROW Arrayeinträgen im Tabellenelement vorhanden sein. Jeder Zugriff auf einen MIB_IPADDRROW Arrayeintrag sollte davon ausgehen, dass der Abstand vorhanden ist.
Im Für Windows Software Development Kit (SDK) veröffentlichten Microsoft Windows Software Development Kit (SDK) wurde die Organisation von Headerdateien geändert, und die MIB_IPADDRROW wird in der Headerdatei "Ipmib.h " nicht in der Headerdatei "Iprtrmib.h " definiert. Beachten Sie, dass die Headerdatei "Ipmib.h " automatisch in iprtrmib.h enthalten ist, die automatisch in der Headerdatei "Iphlpapi.h " enthalten ist. Die Headerdateien Ipmib.h und Iprtrmib.h sollten nie direkt verwendet werden.
Examples
Im folgenden Beispiel wird die IP-Adresstabelle abgerufen und dann einige Elemente der IP-Adresseinträge in der Tabelle gedruckt.
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iphlpapi.h>
#include <stdio.h>
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.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()
{
int i;
/* Variables used by GetIpAddrTable */
PMIB_IPADDRTABLE pIPAddrTable;
DWORD dwSize = 0;
DWORD dwRetVal = 0;
IN_ADDR IPAddr;
/* Variables used to return error message */
LPVOID lpMsgBuf;
// Before calling AddIPAddress we use GetIpAddrTable to get
// an adapter to which we can add the IP.
pIPAddrTable = (MIB_IPADDRTABLE *) MALLOC(sizeof (MIB_IPADDRTABLE));
if (pIPAddrTable) {
// Make an initial call to GetIpAddrTable to get the
// necessary size into the dwSize variable
if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) ==
ERROR_INSUFFICIENT_BUFFER) {
FREE(pIPAddrTable);
pIPAddrTable = (MIB_IPADDRTABLE *) MALLOC(dwSize);
}
if (pIPAddrTable == NULL) {
printf("Memory allocation failed for GetIpAddrTable\n");
exit(1);
}
}
// Make a second call to GetIpAddrTable to get the
// actual data we want
if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) {
printf("GetIpAddrTable failed with error %d\n", dwRetVal);
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwRetVal, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) & lpMsgBuf, 0, NULL)) {
printf("\tError: %s", lpMsgBuf);
LocalFree(lpMsgBuf);
}
exit(1);
}
printf("\tNum Entries: %ld\n", pIPAddrTable->dwNumEntries);
for (i=0; i < (int) pIPAddrTable->dwNumEntries; i++) {
printf("\n\tInterface Index[%d]:\t%ld\n", i, pIPAddrTable->table[i].dwIndex);
IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwAddr;
printf("\tIP Address[%d]: \t%s\n", i, inet_ntoa(IPAddr) );
IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwMask;
printf("\tSubnet Mask[%d]: \t%s\n", i, inet_ntoa(IPAddr) );
IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwBCastAddr;
printf("\tBroadCast[%d]: \t%s (%ld%)\n", i, inet_ntoa(IPAddr), pIPAddrTable->table[i].dwBCastAddr);
printf("\tReassembly size[%d]:\t%ld\n", i, pIPAddrTable->table[i].dwReasmSize);
printf("\tType and State[%d]:", i);
if (pIPAddrTable->table[i].wType & MIB_IPADDR_PRIMARY)
printf("\tPrimary IP Address");
if (pIPAddrTable->table[i].wType & MIB_IPADDR_DYNAMIC)
printf("\tDynamic IP Address");
if (pIPAddrTable->table[i].wType & MIB_IPADDR_DISCONNECTED)
printf("\tAddress is on disconnected interface");
if (pIPAddrTable->table[i].wType & MIB_IPADDR_DELETED)
printf("\tAddress is being deleted");
if (pIPAddrTable->table[i].wType & MIB_IPADDR_TRANSIENT)
printf("\tTransient address");
printf("\n");
}
if (pIPAddrTable) {
FREE(pIPAddrTable);
pIPAddrTable = NULL;
}
exit(0);
}
Anforderungen
| Anforderung | Wert |
|---|---|
| Mindestens unterstützter Client | Windows 2000 Professional [nur Desktop-Apps] |
| Mindestanforderungen für unterstützte Server | Windows 2000 Server [nur Desktop-Apps] |
| Zielplattform | Fenster |
| Header | iphlpapi.h |
| Library | Iphlpapi.lib |
| DLL | Iphlpapi.dll |