Bagikan melalui


Fungsi DeleteIpForwardEntry (iphlpapi.h)

Fungsi DeleteIpForwardEntry menghapus rute yang ada di tabel perutean IPv4 komputer lokal.

Sintaks

IPHLPAPI_DLL_LINKAGE DWORD DeleteIpForwardEntry(
  [in] PMIB_IPFORWARDROW pRoute
);

Parameter

[in] pRoute

Penunjuk ke struktur MIB_IPFORWARDROW . Struktur ini menentukan informasi yang mengidentifikasi rute yang akan dihapus. Pemanggil harus menentukan nilai untuk anggota struktur dwForwardIfIndex, dwForwardDest, dwForwardMask, dwForwardNextHop, dan dwForwardProto .

Nilai kembali

Fungsi mengembalikan NO_ERROR (nol) jika rutinitas berhasil.

Jika fungsi gagal, nilai yang dikembalikan adalah salah satu kode kesalahan berikut.

Kode kesalahan Makna
ERROR_ACCESS_DENIED
Akses ditolak. Kesalahan ini dikembalikan pada Windows Vista dan Windows Server 2008 dalam beberapa kondisi yang mencakup hal berikut: pengguna tidak memiliki hak administratif yang diperlukan di komputer lokal atau aplikasi tidak berjalan dalam shell yang ditingkatkan sebagai Administrator bawaan (administrator RunAs).
ERROR_INVALID_PARAMETER
Parameter input tidak valid, tidak ada tindakan yang diambil. Kesalahan ini dikembalikan jika parameter pRoute adalah NULL, anggota dwForwardMask dari struktur PMIB_IPFORWARDROW bukan subnet mask IPv4 yang valid, anggota dwForwardIfIndex adalah NULL, atau salah satu anggota lain dari struktur MIB_IPFORWARDROW tidak valid.
ERROR_NOT_FOUND
Parameter pRoute menunjuk ke entri rute yang tidak ada.
ERROR_NOT_SUPPORTED
Transportasi IPv4 tidak dikonfigurasi pada komputer lokal.
(lainnya)
Fungsi ini dapat mengembalikan kode kesalahan lainnya.
 

Jika fungsi gagal, gunakan FormatMessage untuk mendapatkan string pesan untuk kesalahan yang dikembalikan.

Keterangan

Anggota dwForwardProto dari MIB_IPFORWARDROW penunjuk struktur ke oleh parameter rute harus diatur ke MIB_IPPROTO_NETMGMT jika tidak , DeleteIpForwardEntry akan gagal. Pengidentifikasi protokol perutean digunakan untuk mengidentifikasi informasi rute untuk protokol perutean yang ditentukan. Misalnya, MIB_IPPROTO_NETMGMT digunakan untuk mengidentifikasi informasi rute untuk perutean IP yang diatur melalui manajemen jaringan seperti Dynamic Host Configuration Protocol (DHCP), Simple Network Management Protocol (SNMP), atau dengan panggilan ke fungsi CreateIpForwardEntry, DeleteIpForwardEntry , atau SetIpForwardEntry .

Pada Windows Vista dan Windows Server 2008, DeleteIpForwardEntry hanya berfungsi pada antarmuka dengan satu sub-antarmuka (di mana ANTARMUKA LUID dan sub-antarmuka LUID sama). Anggota dwForwardIfIndex dari struktur MIB_IPFORWARDROW menentukan antarmuka.

Sejumlah anggota struktur MIB_IPFORWARDROW yang diarahkan oleh parameter rute saat ini tidak digunakan oleh CreateIpForwardEntry. Anggota ini termasuk dwForwardPolicy, dwForwardType, dwForwardAge, dwForwardNextHopAS, dwForwardMetric1, dwForwardMetric2, dwForwardMetric3, dwForwardMetric4, dan dwForwardMetric5.

Untuk mengubah rute yang ada dalam tabel perutean IPv4, gunakan fungsi SetIpForwardEntry . Untuk mengambil tabel perutean IPv4, panggil fungsi GetIpForwardTable .

Pada Windows Vista dan yang lebih baru, fungsi DeleteIpForwardEntry hanya dapat dipanggil oleh pengguna yang masuk sebagai anggota grup Administrator. Jika DeleteIpForwardEntry dipanggil oleh pengguna yang bukan anggota grup Administrator, panggilan fungsi akan gagal dan ERROR_ACCESS_DENIED dikembalikan.

