DeleteIPAddress-Funktion (iphlpapi.h)
Die DeleteIPAddress-Funktion löscht eine IP-Adresse, die zuvor mithilfe von AddIPAddress hinzugefügt wurde.
Syntax
IPHLPAPI_DLL_LINKAGE DWORD DeleteIPAddress(
[in] ULONG NTEContext
);
Parameter
[in] NTEContext
Der NTE-Kontext (Net Table Entry) für die IP-Adresse. Dieser Kontext wurde durch den vorherigen Aufruf von AddIPAddress zurückgegeben.
Rückgabewert
Die Funktion gibt NO_ERROR (null) zurück, wenn die Funktion erfolgreich ist.
Wenn die Funktion fehlschlägt, ist der Rückgabewert einer der folgenden Fehlercodes.
Rückgabecode | Beschreibung |
---|---|
|
Der Zugriff wird verweigert. Dieser Fehler wird unter Windows Vista und Windows Server 2008 unter verschiedenen Bedingungen zurückgegeben, die folgendes umfassen: Dem Benutzer fehlen die erforderlichen Administratorrechte auf dem lokalen Computer, oder die Anwendung wird nicht in einer erweiterten Shell als integrierter Administrator (RunAs-Administrator) ausgeführt. |
|
Ein Eingabeparameter ist ungültig, es wurde keine Aktion ausgeführt. |
|
Der IPv4-Transport ist auf dem lokalen Computer nicht konfiguriert. |
|
Verwenden Sie FormatMessage , um die Nachrichtenzeichenfolge für den zurückgegebenen Fehler abzurufen. |
Hinweise
Unter Windows Vista und höher kann die DeleteIPAddress-Funktion nur von einem Benutzer aufgerufen werden, der sich als Mitglied der Gruppe Administratoren angemeldet hat. Wenn DeleteIPAddress von einem Benutzer aufgerufen wird, der kein Mitglied der Gruppe Administratoren ist, schlägt der Funktionsaufruf fehl, und ERROR_ACCESS_DENIED wird zurückgegeben. Diese Funktion kann auch aufgrund der Benutzerkontensteuerung (User Account Control, UAC) unter Windows Vista und höher fehlschlagen. Wenn eine Anwendung, die diese Funktion enthält, von einem Benutzer ausgeführt wird, der nicht als mitglied der Gruppe Administratoren als der integrierte Administrator angemeldet ist, schlägt dieser Aufruf fehl, es sei denn, die Anwendung wurde in der Manifestdatei mit einem requestedExecutionLevel-Wert gekennzeichnet, der auf requireAdministrator festgelegt ist. Wenn für die Anwendung unter Windows Vista und später diese Manifestdatei fehlt, muss ein Benutzer, der sich als mitglied der Gruppe Administratoren angemeldet hat, nicht der integrierte Administrator, die Anwendung dann in einer erweiterten Shell als integrierter Administrator (RunAs-Administrator) ausführen, damit diese Funktion erfolgreich ist.
Beispiele
Im folgenden Beispiel wird die IP-Adresstabelle abgerufen und dann dem ersten Adapter die IP-Adresse 192.168.0.27 hinzugefügt. Die hinzugefügte IP-Adresse wird dann gelöscht.
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
int main()
{
// Declare and initialize variables
PMIB_IPADDRTABLE pIPAddrTable;
DWORD dwSize = 0;
DWORD dwRetVal;
// IP and mask we will be adding
UINT iaIPAddress;
UINT imIPMask;
// Variables where handles to the added IP will be returned
ULONG NTEContext = 0;
ULONG NTEInstance = 0;
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));
// Make an initial call to GetIpAddrTable to get the
// necessary size into the dwSize variable
if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) {
GlobalFree(pIPAddrTable);
pIPAddrTable = (MIB_IPADDRTABLE *) malloc(dwSize);
}
// Make a second call to GetIpAddrTable to get the
// actual data we want
if ((dwRetVal = GetIpAddrTable(pIPAddrTable, &dwSize, 0)) == NO_ERROR) {
printf("\tAddress: %ld\n", pIPAddrTable->table[0].dwAddr);
printf("\tMask: %ld\n", pIPAddrTable->table[0].dwMask);
printf("\tIndex: %ld\n", pIPAddrTable->table[0].dwIndex);
printf("\tBCast: %ld\n", pIPAddrTable->table[0].dwBCastAddr);
printf("\tReasm: %ld\n", pIPAddrTable->table[0].dwReasmSize);
} else {
printf("Call to GetIpAddrTable failed.\n");
}
// IP and mask we will be adding
iaIPAddress = inet_addr("192.168.0.27");
imIPMask = inet_addr("255.255.255.0");
if ((dwRetVal = AddIPAddress(iaIPAddress,
imIPMask,
pIPAddrTable->table[0].dwIndex,
&NTEContext, &NTEInstance)) == NO_ERROR) {
printf("\tIP address added.\n");
}
else {
printf("Error adding IP address.\n");
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);
}
// Delete the IP we just added using the NTEContext
// variable where the handle was returned
if ((dwRetVal = DeleteIPAddress(NTEContext)) == NO_ERROR) {
printf("\tIP Address Deleted.\n");
} else {
printf("\tCall to DeleteIPAddress failed.\n");
}
exit(0);
Anforderungen
Unterstützte Mindestversion (Client) | Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | iphlpapi.h |
Bibliothek | Iphlpapi.lib |
DLL | Iphlpapi.dll |