Funzione SetIpInterfaceEntry (netioapi.h)

La funzione SetIpInterfaceEntry imposta le proprietà di un'interfaccia IP nel computer locale.

Sintassi

IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API SetIpInterfaceEntry(
  [in, out] PMIB_IPINTERFACE_ROW Row
);

Parametri

[in, out] Row

Puntatore a una voce di struttura MIB_IPINTERFACE_ROW per un'interfaccia. In input, il membro Famiglia del MIB_IPINTERFACE_ROW deve essere impostato su AF_INET6 o AF_INET e il membro InterfaceLuid o InterfaceIndex del MIB_IPINTERFACE_ROW deve essere specificato. In caso di esito positivo, il membro InterfaceLuid del MIB_IPINTERFACE_ROW viene compilato se è stato specificato il membro InterfaceIndexdella voce MIB_IPINTERFACE_ROW .

Valore restituito

Se la funzione ha esito positivo, il valore restituito è NO_ERROR.

Se la funzione ha esito negativo, il valore restituito è uno dei codici di errore seguenti.

Codice restituito Descrizione
ERROR_ACCESS_DENIED
Accesso negato. Questo errore viene restituito in diverse condizioni che includono quanto segue: l'utente non dispone dei privilegi amministrativi necessari nel computer locale o l'applicazione non è in esecuzione in una shell avanzata come amministratore predefinito (amministratore RunAs).
ERROR_FILE_NOT_FOUND
Non è possibile trovare il file specificato. Questo errore viene restituito se l'interfaccia di rete LUID o l'indice dell'interfaccia specificato dal membro InterfaceLuid o InterfaceIndex del MIB_IPINTERFACE_ROW puntato dal parametro Row non era un valore nel computer locale.
ERROR_INVALID_PARAMETER
Un parametro non valido è stato passato alla funzione. Questo errore viene restituito se un puntatore NULL viene passato nel parametro Row, il membro Famiglia del MIB_IPINTERFACE_ROW puntato al parametro Row non è stato specificato come AF_INEToAF_INET6 o sia i membri InterfaceLuid o InterfaceIndex del MIB_IPINTERFACE_ROW puntati dal parametro Row non sono stati specificati.
ERROR_NOT_FOUND
Impossibile trovare l'interfaccia specificata. Questo errore viene restituito se l'interfaccia di rete specificata dal membro InterfaceLuid o InterfaceIndex del MIB_IPINTERFACE_ROW puntato dal parametro Row non corrisponde alla famiglia di indirizzi IP specificata nel membro famiglianella struttura MIB_IPINTERFACE_ROW .
Altri
Usare FormatMessage per ottenere la stringa di messaggio per l'errore restituito.

Commenti

La funzione SetIpInterfaceEntry viene definita in Windows Vista e versioni successive.

La funzione SetIpInterfaceEntry può essere usata per modificare una voce di interfaccia IP esistente.

In input, il membro Famiglia nella struttura MIB_IPINTERFACE_ROW puntato dal parametro Row deve essere inizializzato in AF_INET o AF_INET6. Oltre all'input, almeno uno dei membri seguenti nella struttura MIB_IPINTERFACE_ROW punta al parametro Row deve essere inizializzato: InterfaceLuid o InterfaceIndex.

I campi vengono usati nell'ordine elencato sopra. Quindi, se si specifica InterfaceLuid , questo membro viene usato per determinare l'interfaccia. Se non è stato impostato alcun valore per il membro InterfaceLuid (i valori di questo membro è stato impostato su zero), il membro InterfaceIndex viene usato successivamente per determinare l'interfaccia.

In output, il membro InterfaceLuid della struttura MIB_IPINTERFACE_ROW puntato dal parametro Row viene compilato se è stato specificato InterfaceIndex .

MaxReassemblySize, MinRouterAdvertisementInterval, MaxRouterAdvertisementInterval , Connected, SupportWakeUpPatterns, SupportNeighborbordiscovery, SupportRouterDiscovery, ReachableTime, TransmitOffload e I membri receiveOffload della struttura MIB_IPINTERFACE_ROW puntati alla funzione Row vengono ignorati quando viene chiamata la funzione SetIpInterfaceEntry. Questi membri vengono impostati dallo stack di rete e non possono essere modificati usando la funzione SetIpInterfaceEntry .

Un'applicazione chiama in genere la funzione GetIpInterfaceTable per recuperare le voci dell'interfaccia IP nel computer locale o chiamare la funzione GetIpInterfaceEntry per recuperare solo la voce dell'interfaccia IP da modificare. La struttura MIB_IPINTERFACE_ROW per la voce di interfaccia IP specifica potrebbe quindi essere modificata e un puntatore a questa struttura passata alla funzione SetIpInterfaceEntry nel parametro Row . Tuttavia, per IPv4, un'applicazione non deve provare a modificare il membro SitePrefixLength della struttura MIB_IPINTERFACE_ROW . Per IPv4, il membro SitePrefixLength deve essere impostato su 0.

