AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL ab

Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL ab

Offene Frage von "blackdrake"
Ein Thema von blackdrake · begonnen am 3. Dez 2008 · letzter Beitrag vom 8. Dez 2008
Antwort Antwort
Seite 3 von 3     123
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a

  Alt 5. Dez 2008, 17:40
Ich gebe zu, dass das Setup nicht ganz trivial ist. Ich hatte damit auch schon Probleme. Du musst die zweite Variante wählen, die hier erwähnt wird. Dazu suchst du dir zuerst das Package, dass du verwenden willst (bei mir immer Dynamic Debug) und kompilierst es. In deinen Suchpfad kommt dann der Bin-Ordner des Packages. Nicht in den Suchpfad gehören Win32API und Common! Wenn du so die JWA-Header installiert hast, sollte es bei der JWSCL keine Probleme mehr geben.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#22

Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a

  Alt 5. Dez 2008, 18:10
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:
  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);
Aus dem Example-Projekt konnte ich nicht wirklich etwas rauslesen. Auch habe ich nicht gesehen, wie jetzt ein Dateirecht auf Alle-Lesen gesetzt wurde.

Auserdem verstehe ich nicht den Zusammenhang zwischen dem Security-Descriptor und dem Integrity-Level, das ich auf "niedrig" setzen möchte.

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#23

Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a

  Alt 6. Dez 2008, 00:22
Security Descriptors sind nicht mein Spezialgebiet (speziell die Vista-spezifischen Integrity Labels), aber ich versuche trotzdem, deine Fragen nach besten Wissen zu beantworten.
Zitat:
Auserdem verstehe ich nicht den Zusammenhang zwischen dem Security-Descriptor und dem Integrity-Level, das ich auf "niedrig" setzen möchte.
In einem Security Descriptor sind ALLE sicherheitsrelevanten Einstellungen verzeichnet, also u.A. der Besitzer, die Discretionary Access Control List und eben auch das Integrity Label.

Vereinfacht könnte dein Code auf einem vor-Vista-System so aussehen:
Delphi-Quellcode:
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;
Um zusätzlich das Integrity Label zu setzen, musst du die SACL ändern. Das geht über die Methode TJwSAccessControlList.SetMandatoryLabel.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#24

Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a

  Alt 6. Dez 2008, 01:09
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:
  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;
Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#25

Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a

  Alt 6. Dez 2008, 12:23
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#26

Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a

  Alt 6. Dez 2008, 16:19
Zitat von blackdrake:
Und im Blog steht ja nur "when you set JWAPI up, then just ..." - wie denn aufsetzen?
Wo steht das? Dann könnte ich es deutlicher machen.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#27

Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a

  Alt 7. Dez 2008, 01:34
Zitat von Apollonius:
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.
Irgendwie ist das alles ein bisschen unkonsistent. Es hieß, dass S... inkompatibel ist mit PS..., weswegen ich einfach den Pointer von S... genommen habe, also einfach ein @ daran gehängt. Eigentlich sollte ja der Name vor dem "P" eindeutig sein, oder? Ich habe ja lediglich einen Pointer gegeben, wo ein Pointer verlangt wurde. Das verwirrt mich irgendwie.

Zitat von Apollonius:
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.
Hört sich ein bisschen kompliziert an. Ich habe mit dem "nil" ein Problem: Ich denke, dass "nil" soviel wie "leere ACL-Liste" bedeutet. Und da Windows bei Dateirechten die Regel Deny-Before-Allow verwendet, müsste eine leere Liste einen Zweifelsfall darstellen (in diesem Fall einen nicht definierten Fall 0-0), bei dem Windows sich für Deny entscheiden muss (deswegen vielleicht der Fehler "mapping file could not be accessed"?)

Zitat von Apollonius:
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).
OK, probiere ich mal aus. Die Fehlermeldung kommt aber auch ohne Verwendung von ACE.

Zitat von Apollonius:
Soweit ich das weiß, sind Mandatory Label und Integrity Label tatsächlich Synonyme.
Denke ich auch. Aber irgendwie scheint etwas mit deiner vorherigen Beschreibung von niedrigen Integrity-Labels falsch zu sein. Eventuell ist das Mandatory Label der Kehrwert der I-Labels. Bei den M-Labels gibt es nämlich die Stufen Untrusted..Low.....High, was ja eigentlich bedeutet, wenn ich möchte, dass meine Anwendung mit IE kommuniziert brauche ich ja eigentlich kein niedriges Label, sondern ein hohes. (Eventuell entspricht ein niedriges M-Label einenem hohem I-Level)
Daniel Marschall
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#28

Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a

  Alt 7. Dez 2008, 11:26
Zitat von blackdrake:
Irgendwie ist das alles ein bisschen unkonsistent. Es hieß, dass S... inkompatibel ist mit PS..., weswegen ich einfach den Pointer von S... genommen habe, also einfach ein @ daran gehängt. Eigentlich sollte ja der Name vor dem "P" eindeutig sein, oder? Ich habe ja lediglich einen Pointer gegeben, wo ein Pointer verlangt wurde. Das verwirrt mich irgendwie.
Ich gebe ja zu, dass es verwirrend ist. Diese Definition:
Delphi-Quellcode:
  Pxxx = ^XXX;
  LPxxx = ^XXX;
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).

Zitat von blackdrake:
Hört sich ein bisschen kompliziert an. Ich habe mit dem "nil" ein Problem: Ich denke, dass "nil" soviel wie "leere ACL-Liste" bedeutet. Und da Windows bei Dateirechten die Regel Deny-Before-Allow verwendet, müsste eine leere Liste einen Zweifelsfall darstellen (in diesem Fall einen nicht definierten Fall 0-0), bei dem Windows sich für Deny entscheiden muss (deswegen vielleicht der Fehler "mapping file could not be accessed"?)
Denke dir einfach:
nil = garkeine DACL-Klasse und damit Vollzugriff für jeden
leere DACL-Klasse und damit Verweigerung für jeden



Zitat von Apollonius:
Soweit ich das weiß, sind Mandatory Label und Integrity Label tatsächlich Synonyme.
Das ganze Prinzip nennt man "Integrity Level".
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:
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';
In DACLs kommen Mandatory Labels (Verbindliche Beschriftungen) = ACE zum Einsatz, die eine Verbindlichkeitsstufen aufnehmen.

Man verwendet also eine "Verbindliche Beschriftung" TJwSystemMandatoryAccessControlEntry und definiert im Konstruktor, welche Stufe es haben soll (und noch ein Flag).
Delphi-Quellcode:
 MANDATORY_LEVEL = (
    MandatoryLevelUntrusted, {= 0}
    MandatoryLevelLow,
    MandatoryLevelMedium,
    MandatoryLevelHigh,
    MandatoryLevelSystem,
    MandatoryLevelSecureProcess, //MS vorbehalten
    MandatoryLevelCount);
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).

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:
type
  TJwMandatoryPolicy = (mpNoWriteUp, mpNoReadUp, mpNoExecuteUp);
  TJwMandatoryPolicyFlagSet = set of TJwMandatoryPolicy;
TJwSystemMandatoryAccessControlEntry setzt eine leere Policy Menge!
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#29

Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a

  Alt 7. Dez 2008, 21:57
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.
Daniel Marschall
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#30

Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a

  Alt 8. Dez 2008, 10:48
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.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:00 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