Club Delphi,
Cita:
Empezado por escafandra
...como hacer un "RunAs" no solo como administrador, sino como cualquier usuario...
|
Esta es la
implementación en Delphi del código sugerido en el
Msg #5:
Código Delphi
[-]
function CreateProcessWithLogonW(lpUsername, lpDomain, lpPassword: PWideChar;
dwLogonFlags: Cardinal;
lpApplicationName, lpCommandLine: PWideChar;
dwCreationFlags: Cardinal;
lpEnvironment: Pointer;
lpCurrentDirectory: PWideChar;
var lpStartupInfo: TStartupInfo;
var lpProcessInfo: TProcessInformation
): LongBool; stdcall; external 'advapi32.dll';
function RunAs(const UserName, Domain, Password, PrgName, CmdLine : PWideChar; Wait : Boolean) : Boolean;
var
StrInf : TStartupInfo;
PrcInf : TProcessInformation;
begin
FillChar(StrInf,SizeOf(TStartupInfo),0);
FillChar(PrcInf,SizeOf(TProcessInformation),0);
StrInf.cb := SizeOf(TStartupInfo);
StrInf.wShowWindow := SW_SHOWNORMAL;
Result := CreateProcessWithLogonW(UserName,
Domain,
Password,
1,
PrgName,
CmdLine,
0,
nil,
nil,
StrInf,
PrcInf);
if Result then
begin
if Wait then WaitForSingleObject(PrcInf.hProcess, INFINITE);
CloseHandle(PrcInf.hProcess);
CloseHandle(PrcInf.hThread);
end
else
MessageDlg(SysErrorMessage(GetLastError),mtError,[mbOK],0);
end;
El código anterior
permite ejecutar un proceso con el usuario, password y dominio requerido con un switch de control de espera de terminación de proceso.
Un ejemplo de su uso:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
begin
RunAs('UserName','Dominio','Password','cmd.exe','/k dir c:\', True);
end;
El código anterior
inicia el shell de Windows y ejecuta el comando dir con la opción /k (Ejecutar un cmd y mantener abierto el shell) esperando que el proceso finalize (Cerrar el Shell) por medio del switch en True.
Revisen estos links:
Espero sea útil
Nelson.