2009-05-20 11 views
6

Sto tentando di aggiungere un indirizzo IP temporaneo ad una scheda di rete utilizzando AddIPAddress quando si accede come utente non-admin. La documentazione MSDN per AddIPAddress afferma che ERROR_INVALID_HANDLE viene restituito come errore se la funzione viene chiamata da un utente non amministratore.problema utilizzando AddIPAddress quando impersonare un utente amministratore

Dato che ho preceduto la chiamata a AddIPAddress con chiamate API a LogonUser() e ImpersonateLoggedOnUser(). Ora la mia applicazione pensa che abbia effettuato l'accesso come amministratore, ma AddIPAddress non riesce ancora con ERROR_INVALID_HANDLE.

MSDN afferma anche che ..

"Nota politiche del Gruppo, le politiche aziendali, e altre restrizioni sulla rete può impedire queste funzioni di portare a termine con successo. Assicurarsi che l'applicazione ha le autorizzazioni di rete necessarie prima di tentare di utilizzare questi funzioni."

E 'possibile chiamare AddIPAddress utilizzando la rappresentazione? se é cosi, come? Sto indovinando che ho bisogno di cambiare i permessi di cui sopra ma sono in perdita su cosa fare in questa zona.

Qualsiasi aiuto sarebbe apprezzato!

Aggiuntivo: Ho anche disegnato uno spazio vuoto durante il tentativo di chiamare su netsh (di nuovo connesso come utente normale) utilizzando CreateProcessAsUser utilizzando un handle per un utente amministratore rappresentato per avviare il processo. Restituisce sempre gli errori indicando privilegi insufficienti.

+0

Infatti, ha cercato di farlo funzionare senza successo. Né LogonUser/ImpersonateLoggedOnUser né CoInitializeSecurity hanno aiutato. Sembra che sia necessario scavare in GpEdit.msc. – Andrey

+0

Apprezzo il tempo che hai dedicato a questo. Non riesco ancora a credere che dovrebbe essere così difficile da raggiungere! –

+0

La configurazione pertinente sembra essere in GpEdit.msc, Configurazione utente, Rete, Connessioni di rete. (Sto traducendo da una copia tedesca di Windows qui, quindi i nomi potrebbero essere leggermente diversi.) Il codice funziona se lo si esegue effettivamente come amministratore? –

risposta

1

Se si utilizza Windows Vista potrebbe essere necessario elevare i privilegi.

In Vista di default UAC è abilitato. In questo modo, anche come amministratore, si utilizza un token utente limitato a meno che non si elevi esplicitamente. Quando lo fai, all'utente viene presentata una finestra di dialogo per consentire o rifiutare la richiesta.

Per ulteriori informazioni su questo vedere Windows Vista Application Development Requirements for User Account Control Compatibility.

si consiglia di provare a utilizzare CheckTokenMembership per verificare che siano adeguatamente elevata dopo l'accesso come amministratore. Sospetto che tu stia ottenendo il token utente limitato e quindi non riuscendo a richiedere le risorse privilegiate.

Buona fortuna.

+0

Grazie vedrò questo quando avrò la possibilità. Ho risolto il problema forzando l'utente a eseguire l'app come utente amministratore. Non è quello che volevo davvero ma lo farò per ora. L'applicazione dovrà essere eseguita in tutte le versioni di Windows. –

Problemi correlati