Hi,
Zitat von
sakura:
Aus Interesse, würdest Du Deine Ergebnisse bitte posten - mich interessiert das mal rein so
Na klar:
Delphi-Quellcode:
function ConvertStringSidToSid(StringSid: PWideChar; var Sid: PSID): Boolean; stdcall; external 'advapi32.dll' name 'ConvertStringSidToSidW';
procedure VistaLowerPrivileges;
var pIntegritySid: PSID;
processToken, newToken: cardinal;
MandatoryLabel: TOKEN_MANDATORY_LABEL;
begin
if (OpenProcessToken(GetCurrentProcess, MAXIMUM_ALLOWED, processToken)) then begin
if (ConvertStringSidToSid(PWideChar(WideString('S-1-16-4096')), pIntegritySid)) then begin
MandatoryLabel.Label_.Sid:=pIntegritySid;
MandatoryLabel.Label_.Attributes:=SE_GROUP_INTEGRITY;
if (SetTokenInformation(processToken, Windows.TTokenInformationClass(TokenIntegrityLevel),
@MandatoryLabel, SizeOf(PTokenMandatoryLabel)+GetLengthSid(pIntegritySid))) then begin
ShowMessage('Privileges lowered');
end;
end;
end;
end;
Das setzt nun die Privileges runter (low integrity), für den ganzen Prozess. Ich denke, via TThread könnte man das nur für einen Thread machen, aber da ich momentan ohnehin noch im Proof-of-concept-Status bin, hab ich das noch nicht implementiert.
Benötigt wird übrigens JwaVista.pas aus diesem
JEDI Security /
WinAPI-Projekt, was im Thread erwähnt wurde. Siehe
http://www.delphipraxis.net/internal...t.php?p=803238
Um zum eigentlichen Problem zu kommen:
FindFirstURLCacheEntry funktioniert nicht. Mittels Process Explorer (
www.sysinternals.com) sieht man, dass die
API-Funktion nicht auf die "Low-Pfade" zurückgreift, die der IE nutzt.
cu