2009-05-20 22 views
6

Estoy intentando agregar una dirección IP temporal a una NIC usando AddIPAddress cuando inicie sesión como un usuario que no es administrador. La documentación de MSDN para AddIPAddress indica que ERROR_INVALID_HANDLE se devuelve como un error si la función la llama un usuario que no es administrador.Problema al utilizar AddIPAddress al suplantar a un usuario administrador

Dado que he precedido la llamada a AddIPAddress con llamadas API a LogonUser() e ImpersonateLoggedOnUser(). Ahora mi aplicación piensa que ha iniciado sesión como administrador, pero AddIPAddress todavía falla con ERROR_INVALID_HANDLE.

MSDN también establece que ..

"Nota Las directivas de grupo, las políticas de la empresa, y otras restricciones a la red puede impedir que estas funciones se realicen con éxito. Asegúrese de que la aplicación tiene los permisos necesarios de la red antes de intentar utilizar estos funciones ".

¿Es posible llamar a AddIPAddress utilizando suplantación? ¿si es así, cómo? Supongo que tengo que cambiar los permisos mencionados anteriormente, pero no sé qué hacer en esta área.

¡Cualquier ayuda sería apreciada!

Additonal: También he dibujado un espacio en blanco al intentar llamar a netsh (otra vez conectado como un usuario normal) usando CreateProcessAsUser utilizando un identificador para un usuario administrador suplantado para iniciar el proceso. Siempre devuelve errores que indican privilegios insuficientes.

+0

De hecho, intenté que funcionara sin éxito. Ni LogonUser/ImpersonateLoggedOnUser ni CoInitializeSecurity ayudaron. Parece que se requiere algo de excavación en GpEdit.msc. – Andrey

+0

Le agradezco se haya tomado el tiempo de investigar esto. ¡Todavía no puedo creer que sea tan difícil de lograr! –

+0

La configuración relevante parece estar en GpEdit.msc, configuración de usuario, red, conexiones de red. (Estoy traduciendo de una copia alemana de Windows aquí, por lo que los nombres pueden ser ligeramente diferentes). ¿Funciona el código si realmente lo ejecuta como administrador? –

Respuesta

1

Si está utilizando Windows Vista, es posible que necesite elevar los privilegios.

En Vista de forma predeterminada UAC está habilitado. Esto hace que incluso como administrador esté utilizando un token de usuario limitado a menos que lo eleve explícitamente. Cuando hace esto, se le presenta al usuario un diálogo para permitir o denegar la solicitud.

Para obtener más información al respecto, consulte Windows Vista Application Development Requirements for User Account Control Compatibility.

Es posible que desee intentar usar CheckTokenMembership para verificar que esté correctamente elevado después de iniciar sesión como administrador. Sospecho que está obteniendo el token de usuario limitado y, por lo tanto, fallando las solicitudes de recursos privilegiados.

Lo mejor de la suerte.

+0

Gracias, investigaré esto cuando tenga oportunidad. Solucioné el problema al forzar al usuario a ejecutar la aplicación como usuario administrador. No es lo que realmente quería, pero lo haré por ahora. La aplicación deberá ejecutarse en todos los estilos de ventanas. –

Cuestiones relacionadas