Ejecutar una aplicación en otro contexto de seguridad
Artículo por Club Developers · 01 marzo 2006
4781 vistas
Frecuentemente tenemos la necesidad de lanzar una aplicación como si lo hiciera otro usuario (con otros permisos). Generalmente usamos (para versiones posteriores a Windows ME) el menú contextual "Ejecutar como..."
Vamos a ver una función que permite de hacer lo mismo que esta opción pero desde Delphi.
La función CreateProcessWithLogon está definida en la librería advapi32.dll, por lo que tendremos que declararla:
Vamos a ver una función que permite de hacer lo mismo que esta opción pero desde Delphi.
delphi
const LOGON_WITH_PROFILE = 1; LOGON_NETCREDENTIALS_ONLY = 2; ... procedure ExecWithOtherUser(sUser, sDomain, sPassword: WideString); var wUsername, wDomain, wPassword, wApplicationName: WideString; pwUsername, pwDomain, pwPassword, pwApplicationName: PWideChar; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin wUsername := sUser ; wDomain := sDomain; wPassword := Spassword; wApplicationName := sExecutable ; pwUsername := Addr(wUsername[1]); pwDomain := Addr(wDomain[1]); pwPassword := Addr(wPassword[1]); pwApplicationName := Addr(wApplicationName[1]); FillChar(StartupInfo, SizeOf(StartupInfo), 0); StartupInfo.cb := SizeOf(StartupInfo); try if not CreateProcessWithLogon(pwUsername, pwDomain, pwPassword, LOGON_NETCREDENTIALS_ONLY, nil, pwApplicationName, CREATE_DEFAULT_ERROR_MODE, nil, nil, StartupInfo, ProcessInfo) then RaiseLastOSError; // en caso de error, lo mostramos end;
La función CreateProcessWithLogon está definida en la librería advapi32.dll, por lo que tendremos que declararla:
delphi
function CreateProcessWithLogon; external 'advapi32.dll' name 'CreateProcessWithLogonW';