Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi [Vista] FindFirstURLCacheEntry funktioniert wohl nicht? (https://www.delphipraxis.net/104261-%5Bvista%5D-findfirsturlcacheentry-funktioniert-wohl-nicht.html)

sECuRE 30. Nov 2007 11:52


[Vista] FindFirstURLCacheEntry funktioniert wohl nicht?
 
Hi,

Mithilfe von Process Explorer (http://www.sysinternals.com) habe ich bemerkt, dass der IE7 in der Standardinstallation von Vista Cookies in den Pfad %APPDATA%\Roaming\Microsoft\Windows\Cookies\Low schreibt.

Nun gibt es ja die WinAPI-Funktion FindFirstURLCacheEntry, welches einem - mithilfe von index.dat - diese Einträge (und auch die History/Cache/RSS/usw) zurückliefert.

Unter Windows XP funktioniert das prima, aber unter Windows Vista versucht diese Funktion, im Pfad %APPDATA%\Local\Temp\Temporary Internet Files\Content.IE5 nach index.dat zu suchen.

Auch nach dem Herabsetzen der Prozessrechte auf "low integrity" (siehe http://www.delphipraxis.net/internal...t.php?p=813574) klappt das nicht (ändert sich nichts an den Pfaden, aber via Process Explorer (ebenfalls http://www.sysinternals.com) und anderen lustigen Nebeneffekten sehe ich, dass das Herabsetzen geklappt hat).

Hat jemand eine Idee, wie man das Problem beheben/umgehen könnte, ohne einen eigenen index.dat-Parser zu schreiben und die Dateien direkt zu öffnen?

Danke schonmal

Dezipaitor 1. Dez 2007 00:07

Re: [Vista] FindFirstURLCacheEntry funktioniert wohl nicht?
 
FeedBack für FindFirstURLCacheEntry
https://beta.microsoft.com/WNDP/feed...dbackID=191952

A bit about WinInet's Index.dat
http://blogs.msdn.com/wndp/archive/2...Index_dat.aspx

Wenn ich dem FeedBack (erster Link) glaube, dann ist die einzige Möglichkeit, den korrekten Cache der LowIntegrity zu bekommen,
einen Prozess mit dem Aufruf zu beauftragen. Dieser Prozess muss sofort mit LowIL gestartet werden.
Sag mir bescheid, wenn du was dazu hast.

P.S.
Ich habe das Integrity Level für das Token eingeführt.

Delphi-Quellcode:
var tok : TJwSecurityToken;
begin
  tok := TJwSecurityToken.CreateTokenEffective(TOKEN_ALL_ACCESS);
  try
    tok.TokenIntegrityLevelType := iltLow;
  finally
    tok.Free;
  end;
end;
----------

Zitat:

if (SetTokenInformation(processToken, Windows.TTokenInformationClass(TokenIntegrityLevel ),
@MandatoryLabel, SizeOf(PTokenMandatoryLabel)+GetLengthSid(pIntegri tySid))) then begin
ShowMessage('Privileges lowered');
end;
Meiner Meinung ist es reiner Zufall, dass das überhaupt funktioniert. Die übergebene Größe (SizeOf(PTokenMandatoryLabel)+GetLengthSid(pIntegr itySid)) ist dieselbe oder größer als die von MandatoryLabel.
Ich habe daher sizeof(MandatoryLabel) verwendet und es funkt wunderbar.

sizeof(MandatoryLabel) = sizeof(_TOKEN_MANDATORY_LABEL) = sizeof(PSID) +sizeof(DWORD) = 4+4 = 8
SizeOf(PTokenMandatoryLabel)+GetLengthSid(pIntegri tySid) = 4 + 12 = 16 (bei mir)

Die Struktur verwendet jedoch einen Zeiger auf die SID. Im Gegensatz zu den ACE Strukturen. Diese enthalten die SID komplett im Record. Daher muss man die SidLänge angeben.

Hast du es von dort?: http://weblogs.asp.net/kennykerr/arc...t-Control.aspx

Müsste man mal fragen, warum der das so macht. Würde mich gerne belehren lassen.

sECuRE 1. Dez 2007 00:28

Re: [Vista] FindFirstURLCacheEntry funktioniert wohl nicht?
 
Hi,

Zitat:

Zitat von Dezipaitor
Wenn ich dem FeedBack (erster Link) glaube, dann ist die einzige Möglichkeit, den korrekten Cache der LowIntegrity zu bekommen,
einen Prozess mit dem Aufruf zu beauftragen. Dieser Prozess muss sofort mit LowIL gestartet werden.
Sag mir bescheid, wenn du was dazu hast.

OK, das würde dann auch erklären, warum man rundll32 beauftragen muss (welche dann wiederum inetcpl im low integrity mode startet). Anscheinend werden also die Pfade gecached und nur beim Start des Prozesses aktualisiert.

Wird beim Auslagern des Codes in eine DLL, die ich im LIM starte, dann auch jedes mal der Benutzer benachrichtigt und muss bestätigen?

Zitat:

Zitat von Dezipaitor
if (SetTokenInformation(processToken, Windows.TTokenInformationClass(TokenIntegrityLevel ),
@MandatoryLabel, SizeOf(PTokenMandatoryLabel)+GetLengthSid(pIntegri tySid))) then begin
ShowMessage('Privileges lowered');
end;
Meiner Meinung ist es reiner Zufall, dass das überhaupt funktioniert. Die übergebene Größe (SizeOf(PTokenMandatoryLabel)+GetLengthSid(pIntegr itySid)) ist dieselbe oder größer als die von MandatoryLabel.
Ich habe daher sizeof(MandatoryLabel) verwendet und es funkt wunderbar.

Hab' ich so aus der MSDN, Siehe http://msdn2.microsoft.com/en-us/library/bb250462.aspx

Danke für deine Antwort

Dezipaitor 1. Dez 2007 01:54

Re: [Vista] FindFirstURLCacheEntry funktioniert wohl nicht?
 
Zitat:

Zitat von sECuRE
Hi,
Wird beim Auslagern des Codes in eine DLL, die ich im LIM starte, dann auch jedes mal der Benutzer benachrichtigt und muss bestätigen?

Verstehe nicht, wie das Auslagern was bringen soll.

sECuRE 1. Dez 2007 11:40

Re: [Vista] FindFirstURLCacheEntry funktioniert wohl nicht?
 
Hi,

Zitat:

Zitat von Dezipaitor
Zitat:

Zitat von sECuRE
Hi,
Wird beim Auslagern des Codes in eine DLL, die ich im LIM starte, dann auch jedes mal der Benutzer benachrichtigt und muss bestätigen?

Verstehe nicht, wie das Auslagern was bringen soll.

Auslagern im Sinne von: Eine separate DLL machen, die dann via rundll32 (im Low Integrity Mode) gestartet wird, so wie es der IE7 ja macht.

cu


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz