![]() |
Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a
Ich gebe zu, dass das Setup nicht ganz trivial ist. Ich hatte damit auch schon Probleme. Du musst die zweite Variante wählen, die
![]() |
Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a
Hallo.
Danke für den Hinweis. Jetzt hat es funktioniert. Der Suchpfad ist: jedi_api22a_jwscl092a\jwapi2.2a\Packages\bds10\bin \release\static; jedi_api22a_jwscl092a\jwscl0.9.2a\source Nur wie arbeite ich jetzt mit einem Security-Descriptor und einem File-Mapping?
Delphi-Quellcode:
Aus dem Example-Projekt konnte ich nicht wirklich etwas rauslesen. Auch habe ich nicht gesehen, wie jetzt ein Dateirecht auf Alle-Lesen gesetzt wurde.
SD: TJwSecurityDescriptor;
AC: TJwSAccessControlList; begin SD := TJwSecurityDescriptor.Create; //AC. SD.SACL := AC; hMapping := CreateFileMapping(INVALID_HANDLE_VALUE, SD, PAGE_READWRITE, 0, 4, MappingGUID); pView := MapViewOfFile(hMapping, FILE_MAP_WRITE, 0, 0, 0); Auserdem verstehe ich nicht den Zusammenhang zwischen dem Security-Descriptor und dem Integrity-Level, das ich auf "niedrig" setzen möchte. Gruß blackdrake |
Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a
Security Descriptors sind nicht mein Spezialgebiet (speziell die Vista-spezifischen Integrity Labels), aber ich versuche trotzdem, deine Fragen nach besten Wissen zu beantworten.
Zitat:
Vereinfacht könnte dein Code auf einem vor-Vista-System so aussehen:
Delphi-Quellcode:
Um zusätzlich das Integrity Label zu setzen, musst du die SACL ändern. Das geht über die Methode TJwSAccessControlList.SetMandatoryLabel.
var Attrs: PSecurityAttributes;
Desc: TJwSecurityDescriptor; begin Desc := TJwSecurityDescriptor.Create; try {Verleiht allen Benutzern alle Rechte - also auch Schreibrechte! Wenn du sie auf Lesezugriff beschränken willst, musst du die DACL bis auf einen Eintrag lehren, der allen Benutzern Lesezugriff verleiht.} Desc.DACL := nil; Attrs := Desc.Create_SA; //API-Struktur erstellen try hMapping := CreateFileMapping(..., Attrs, ...); finally TJwSecurityDescriptor.Free_SA(Attrs); end; finally Desc.Free; end; end; |
Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a
Hallo.
Vielen Dank für deine Antwort. Leider blicke ich immer noch nicht durch. Die Dokumentation von Delphi hilft mir leider auch nicht weiter. Ich habe bei deinem Code noch ein @ hinzufügen müssen. Ich bekomme jetzt aber noch einen Accessed-Fehler beim erstellen der MMF. Muss das DACL überhaupt gesetzt werden, oder ist es nicht der Standard-Fall, dass alle Benutzer (=Prozesseigentümer?) Lesezugriff auf die MMF haben? Und bezüglich des SACL: Ich hoffe, ich habe das Integrity-Label nun korrekt gesetzt. In den Examples wird nur das Auslesen erläutert. Und außerdem bin ich ein bisschen Verwirrt durch die Bezeichnung Mandatory-Label und Integrity-Label (sind das Symonyme?)...
Delphi-Quellcode:
Gruß
Attrs: PSecurityAttributes;
Desc: TJwSecurityDescriptor; ACE: TJwSystemMandatoryAccessControlEntry; begin Desc := TJwSecurityDescriptor.Create; try {Verleiht allen Benutzern alle Rechte - also auch Schreibrechte! Wenn du sie auf Lesezugriff beschränken willst, musst du die DACL bis auf einen Eintrag lehren, der allen Benutzern Lesezugriff verleiht.} Desc.DACL := nil; // braucht man das? ACE := TJwSystemMandatoryAccessControlEntry.Create(MandatoryLevelLow); // oder MandatoryLevelUntrusted? try Desc.SACL.SetMandatoryLabel(ACE, cfPointAtInstance); finally ACE.Free; end; Attrs := Desc.Create_SA; //API-Struktur erstellen try hMapping := CreateFileMapping(INVALID_HANDLE_VALUE, @Attrs, PAGE_READWRITE, 0, 4, MappingGUID); finally TJwSecurityDescriptor.Free_SA(Attrs); end; finally Desc.Free; end; blackdrake |
Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a
Ich bin mir ziemlich sicher, dass das @ falsch ist. Ich erinnere mich aber auch daran, dass ich dort einen Cast durchführen musste, weil es zwei verschiedene SecurityAttributes-Definitionen gab. Ich werde das noch einmal nachprüfen.
Die DACL musst du nur setzen, wenn du den Standard-Konstruktor von TJwSecurityDescriptor verwendest, da dieser die DACL so füllt, dass niemand Zugriff erhält. Wenn du hingegen CreateDefaultByToken verwendest und die Default-Parameter verwendest, kannst du vermutlich darauf verzichten. Beim Aufruf von SetMandatoryLabel sind die Besitzverhältnisse nicht richtig. Durch cfPointAtInstance drückst du aus, dass die Instanz ACE direkt speichern soll. Durch das nachfolgende Free ziehst du ihr ihr den Eintrag unter den Füßen weg. Am besten lässt du einfach das Free weg und setzt OwnsObjects auf True (ich weiß nicht, ob das der Standard ist). Soweit ich das weiß, sind Mandatory Label und Integrity Label tatsächlich Synonyme. |
Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a
Zitat:
|
Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a
Zitat:
Delphi-Quellcode:
wurde konsequent überall verwendet, und ist erst jetzt durch die unterschiedliche Verwendung in der JWA und JWSCL zum Problem geworden. Eigentlich sollte es dasselbe sein und deshalb habe ich es auch geändert (SVN: 0.9.2a + trunk).
Pxxx = ^XXX;
LPxxx = ^XXX; Zitat:
nil = garkeine DACL-Klasse und damit Vollzugriff für jeden leere DACL-Klasse und damit Verweigerung für jeden Zitat:
Prozesse haben ein "Integrity Level" definiert in ihrem Token (Gruppe). Integrity Levels (=Verbindlichkeitsstufen) sind vordefinierte Benutzergruppen, die jedoch nicht über den Benutzermanager zuweisbar sind. Hier sind die SIDs:
Delphi-Quellcode:
In DACLs kommen Mandatory Labels (Verbindliche Beschriftungen) = ACE zum Einsatz, die eine Verbindlichkeitsstufen aufnehmen.
const JwLowIL = 'S-1-16-4096';
JwMediumIL = 'S-1-16-8192'; JwHighIL = 'S-1-16-12288'; JwSystemIL = 'S-1-16-16384'; JwProtectedProcessIL = 'S-1-16-20480'; Man verwendet also eine "Verbindliche Beschriftung" TJwSystemMandatoryAccessControlEntry und definiert im Konstruktor, welche Stufe es haben soll (und noch ein Flag).
Delphi-Quellcode:
Das sind die Stufen für die verbindliche Beschriftung. Daher werden sie von MS auch verbindliche Stufen genannt (nur um noch mehr Verwirrung zu stiften). Man hätte auch die Verbindlichkeitsstufen (=Gruppen) direkt als ACE einfügen und es mit dem ACE Typ "Integrity" versehen können (So macht es die JWSCL).
MANDATORY_LEVEL = (
MandatoryLevelUntrusted, {= 0} MandatoryLevelLow, MandatoryLevelMedium, MandatoryLevelHigh, MandatoryLevelSystem, MandatoryLevelSecureProcess, //MS vorbehalten MandatoryLevelCount); Die Flags (MandatoryPolicy) definieren, ob andere Objekte mit einem kleineren I.Level, das eigene Objekt schreiben, lesen und/oder ausführen können. Man setzt es, um dies zu verbieten.
Delphi-Quellcode:
TJwSystemMandatoryAccessControlEntry setzt eine leere Policy Menge!
type
TJwMandatoryPolicy = (mpNoWriteUp, mpNoReadUp, mpNoExecuteUp); TJwMandatoryPolicyFlagSet = set of TJwMandatoryPolicy; |
Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a
Danke für deine Antwort. Aber wie muss ich jetzt konkret vorgehen, damit ich mit IE zusammenarbeiten kann? Du schreibst ja oben auch etwas, dass Microsoft sich sogar 1 ML vorbehält. Ich blicke in der Materie einfach nicht richtig durch.
|
Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a
Erstmal solltest du die Libs aktualisieren mit den neusten Sourcen aus Subversion (SVN) und danach das Setup nochmals wiederholen.
Dann kannst du erstmal mit DACL := nil und ohne @ bei SecAttr ausprobieren, ob jeder Zugriff hat. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz