Aktion mit anderen Benutzerrechten ausführen
Liste der Anhänge anzeigen (Anzahl: 1)
Luckie hat hier einen Code gepostet, mit dem es möglich ist, Aktionen unter einem anderen Benutzeraccount auszuführen.
Delphi-Quellcode:
Zur Kontrolle wird der Benutzername ausgegeben. Das funktioniert unter Windows XP SP2 mit eingeschränkten Benutzerrechten. Unter Windows 2000 dürfte es Probleme mit den Privilegien geben, da dort das Privileg SE_TCB_NAME erforderlich ist, welches in der Regel nur Dienste Besitzen.
const
USER = 'Hansbambel'; PW = 'geheim'; function GetCurrUserName: string; var Size : DWORD; begin Size := MAX_COMPUTERNAME_LENGTH + 1; SetLength(Result, Size); if GetUserName(PChar(Result), Size) then SetLength(Result, Size) else Result := ''; end; function Impersonate(const User, PW: string): Boolean; var LogonType : Integer; LogonProvider : Integer; TokenHandle : THandle; strAdminUser : string; strAdminDomain : string; strAdminPassword : string; begin LogonType := LOGON32_LOGON_INTERACTIVE; LogonProvider := LOGON32_PROVIDER_DEFAULT; strAdminUser := USER; strAdminDomain := ''; strAdminPassword := PW; Result := LogonUser(PChar(strAdminUser), nil, PChar(strAdminPassword), LogonType, LogonProvider, TokenHandle); if Result then begin Result := ImpersonateLoggedOnUser(TokenHandle); CloseHandle(TokenHandle); end; end; // Möglicher Aufruf procedure TForm1.Button1Click(Sender: TObject); begin if Impersonate(USER, PW) then begin ShowMessage(GetCurrUserName); RevertToSelf; ShowMessage(GetCurrUserName); end else MessageBox(0, PChar(SysErrorMessage(GetLastError)), '', 0); end; Mit der Funtkion RevertToSelf wird die Ausführung unter diesem Benutzer wieder aufgehoben. Nähere Informationen und das nötige Hintergrundwissen erfahrt ihr in Luckies Artikel auf seiner Homepage. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz