Nein, das ist definitiv nicht der Fall. Beispiel: Textdatei direkt auf C:\ schreiben.
Delphi-Quellcode:
procedure TForm20.Button1Click(Sender: TObject);
var
strings: TStrings;
begin
strings := TStringList.Create();
strings.Append('Hallo Welt');
strings.SaveToFile('c:\textfile.txt');
end;
Führt man das als "normaler Benutzer" aus: Zugriff verweigert. Führt man das mit einem normalen Administratorkonto aus: Geht.
Soweit alles wie erwartet.
Gebe ich mich vor dem Schreibvorgang als Admin aus:
Delphi-Quellcode:
procedure TForm20.Button1Click(Sender: TObject);
var
strings: TStrings;
begin
strings := TStringList.Create();
strings.Append('Hallo Welt');
if not TWindowsUser.Impersonate(
'admin',
'1234567890'
) then
Beep();
try
strings.SaveToFile('c:\textfile.txt');
finally
RevertToSelf();
end;
end;
funktioniert es weder ("Zugriff verweigert"), wenn ich die Datei als normaler Benutzer starte, noch als Admin. Das verstehe ich auch nicht.
--
Die Methode "Impersonate" habe ich glaube ich einfach
von Luckie gestohlen
Delphi-Quellcode:
class function TWindowsUser.Impersonate(
const username: String;
const password: String;
const domain: String = Para_Impersonate_domain
): Boolean;
var
LogonType: Integer;
LogonProvider: Integer;
TokenHandle: THandle;
strAdminUser: string;
strAdminDomain: string;
strAdminPassword: string;
begin
LogonType := LOGON32_LOGON_INTERACTIVE;
LogonProvider := LOGON32_PROVIDER_DEFAULT or LOGON32_PROVIDER_WINNT50;
{TODO -oJM -cDoc : ActionItem}
// Token für den gewünschten Benutzer holen
Result := LogonUser(
PChar(username),
PChar(domain),
PChar(password),
LogonType,
LogonProvider,
TokenHandle
);
// Wenn das Token in Erfahrung gebracht werden konnte...
if Result then begin
Result := ImpersonateLoggedOnUser(TokenHandle);
CloseHandle(TokenHandle);
end;
end;