2008-12-12 6 views

Respuesta

6

Necesita escribir una DLL usando Java Native Interface (JNI) ya que no puede hacer esto con el código Java puro.

La DLL necesita llamar a la función CreateProcessAsUser para crear un proceso en el contexto de otro usuario. Para crear correctamente ese proceso, debe proporcionar un token de acceso a la función, que se creó llamando a la función LogonUser (se necesita el nombre de usuario y la contraseña para autenticar a ese otro usuario).

4

Hay un programa llamado "runas.exe". Puede ejecutar ese proceso y proporcionar los argumentos apropiados para su proceso y nombre de usuario/contraseña. Creo que ese es el método más simple.

+1

Buena idea, pero esto no funciona, porque no puede pasar la contraseña a runas.exe. La contraseña debe ser ingresada por el usuario. Si redirige la entrada del proceso, los runas finalizan con un error. – Horcrux7

0

RUNAS tiene el interruptor "/ savecred" que le permite ingresar la credencial solo la primera vez. Un posible problema es que cuando/SaveCred guarda las credenciales, las guarda cada vez que RUNAS invoca esa cuenta de usuario. Esto puede ser un gran riesgo de seguridad, así que ten cuidado al usarlo.

Ejemplo en http://www.rgagnon.com/javadetails/java-0014.html (al final)

1

Según las necesidades de la API de Win32 "CreateProcessWithLogonW" es más fácil de usar que las funciones "CreateProcessAsUser/LogonUser".

De MSDN Docs:

 
The CreateProcessWithLogonW and CreateProcessWithTokenW functions are 
similar to the CreateProcessAsUser function, except that the caller 
does not need to call the LogonUser function to authenticate the user 
and get a token 
2

Acabo de funcionar a través de una alternativa a los programas llamados runas.exe MiniRunAs que tendrá la contraseña en la línea de comandos - http://www.source-code.biz/snippets/c/1.htm

Si usted es capaz de instalar junto con su aplicación, que puede ser más simple que escribir una DLL JNI.

Cuestiones relacionadas