Fungsi DeleteIpForwardEntry juga dapat gagal karena kontrol akun pengguna (UAC) di Windows Vista dan yang lebih baru. Jika aplikasi yang berisi fungsi ini dijalankan oleh pengguna yang masuk sebagai anggota grup Administrator selain Administrator bawaan, panggilan ini akan gagal kecuali aplikasi telah ditandai dalam file manifes dengan requestedExecutionLevel yang diatur ke requireAdministrator. Jika aplikasi tidak memiliki file manifes ini, pengguna yang masuk sebagai anggota grup Administrator selain Administrator bawaan kemudian harus menjalankan aplikasi dalam shell yang ditingkatkan sebagai Administrator bawaan (administrator RunAs) agar fungsi ini berhasil.

Catatan Pada Windows NT 4.0 dan Windows 2000 dan yang lebih baru, fungsi ini menjalankan operasi istimewa. Agar fungsi ini berhasil dijalankan, pemanggil harus masuk sebagai anggota grup Administrator atau grup NetworkConfigurationOperators.
 

Contoh

Contoh kode berikut menunjukkan cara mengubah gateway default ke NewGateway. Dengan memanggil GetIpForwardTable, mengubah gateway, lalu memanggil SetIpForwardEntry tidak akan mengubah rute, tetapi akan menambahkan yang baru. Jika ada beberapa gateway default, kode ini akan menghapusnya. Ketahuilah bahwa gateway baru harus layak; jika tidak, TCP/IP akan mengabaikan perubahan.

Catatan Menjalankan kode ini akan mengubah tabel perutean IP Anda dan kemungkinan akan menyebabkan aktivitas jaringan gagal.
 
#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")

int main()
{
    // Declare and initialize variables
    PMIB_IPFORWARDTABLE pIpForwardTable = NULL;
    PMIB_IPFORWARDROW pRow = NULL;
    DWORD dwSize = 0;
    BOOL bOrder = FALSE;
    DWORD dwStatus = 0;
    DWORD NewGateway = 0xDDBBCCAA;      // this is in host order Ip Address AA.BB.CC.DD is DDCCBBAA

    unsigned int i;

// Identify the required size of the buffer.
    dwStatus = GetIpForwardTable(pIpForwardTable, &dwSize, bOrder);
    if (dwStatus == ERROR_INSUFFICIENT_BUFFER) {
        // Allocate memory for the table.
        if (!(pIpForwardTable = (PMIB_IPFORWARDTABLE) malloc(dwSize))) {
            printf("Malloc failed. Out of memory.\n");
            exit(1);
        }
        // Retrieve the table.
        dwStatus = GetIpForwardTable(pIpForwardTable, &dwSize, bOrder);
    }

    if (dwStatus != ERROR_SUCCESS) {
        printf("getIpForwardTable failed.\n");
        if (pIpForwardTable)
            free(pIpForwardTable);
        exit(1);
    }
// Search for the required row in the table. The default gateway has a destination
// of 0.0.0.0. Be aware the table continues to be searched, but only
// one row is copied. This is to ensure that, if multiple gateways exist, all of them are deleted.
// 
    for (i = 0; i < pIpForwardTable->dwNumEntries; i++) {
        if (pIpForwardTable->table[i].dwForwardDest == 0) {
            // The default gateway was found.
            if (!pRow) {
                // Allocate memory to store the row. This is easier than manually filling
                // the row structure; only the gateway address is changed.
                //
                pRow = (PMIB_IPFORWARDROW) malloc(sizeof (MIB_IPFORWARDROW));
                if (!pRow) {
                    printf("Malloc failed. Out of memory.\n");
                    exit(1);
                }
                // Copy the row.
                memcpy(pRow, &(pIpForwardTable->table[i]),
                       sizeof (MIB_IPFORWARDROW));
            }
            // Delete the old default gateway entry.
            dwStatus = DeleteIpForwardEntry(&(pIpForwardTable->table[i]));

            if (dwStatus != ERROR_SUCCESS) {
                printf("Could not delete old gateway\n");
                exit(1);
            }
        }
    }

// Set the nexthop field to our new gateway. All other properties of the route will
// remain the same.
    pRow->dwForwardNextHop = NewGateway;

// Create a new route entry for the default gateway.
    dwStatus = CreateIpForwardEntry(pRow);

    if (dwStatus == NO_ERROR)
        printf("Gateway changed successfully\n");
    else if (dwStatus == ERROR_INVALID_PARAMETER)
        printf("Invalid parameter.\n");
    else
        printf("Error: %d\n", dwStatus);

// Free the memory. 
    if (pIpForwardTable)
        free(pIpForwardTable);
    if (pRow)
        free(pRow);

    exit(0);
}

Persyaratan

   
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header iphlpapi.h
Pustaka Iphlpapi.lib
DLL Iphlpapi.dll

Lihat juga

CreateIpForwardEntry

FormatMessage

GetIpForwardTable

Referensi Fungsi Pembantu IP

Halaman Mulai Pembantu IP

MIB_IPFORWARDROW

SetIpForwardEntry