[Resolvido] CreateProcessAsUser
Olá pessoal,
estou com o seguinte código:
procedure RunAs(ACommandLine, AUserName, ADomain, APassword: PAnsiChar);
var
hToken: Cardinal;
ProcessInfo: TProcessInformation;
StartupInfo: TStartupInfo;
**function** SetUserObjectFullAccess(hUserObject: THandle): Boolean;
**var**
Sd: PSecurity_Descriptor;
Si: Security_Information;
**begin**
Sd := Ptr(LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH));
InitializeSecurityDescriptor(Sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(Sd, True, **nil**, False);
Si := DACL_SECURITY_INFORMATION;
Result := SetUserObjectSecurity(hUserObject, Si, Sd);
LocalFree(HLOCAL(Sd));
**end;**
begin
Win32Check(LogonUser(AUserName, ADomain, APassword, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken));
**try**
ImpersonateLoggedOnUser(hToken);
**try**
SetUserObjectFullAccess(GetThreadDesktop(GetCurrentThreadId));
SetUserObjectFullAccess(GetProcessWindowStation);
ZeroMemory(@StartupInfo, SizeOf(TStartupInfo));
StartupInfo.cb := SizeOf(TStartupInfo);
StartupInfo.wShowWindow := SW_SHOW;
i**f** **not** CreateProcessAsUser(hToken, **nil**, ACommandLine, **nil**, **nil**,
False, CREATE_NEW_CONSOLE **or** CREATE_NEW_PROCESS_GROUP,
**nil**, **nil**, StartupInfo, ProcessInfo) **then**
RaiseLastOsError;
**finally**
RevertToSelf;
**end;**
**finally**
CloseHandle(hToken);
**end;**
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
RunAs('C:\WINDOWS\notepad.exe','MEU_USUARIO',nil, 'MINHA_SENHA');
end;
Mas ta retornando o seguinte erro na hora de compilar:
[Warning] Unit1.pas(51): Symbol 'Win32Check' is specific to a platform.
O programa roda, mas na hora de executar outro com privilégios de administrador retorna outro erro:
System Error. Code 1314. O cliente não tem o privilégio necessário.
Será que alguém pode me ajudar?
Discussão (1)
Carregando comentários...