Einzelnen Beitrag anzeigen

psyone

Registriert seit: 19. Okt 2007
5 Beiträge
 
RAD-Studio 2009 Arc
 
#3

Re: CreateProcessAsUser ERROR_PRIVILEGE_NOT_HELD

  Alt 30. Sep 2009, 10:21
Ich habe mich mal an CreateRestrictedToken versucht. Dank JWSCL klappt das auch alles ganz einfach

Wenn ich damit Paint starte, darf ich nicht nach C:\Programme speichern. Daher gehe ich davon aus, dass der Rechteentzug klappt.

Eigentlich möchte ich aber den Internet Explorer (nicht den Standardbrowser) starten. Der startet auch kurz, schließt sich aber sofort wieder. Das ganze tritt auf bei Windows Vista Ultimate SP 2 + IE 8. Auf einem XP Pro SP3 + IE 8 gibt es das Problem nicht. Der XP Rechner führt den Code fehlerfrei aus. (TokenIntegrityLevelType natürlicht nicht, da auf XP nicht verfügbar)

Setze ich JwAdministratorsSID nicht auf die Liste der zu deaktivierenden SIDs, startet er normal. Aber dann hat er ja möglicherweise Adminrechte, oder?

Habe ich das RestrictedToken soweit richtig erstellt?


Delphi-Quellcode:
var
  lApp: String;
  lToken, lRestrictedToken: TJwSecurityToken;
  lSIDs: TJwSecurityIdList;
  lStartupInfo: TStartupInfo;
  lProcessInfo: TProcessInformation;

...

lSIDs := TJwSecurityIdList.Create(false);
lToken := TJwSecurityToken.CreateTokenEffective(TOKEN_ALL_ACCESS);

JwInitWellKnownSIDs;

lSIDs.Add(JwAdministratorsSID); // <-- IE schließt sich sofort wieder
lSIDs.Add(JwLocalSystemSID);
lSIDs.Add(JwNetworkServiceSID);
lSIDs.Add(JwLocalServiceSID);
lSIDs.Add(JwIntegrityLabelSID[iltMedium]);
lSIDs.Add(JwIntegrityLabelSID[iltHigh]);
lSIDs.Add(JwIntegrityLabelSID[iltSystem]);
lSIDs.Add(JwIntegrityLabelSID[iltProtected]);

lRestrictedToken := TJwSecurityToken.CreateRestrictedToken(lToken.TokenHandle, TOKEN_ALL_ACCESS, DISABLE_MAX_PRIVILEGE, lSIDs, nil, nil);
lRestrictedToken.TokenIntegrityLevelType := iltLow;

ZeroMemory(@lStartupInfo, SizeOf(lStartupInfo));
ZeroMemory(@lProcessInfo, SizeOf(lProcessInfo));
lStartupInfo.cb := SizeOf(lStartupInfo);

//lApp:= 'c:\program files\Internet Explorer\iexplore.exe';
lApp:= 'c:\windows\system32\mspaint.exe';

CreateProcessAsUser(lRestrictedToken.TokenHandle, PWideChar(lApp), nil, nil, nil, false, 0, nil, nil, lStartupInfo, lProcessInfo)
  Mit Zitat antworten Zitat