Ich habe jetzt nochmal mit Tokens herumgespielt.
Ich bin mir nach wie vor nicht sicher, wie ich das Token des eigenen Prozesses im
non-elevated Status bekomme, wenn er gerade elevated läuft. Ich nehme jetzt einfach das Token des Explorers. Das hat jetzt in allen Tests funktioniert. Ob das allerdings die beste Lösung ist, weiß ich nicht...
Delphi-Quellcode:
var
ExplorerToken : TJwSecurityToken;
begin
ExplorerToken := TJwSecurityToken.CreateCompatibilityQueryUserToken(MAXIMUM_ALLOWED, 'explorer.exe');
TJwAutoPointer.Wrap(ExplorerToken);
ExplorerToken.ImpersonateLoggedOnUser;
//do stuff
ExplorerToken.RevertToSelf;
end;
Bei besseren Ideen, bitte Bescheid geben.