AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datei anklicken erkennen

Ein Thema von Delphi-Fan-Friedrichsdorf · begonnen am 7. Nov 2008 · letzter Beitrag vom 9. Nov 2008
Antwort Antwort
Delphi-Fan-Friedrichsdorf

Registriert seit: 10. Mär 2007
Ort: Friedrichsdorf
24 Beiträge
 
Delphi 6 Enterprise
 
#1

Datei anklicken erkennen

  Alt 7. Nov 2008, 20:00
Hallo,
um gleich zur frage zu kommen:
Gibt es eine Möglichkeit den Pfad der Datei zu bekommen die der Benutzer anklickt, also wie ein "on access"-Virenscanner?
Wenn es eine möglichkeit gibt, wie?
Das ganze natürlich mit Delphi.
Sebastian
"Alle großen Mathematiker haben ein "th" im Namen: Thales, Pythgoras,..."
Dr. M. BarTH, Mathelehrer
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Datei anklicken erkennen

  Alt 7. Nov 2008, 20:05
Per Shellüberwachung kannst du dich über das Öffnen, Schliessen, Verschieben, .., von Dateien, Ordnern usw benachrichtigen lassen
Markus Kinzler
  Mit Zitat antworten Zitat
Delphi-Fan-Friedrichsdorf

Registriert seit: 10. Mär 2007
Ort: Friedrichsdorf
24 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Datei anklicken erkennen

  Alt 7. Nov 2008, 21:36
Wie komme ich an die schellüberwachung ran?
Sebastian
"Alle großen Mathematiker haben ein "th" im Namen: Thales, Pythgoras,..."
Dr. M. BarTH, Mathelehrer
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Datei anklicken erkennen

  Alt 7. Nov 2008, 21:44
Z.B. mit diesem Wrapper
http://www.torry.net/vcl/filedrv/not...hellNotify.zip
Markus Kinzler
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Datei anklicken erkennen

  Alt 8. Nov 2008, 04:19
Soweit ich weiß kann MSDN-Library durchsuchenShChangeNotify nicht dazu verwendet werden um die Funktionalität zu implementieren, nach der hier gefragt wird. Generell ist die Implementation der Funktionalität nach der hier gefragt wird (er möchte über Programmstarts informiert werden und sie gegebenenfalls verhindern können), recht schwierig und es gibt nicht DIE Methode die bei jedem NT basierten System funktioniert.

Die jweils einfachste Methode hängt vom verwendeten Betriebssystem ab:

Windows vor Vista:
Pre Vista/2008 ist die einfachste Möglichkeit über eine Shell Extension die das MSDN-Library durchsuchenIShellExecuteHook Interface nutzt. Der Nachteil ist, das nur Programmstarts via ShellExecute abgefangen werden können. Das umfasst zwar eigentlich alles was man aus dem Browser heraus oder der Shell (sprich Explorer) heraus startet, umfasst aber nicht explizite Starts via CreateProcess bzw. WinExec. Das ganze funktioniert unter Vista leider nicht mehr, weil das verwendete IShellExecuteHook Interface in Vista als überholt gilt und deshalb abgeschaltet wurde. Man kann die alte Funktionalität zwar per Registry wieder aktivieren, aber ich halt von solchen systemweiten Registry Hacks nicht wirklich viel, vor allem weil man schnell mal unvorhergesehende Effekte auslösen kann, da sich das System auch für andere Applikationen nicht mehr so verhält, wie von Microsoft definiert. Um 64bit Windows Varianten unterstützen zu können, muss man ausserdem auf eine andere Programmiersprache ausweichen, die Native 64bit Code erzeugen kann, da Delphi nur 32bit Code erzeugt und der vom 64bit Explorer nicht genutzt werden kann.

Windows nach Vista SP1:
Mit Vista SP1 (und 2008) hat Microsoft einen Kernel Mode Callback eingefügt, mit dem man über Programmstarts informiert werden und diese dann auch blockieren kann. Nachteil ist hier der Zwang zum Kernel Mode und entsprechend halt auch der Zwang zu C/C++. Ein Treiber der die Funktionalität nutzt, ist eigentlich recht trivial und auch wenn man kein C/C++ Crack ist bekommt man das mit bissi probieren hin. Die verwendete API für den Callback heißt PsSetCreateProcessNotifyEx. Funktioniert auch mit 64bit Varianten problemlos, sofern man halt die Möglichkeit besitzt den verwendeten Treiber zu signieren.

Windows Vista SP0:
Ja, das ist so ein wenig das Problemkind. Shell Extensions funktionieren nicht wirklich, der Kernel Mode Callback existiert noch nicht. Da hilft nur die User zum Upgrade auf SP1 zu bewegen.


Die komplizierteren Methoden:

Kernel Mode Hooks
Funktioniert prinzipiell auf allen 32bit Varianten von Windows NT ab Version 4.0. Generell ein wenig "unschön", weil (offiziell zumindest) komplett undokumentiert. Da Kernel Mode gibts hier den Zwang zu C/C++. Welche API man hookt ist letztlich jedem selbst überlassen. Sowohl NtCreateProcess/NtCreateProcessEx als auch NtCreateSection wäre möglich. Gibt sicher noch andere APIs die gehookt werden können um die Funktionalität zu implementieren. Ohne WIRKLICH üble Hacks um den Kernel Schutz in den 64bit Windows Varianten zu umgehen, ist 64bit Support nicht möglich.

User Mode Hooks
Funktioniert prinzipiell auf allen Varianten von Windows NT. User Mode Hooks sind allerdings unsicher und wenn Du eine sicherheitsrelevante Applikation schreiben willst, sind User Mode Hooks keine wirkliche Alternative. Dafür kannst Du zumindest alle 32bit Varianten von Windows mit dem selben Code abdecken und es gibt recht brauchbare Komponenten für User Mode Hooks in Delphi, die Open Source und somit frei erhältlich sind (Hier im Forum suchenuallCollection z.B.). Hook SDKs für 64bit sind dagegen sehr teuer (Detours in der 64bit Variante kostet z.B. 50.000 US Dollar) und erfordern einen Compiler der Native 64bit Code erzeugen kann (meist C/C++). Dafür benötigt man bei 64bit Varianten von Windows kein Code Zertifikat.

File System Mini Filter Driver
Funktioniert ab Windows 2000 SP4. Eigentlich ist es für eine einfache Überwachung von Programmstarts fast ein wenig "Overkill", da man nicht nur Programmstarts mitbekommt, sondern komplett alle Dateisystemaktionen überwachen und blockieren kann. Deshalb wird diese Methode eigentlich auch ausnahmslos von allen AV Programmen mit On Access Scannern eingesetzt. Es handelt sich hierbei um Treiber, also Zwang zu C/C++ und bei 64bit Windows Zwang zum Code Zertifikat.

Ja, das sind die Methoden die mir auf die Schnelle einfallen. Sind bei weitem nicht alle, aber ist zumindest ein Anfang.
Fridolin Walther
  Mit Zitat antworten Zitat
Delphi-Fan-Friedrichsdorf

Registriert seit: 10. Mär 2007
Ort: Friedrichsdorf
24 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: Datei anklicken erkennen

  Alt 9. Nov 2008, 01:00
Danke für die ausführliche Antwort.
Ich denke, dass sich mein Problem damit lösen lässt.
Sebastian
"Alle großen Mathematiker haben ein "th" im Namen: Thales, Pythgoras,..."
Dr. M. BarTH, Mathelehrer
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:35 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