Einzelnen Beitrag anzeigen

CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#7

AW: OpenDialog mit Benutzerumgebung aus System-Prozess

  Alt 13. Feb 2011, 14:18
Habe ich mal ausprobiert:
Delphi-Quellcode:
var
  isSystem : Boolean;
  UserToken : TJwSecurityToken;
  od : TOpenDialog;
begin
  isSystem := JwIsSystem;

  if isSystem then
  begin
    if is2000 then
      UserToken := TJwSecurityToken.CreateCompatibilityQueryUserToken(MAXIMUM_ALLOWED, 'explorer.exe')
    else
      UserToken := TJwSecurityToken.CreateWTSQueryUserTokenEx(nil, WtsGetActiveConsoleSessionID);
    TJwAutoPointer.Wrap(UserToken);
    UserToken.ImpersonateLoggedOnUser;
  end;

  od := TOpenDialog.Create(Form1);
  od.Execute;
  od.Free;

  if isSystem then
    UserToken.RevertToSelf;
end;
Leider mit dem gleichen Ergebnis. Generell funktioniert das Impersonate schon korrekt (GetUserName gibt zb vorher SYSTEM und danach den Benutzernamen aus. Aber irgendwie ist die Personifizierung nicht vollständig oder es fehlt ganz einfach der Environment-Block. Ich weiß nur leider nicht, wie man das da mit einbauen könnte. Die Verwendung eines Envirunment-Blocks kenne ich nur beim Starten eines neuen Prozesses.
Hättest Du noch eine andere Idee? Kannst das Code-Schnippsel auch gern selbst ausprobieren. Vielleicht wird die Ursache dann offensichtlicher.
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat