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
Thema durchsuchen
Ansicht
Themen-Optionen

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 2 von 3     12 3      
blackdrake

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

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

  Alt 4. Dez 2008, 21:34
Hallo.

Zitat von Apollonius:
Wenn du eine DLL mit LoadLibrary lädst und die DllProc dieser DLL false zurückgibt (in Delphi wird das in System.pas über ExitCode geregelt), gibt LoadLibrary nil zurück. Wie sich das bei Hook-Dlls verhält (bedenke, dass jede Applikation ihre eigene DLL-Instanz hat!), weiß ich nicht, ich vermute aber mal, dass Windows dort pragmatisch vorgeht und die DLL nur in diesen Prozess nicht lädt.
Mh, ein bisschen Problematisch.

Ich habe folgendermaßen getestet:

if FileExists('C:\ary.txt') then ExitCode := 2; InstallHook() wird durch die Host-Applikation zu Beginn 1 Mal aufgerufen. Anschließend wird der Hook gesetzt.

Das Problem: Wird dieser ExitCode nach dem Installieren der Hooks auf 2 gesetzt (durch die Anwesenheit der Datei ary.txt als eine Art "Signal"), dann interessiert Windows die LoadLibrary=False nicht. Der Hook wird trotzdem ausgeführt. Die Tastaturereignisse gehen weiterhin an die Host-Applikation.

Möglicherweise müsste ich innerhalb der Hook-Funktion in der DLL auf ExitCode != 0 prüfen. Wäre das sinnvoll?

Zitat von Apollonius:
Bezüglich der Rechte: Ausschlaggebend sind die angegebenen Rechte bei OpenFileMapping. Du solltest dir in deinem Hauptprogramm Security Attributes erstellen, die allen Benutzern Lese-Zugriff erlaubt, und diesen dann als Parameter für CreateFileMapping angeben. Eine solche Struktur lässt sich sehr elegant mit der JWSCL erzeugen; direkt über die API ist es etwas schwieriger.
Das hört sich ja schon wieder so kompliziert an Außerdem kann ich bei meinem Turbo Delphi keine 3rd Party VCLs direkt installieren. Gibt es keine andere Möglichkeit?

@Sir Rufo: Wie machst du das mit MTANWT? Verwendest du JWSCL oder einen anderen API-Trick?

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

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

  Alt 4. Dez 2008, 23:04
Ich habe auf den ganzem Krams verzichtet und prüfe in der Haupt-EXE per Timer ab, ob die DLL noch sperrt das ist simpel und robust.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
blackdrake

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

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

  Alt 4. Dez 2008, 23:06
Genau das mache ich doch auch. Die DLL frägt die Host-App per Message, ob der Mausklick OK ist oder nicht. Wurde mir ja auch empfohlen, weil eine Prüfung innerhalb der DLL nicht ressourcenschonend ist.
Daniel Marschall
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

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

  Alt 4. Dez 2008, 23:07
Falsch, bei mir sperrt die DLL und die Haupt-EXE fragt nur ab, ob die DLL noch sperrt, du machst das andersherum.

Zu den Ressourcen in der DLL: Da werde ich doch wohl noch zwei Cardinal-Werte vergleichen dürfen?

Die Aussage habe ich auch nie verstanden aber auch nie dementiert
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
blackdrake

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

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

  Alt 5. Dez 2008, 14:07
Das Problem bei der DLL-Internen Prüfung war ja, dass dann Timer innerhalb der DLL bei jedem Prozess anders wären. Ich finde das mit der Host-App im Endeffekt auch viel besser.


Weiß niemand, wie ich dieses Benutzerrechte-Hubbiflubbi beheben kann? Und ist es denn dann auch möglich, dass es dann mit Internet Explorer funktioniert? Ich verstehe einfach nicht, wieso der IE verbietet, dass ein Hook auf ein MemMap-File zuzugreift.
Daniel Marschall
  Mit Zitat antworten Zitat
Apollonius

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

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

  Alt 5. Dez 2008, 14:17
Die JWSCL ist keine Komponentensammlung, sondern eine Bibliothek. Diese müsstest du nur in das Hauptprogramm einbinden.
Zur Frage, warum der IE den Zugriff nicht erlaubt: In Vista gibt es sogenannte Integrity Labels. Prozesse mit einem niedrigen Integrity Label dürfen nicht auf Objekte mit einem höheren Label zugreifen. Der IE hat gewöhnlich ein IL von "niedrig", um zu verhindern, dass dein ganzer Rechner kompromittiert wird, wenn der IE einem Hack zum Opfer fällt. Dies halte ich für einen sinnvollen Schutzmechanismus, den du nebenbei bemerkt sicherlich abschalten kannst.
Bei CreateFileMapping hast du für die Security Attributes nil angegeben. Das führt dazu, dass ein Standard-Security-Descriptor gesetzt wird. Dieser hat nun das IL "normal". Daher kann Code aus dem IE nicht auf das MMF-Objekt zugreifen. Um das zu verhindern, musst du manuell einen Security Descriptor mit einem IL von "niedrig" erstellen. Eben dieses Erstellen vereinfacht die JWSCL erheblich, indem sie Security Descriptors als Objektinstanzen kapselt. Einen Blog zur JWSCL inklusive Downloadlink findest du hier.
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
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#17

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

  Alt 5. Dez 2008, 14:56
Zitat von blackdrake:
Das Problem bei der DLL-Internen Prüfung war ja, dass dann Timer innerhalb der DLL bei jedem Prozess anders wären. Ich finde das mit der Host-App im Endeffekt auch viel besser.
Wenn man Timer benutzt, dann mag das wohl stimmen, aber wer braucht dafür schon einen Timer
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
blackdrake

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

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

  Alt 5. Dez 2008, 16:10
Hallo

Apollonius, vielen Dank für die Ausführliche Beschreibung.

Ich habe nun versucht, JWSCL und JWAPI (was auch benötigt wird) einzubinden. Nachdem ich alle Pfade hingebogen habe, erhalte ich

[Pascal Fehler] JwsclToken.pas(4311): E2010 Inkompatible Typen: 'JwaWinNT.PSid' und 'JwsclSid.PSid'

Ich hoffe, dass meine EXE später noch auf eine CD passt, denn es scheint mir, als ob er versucht, alle 680 PAS Dateien einzubinden
Daniel Marschall
  Mit Zitat antworten Zitat
Apollonius

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

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

  Alt 5. Dez 2008, 16:16
Bist du dieser Anleitung gefolgt? Der Fehler sieht so aus, als versuchest du, Einzelunits und JwaWindows gleichzeitig zu nutzen.
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: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#20

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

  Alt 5. Dez 2008, 16:31
Ich komm mir langsam wie ein DAU vor...

Mein Suchpfad ist gesetzt auf:

jedi_api22a_jwscl092a\jwapi2.2a\Win32API;
jedi_api22a_jwscl092a\jwapi2.2a\Common;
jedi_api22a_jwscl092a\jwscl0.9.2a\source

Und im Projekt habe ich wie in dem einen Example-Code folgende Units eingebunden:

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, XPMan, Registry, ComObj, ShlObj,
  ActiveX, Menus, ImgList,

  JwaVista,
  jwaWindows,
  JwsclSecureObjects,
  JwsclDescriptor,
  JwsclMapping,
  JwsclAcl,
  JwsclTypes;
Und die Fehlermeldung kommt wieder.

Dabei habe ich die JWAPI vor der JWSCL deklariert.

Und im Blog steht ja nur "when you set JWAPI up, then just ..." - wie denn aufsetzen? Gibt es denn kein gescheites Schritt-für-Schritt Tutorial?
Daniel Marschall
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 19:39 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