Un altro metodo possibile per modificare una voce di interfaccia IP esistente consiste nell'usare la funzione InitializeIpInterfaceEntry per inizializzare i campi di una voce di struttura MIB_IPINTERFACE_ROW con valori predefiniti. Impostare quindi il membro Famiglia e i membri InterfaceIndex o InterfaceLuid nella struttura MIB_IPINTERFACE_ROW puntati dal parametro Row per corrispondere all'interfaccia IP da modificare. Un'applicazione può quindi modificare i campi nella voce MIB_IPINTERFACE_ROW che desidera modificare e quindi chiamare la funzione SetIpInterfaceEntry . Tuttavia, per IPv4, un'applicazione non deve provare a modificare il membro SitePrefixLength della struttura MIB_IPINTERFACE_ROW . Per IPv4, il membro SitePrefixLength deve essere impostato su 0. Attenzione deve essere usata con questo approccio perché l'unico modo per determinare tutti i campi da modificare sarà confrontare i campi nella MIB_IPINTERFACE_ROW della voce di interfaccia IP specifica con i campi impostati dalla funzione InitializeIpInterfaceEntry quando un MIB_IPINTERFACE_ROW viene inizializzato ai valori predefiniti.

L'accesso simultaneo non privilegiato a più reti di diversi requisiti di sicurezza crea un buco di sicurezza e consente a un'applicazione non privilegiata di inoltrare accidentalmente i dati tra le due reti. Un esempio tipico è l'accesso simultaneo a una rete privata virtuale (VPN) e a Internet. Windows Server 2003 e Windows XP usano un modello host debole, in cui RAS impedisce l'accesso simultaneo aumentando la metrica di route di tutte le route predefinite su altre interfacce. Pertanto tutto il traffico viene instradato tramite l'interfaccia VPN, interrompendo la connettività di rete.

In Windows Vista e versioni successive viene usato un modello host sicuro per impostazione predefinita. Se viene specificato un indirizzo IP di origine nella ricerca della route usando GetBestRoute2 o GetBestRoute, la ricerca della route è limitata all'interfaccia dell'indirizzo IP di origine. La modifica della metrica di route da RAS non ha alcun effetto perché l'elenco di potenziali route non ha nemmeno la route per l'interfaccia VPN consentendo così il traffico a Internet. Il membro DisableDefaultRoutes del MIB_IPINTERFACE_ROW può essere usato per disabilitare l'uso della route predefinita in un'interfaccia. Questo membro può essere usato come misura di sicurezza dai client VPN per limitare il tunneling diviso quando il tunneling diviso non è richiesto dal client VPN. Un client VPN può chiamare la funzione SetIpInterfaceEntry per impostare il membro DisableDefaultRoutes su TRUE quando necessario. Un client VPN può eseguire una query sullo stato corrente del membro DisableDefaultRoutes chiamando la funzione GetIpInterfaceEntry .

The

La funzione SetIpInterfaceEntry può essere chiamata solo da un utente connesso come membro del gruppo Administrators. Se SetIpInterfaceEntry viene chiamato da un utente che non è membro del gruppo Administrators, la chiamata alla funzione avrà esito negativo e ERROR_ACCESS_DENIED viene restituita. Questa funzione può anche non riuscire a causa del controllo account utente (UAC) in Windows Vista e versioni successive. Se un'applicazione contenente questa funzione viene eseguita da un utente connesso come membro del gruppo Administrators diverso dall'amministratore predefinito, questa chiamata avrà esito negativo a meno che l'applicazione non sia stata contrassegnata nel file manifesto con un set requestedExecutionLevel per richiedereAdministrator. Se l'applicazione manca di questo file manifesto, un utente ha eseguito l'accesso come membro del gruppo Administrators diverso dall'amministratore predefinito, deve quindi eseguire l'applicazione in una shell avanzata come amministratore predefinito (amministratore RunAs) per la riuscita di questa funzione.

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2008 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione netioapi.h (includere Iphlpapi.h)
Libreria Iphlpapi.lib
DLL Iphlpapi.dll

Vedi anche

GetBestRoute

GetBestRoute2

GetIfEntry2

GetIfTable2

GetIfTable2Ex

GetIpInterfaceEntry

GetIpInterfaceTable

Informazioni di riferimento sulla funzione helper IP

InitializeIpInterfaceEntry

MIB_IF_ROW2

MIB_IF_TABLE2

MIB_IPINTERFACE_ROW

MIB_IPINTERFACE_TABLE

NotifyIpInterfaceChange