Readfile-Operation eines bestimmten Dateityps loggen
-
Beasy
- Beiträge: 5
- Registriert: 30.12.2009 14:07
- Computerausstattung: Mein erster PC:
386 sx 25 Prozessor
20 MB Festplatte
4 MB S3-Grafikkarte
Zwei Floppy-Laufwerke - Wohnort: Friesland
Readfile-Operation eines bestimmten Dateityps loggen
Hallo Zusammen,
ich möchte gerne eine Anwendung unter Windows XP / Vista / 7 schreiben, die in der Taskbar residiert und aktiv werden soll, wenn von einem beliebigen Programm aus ein bestimmter Dateityp aufgerufen wird.
Als einfachstes Beispiel können wir ja mal den Editor heranziehen. Eine Textdatei kann ja von vielen verschiedenen Programmen aus aufgerufen werden. (Word, Wordpad, Lister, Editor von Windows, Emacs)…..whatever…
Das Ganze könnte im Code dann ungefähr so aussehen:
If RegisterWindowsMessage_ReadFile („.txt“) = „true“ then
Messagerequester(„Information“,„Die Textdatei „ + Dateipfad.s + „ wurde gelesen“)
EndIf
Wie kann man mitbekommen, dass ein Programm eine Readfile-Operation auf ein beliebiges Textfile ausführt? Und wie kommt man dann an die Datei (Lesezugriff)?
(Ich bin mit dem Message Handling von Windows nicht so vertraut, da ich bisher nur Datenbank-Programme geschrieben habe)
Für jede Anregung bin ich äußerst dankbar…
ich möchte gerne eine Anwendung unter Windows XP / Vista / 7 schreiben, die in der Taskbar residiert und aktiv werden soll, wenn von einem beliebigen Programm aus ein bestimmter Dateityp aufgerufen wird.
Als einfachstes Beispiel können wir ja mal den Editor heranziehen. Eine Textdatei kann ja von vielen verschiedenen Programmen aus aufgerufen werden. (Word, Wordpad, Lister, Editor von Windows, Emacs)…..whatever…
Das Ganze könnte im Code dann ungefähr so aussehen:
If RegisterWindowsMessage_ReadFile („.txt“) = „true“ then
Messagerequester(„Information“,„Die Textdatei „ + Dateipfad.s + „ wurde gelesen“)
EndIf
Wie kann man mitbekommen, dass ein Programm eine Readfile-Operation auf ein beliebiges Textfile ausführt? Und wie kommt man dann an die Datei (Lesezugriff)?
(Ich bin mit dem Message Handling von Windows nicht so vertraut, da ich bisher nur Datenbank-Programme geschrieben habe)
Für jede Anregung bin ich äußerst dankbar…
----------------------
In der Ruhe liegt die Kraft, in der Länge die Last
In der Ruhe liegt die Kraft, in der Länge die Last
- NicTheQuick
- Ein Admin
- Beiträge: 8812
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Readfile-Operation eines bestimmten Dateityps loggen
Nur noch mal zur Klarheit. Du willst also einfach nur überwachen können, wann eine Datei gelesen / geschrieben wird, ähnlich einem Virenscanner.
Möchtest du nur loggen oder weiterhin auch den Zugriff auf eine Datei sperren können, wenn ein Programm sie öffnen will?
Welchen Dateityp du dann letztendlich überprüfen willst, ist ja das kleinere Problem. Unter Windows musst du da ja nur die Dateiendung überprüfen.
Ich hab leider keine Antwort für dich, aber so wird vielleicht jedem klarer, was du genau willst. Mir war es noch nicht ganz klar.
Möchtest du nur loggen oder weiterhin auch den Zugriff auf eine Datei sperren können, wenn ein Programm sie öffnen will?
Welchen Dateityp du dann letztendlich überprüfen willst, ist ja das kleinere Problem. Unter Windows musst du da ja nur die Dateiendung überprüfen.
Ich hab leider keine Antwort für dich, aber so wird vielleicht jedem klarer, was du genau willst. Mir war es noch nicht ganz klar.
-
Beasy
- Beiträge: 5
- Registriert: 30.12.2009 14:07
- Computerausstattung: Mein erster PC:
386 sx 25 Prozessor
20 MB Festplatte
4 MB S3-Grafikkarte
Zwei Floppy-Laufwerke - Wohnort: Friesland
Re: Readfile-Operation eines bestimmten Dateityps loggen
@ NicTheQuick
Ja, ich möchte überwachen können, wann eine Datei mit einer bestimmten Dateiendung gelesen wird. Ich möchte nur loggen, nichts sperren.
Ja, ich möchte überwachen können, wann eine Datei mit einer bestimmten Dateiendung gelesen wird. Ich möchte nur loggen, nichts sperren.
----------------------
In der Ruhe liegt die Kraft, in der Länge die Last
In der Ruhe liegt die Kraft, in der Länge die Last
- coder
- Beiträge: 204
- Registriert: 25.09.2005 17:53
- Computerausstattung: Intel Core2Quad Q8200 @ 2.33GHz
ASUS P5Q3, 2GB DDR3-1066 RAM, ATi Raedeon HD 4850 - Wohnort: Deutschland
- Kontaktdaten:
Re: Readfile-Operation eines bestimmten Dateityps loggen
Meines erachtens geht das nur mit einem Api-Hook (ich lasse mich aber auch gerne eines anderen belehren), dazu musst du mal nach remoteapi oder so suchen, da gibs eine DLL für PureBasic mit Hilfe, Beipielen und Erklärungen...
Ist allerdings doch etwas aufwendiger, denke ich.
mfg
//Edit:
Hier ist die DLL vorgestellt:
http://www.purearea.net/pb/showcase/show.php?id=181&d=1
http://www.purebasic.fr/german/viewtopic.php?t=2764
Ist allerdings doch etwas aufwendiger, denke ich.
mfg
//Edit:
Hier ist die DLL vorgestellt:
http://www.purearea.net/pb/showcase/show.php?id=181&d=1
http://www.purebasic.fr/german/viewtopic.php?t=2764
Windows 7 x64 | PureBasic 4.60 4.50 4.02
Ja verdammt, meine Eltern wohnen immer noch bei mir!
Ja verdammt, meine Eltern wohnen immer noch bei mir!
-
Beasy
- Beiträge: 5
- Registriert: 30.12.2009 14:07
- Computerausstattung: Mein erster PC:
386 sx 25 Prozessor
20 MB Festplatte
4 MB S3-Grafikkarte
Zwei Floppy-Laufwerke - Wohnort: Friesland
Re: Readfile-Operation eines bestimmten Dateityps loggen
Nicht gerade einfach zu verstehen, der Code der RemoteApi. Nun habe ich ja das Problem, dass die Anwendung, welche die Datei startet, mir nicht bekannt ist. Das würde bedeuten, das Programm müsste alle Prozesse überwachen, die gerade laufen. Sicher für die Performance des Systems nicht die beste Lösung.
Es muss doch im Kernel eine Funktion geben, die auf das Dateisystem zugreift, wenn ein Prozess dies anfordert. Dort müsste man einhaken (Hook ist sicher richtig). Wenn also ein Prozess eine Datei aufrufen möchte, prüfe ich nur noch die Erweiterung, ist es eine Textdatei, wird mein Programm tätig.
Gibt es hier vielleicht jemand, der weiß, welche Systemmeldung man an dieser Stelle abhorchen müsste?
Es muss doch im Kernel eine Funktion geben, die auf das Dateisystem zugreift, wenn ein Prozess dies anfordert. Dort müsste man einhaken (Hook ist sicher richtig). Wenn also ein Prozess eine Datei aufrufen möchte, prüfe ich nur noch die Erweiterung, ist es eine Textdatei, wird mein Programm tätig.
Gibt es hier vielleicht jemand, der weiß, welche Systemmeldung man an dieser Stelle abhorchen müsste?
----------------------
In der Ruhe liegt die Kraft, in der Länge die Last
In der Ruhe liegt die Kraft, in der Länge die Last
- coder
- Beiträge: 204
- Registriert: 25.09.2005 17:53
- Computerausstattung: Intel Core2Quad Q8200 @ 2.33GHz
ASUS P5Q3, 2GB DDR3-1066 RAM, ATi Raedeon HD 4850 - Wohnort: Deutschland
- Kontaktdaten:
Re: Readfile-Operation eines bestimmten Dateityps loggen
Aha, das was du möchtest lässt sich glaube ich mit einem RootKit oder GlobalHook machen und ich glaube weiterhin, das man dazu irgendwie Treiber oder etwas derart schreiben muss...
Also noch ein Stück komplizierter
Also noch ein Stück komplizierter
Windows 7 x64 | PureBasic 4.60 4.50 4.02
Ja verdammt, meine Eltern wohnen immer noch bei mir!
Ja verdammt, meine Eltern wohnen immer noch bei mir!
Re: Readfile-Operation eines bestimmten Dateityps loggen
@Beasy: Der FileMon von Sysinternals protokolliert Dateizugriffe.
http://technet.microsoft.com/de-de/sysi ... fault.aspx
Vielleicht lässt sich aus der Doku zu dem Tool etwas herausfinden.
Grüße ... Kiffi
http://technet.microsoft.com/de-de/sysi ... fault.aspx
Vielleicht lässt sich aus der Doku zu dem Tool etwas herausfinden.
Grüße ... Kiffi
a²+b²=mc²
Re: Readfile-Operation eines bestimmten Dateityps loggen
FileMon arbeitet auch mit API-Hooks.
Ich meine ich hätte auch mal was von File Access Notifications gelesen aber ich konnte gerade nichts dazu in der MSDN finden.
Per API Hook wäre aber möglich.
Das ganze ist aber ein wenig komplex und auch fehleranfällig. Manche Programme mögen es nicht, wenn man DLL's in sie injiziert. ^^
Also das ganze könnte man so lösen:
Dein Programm injiziert eine DLL in jeden Prozess. Diese DLL enthält Code, der die API Funktion CreateFile hookt, also den Aufruf dieser Funktion auf eine eigene Funktion innerhalb deiner DLL umbiegt. Diese Funktion auf die der Aufruf umgebogen wird, prüft nun ob dein Programm benachrichtigt werden soll darüber das auf die Datei zugegriffen wird. Wenn ja, dann tut sie das, z.B. über Window Messages aber da gibt es verschiedene Wege.
Das Hooken ansich ist nicht ganz simpel, aber dazu kannst du RemoteAPI verwenden.
Ich meine ich hätte auch mal was von File Access Notifications gelesen aber ich konnte gerade nichts dazu in der MSDN finden.
Per API Hook wäre aber möglich.
Das ganze ist aber ein wenig komplex und auch fehleranfällig. Manche Programme mögen es nicht, wenn man DLL's in sie injiziert. ^^
Also das ganze könnte man so lösen:
Dein Programm injiziert eine DLL in jeden Prozess. Diese DLL enthält Code, der die API Funktion CreateFile hookt, also den Aufruf dieser Funktion auf eine eigene Funktion innerhalb deiner DLL umbiegt. Diese Funktion auf die der Aufruf umgebogen wird, prüft nun ob dein Programm benachrichtigt werden soll darüber das auf die Datei zugegriffen wird. Wenn ja, dann tut sie das, z.B. über Window Messages aber da gibt es verschiedene Wege.
Das Hooken ansich ist nicht ganz simpel, aber dazu kannst du RemoteAPI verwenden.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

-
Beasy
- Beiträge: 5
- Registriert: 30.12.2009 14:07
- Computerausstattung: Mein erster PC:
386 sx 25 Prozessor
20 MB Festplatte
4 MB S3-Grafikkarte
Zwei Floppy-Laufwerke - Wohnort: Friesland
Re: Readfile-Operation eines bestimmten Dateityps loggen
Vielen Dank zunächst an alle, die hier geantwortet haben.
@coder
Ja, das schein die einzige Möglichkeit zu sein, wie man das Problem umgehen kann, jeden Prozess einzeln zu injizieren.
Meinen Recherchen zufolge ist es nicht gerade einfach, einen Treiber zu schreiben. (Geht das überhaupt mit Purebasic?)
Ich denke für einen Hobbyprogrammierer eine Nummer zu heftig? Oder hat jemand hier sowas schon mal gemacht und könnte mir die Richtung zeigen, wie man das angeht?
@kiffi
Das Tool macht genau, was ich will. In der Beschreibung habe ich nix gefunden, aber es gibt Quellcode zu diesem Programm. Leider bin ich nicht in der Lage, diesen zu verstehen.
@Thorium
Die File Access Notifications funktionieren nur bei Createfile, Movefile, Deletefile. Ich habe ein Beispiel heruntergeladen, das diese Funktionen in einem Ordner überwacht und das Ergebnis anzeigt.
Link: http://msdn.microsoft.com/en-us/library ... S.85).aspx
Beim Öffnen einer Datei tut sich leider nix.
Wenn ich wirklich jeden Prozess überwachen muss, gibt das ja eine Unmenge an Fehlermöglichkeiten, die alle abgefangen werden müssen, ich glaube, das wird zu aufwändig.
Ich glaube, was ich brauche ist ein Filesystem Filter Driver (thx@coder). Vielleicht hat ja jemand eine Idee dazu, ich gehe nochmal auf die Suche, werde dann hier berichten.
Nochmal danke an alle, die hier helfen.
@coder
Ja, das schein die einzige Möglichkeit zu sein, wie man das Problem umgehen kann, jeden Prozess einzeln zu injizieren.
Meinen Recherchen zufolge ist es nicht gerade einfach, einen Treiber zu schreiben. (Geht das überhaupt mit Purebasic?)
Ich denke für einen Hobbyprogrammierer eine Nummer zu heftig? Oder hat jemand hier sowas schon mal gemacht und könnte mir die Richtung zeigen, wie man das angeht?
@kiffi
Das Tool macht genau, was ich will. In der Beschreibung habe ich nix gefunden, aber es gibt Quellcode zu diesem Programm. Leider bin ich nicht in der Lage, diesen zu verstehen.
@Thorium
Die File Access Notifications funktionieren nur bei Createfile, Movefile, Deletefile. Ich habe ein Beispiel heruntergeladen, das diese Funktionen in einem Ordner überwacht und das Ergebnis anzeigt.
Link: http://msdn.microsoft.com/en-us/library ... S.85).aspx
Beim Öffnen einer Datei tut sich leider nix.
Wenn ich wirklich jeden Prozess überwachen muss, gibt das ja eine Unmenge an Fehlermöglichkeiten, die alle abgefangen werden müssen, ich glaube, das wird zu aufwändig.
Ich glaube, was ich brauche ist ein Filesystem Filter Driver (thx@coder). Vielleicht hat ja jemand eine Idee dazu, ich gehe nochmal auf die Suche, werde dann hier berichten.
Nochmal danke an alle, die hier helfen.
----------------------
In der Ruhe liegt die Kraft, in der Länge die Last
In der Ruhe liegt die Kraft, in der Länge die Last
Re: Readfile-Operation eines bestimmten Dateityps loggen
Treiber ist ne ganz schlechte Idee. Aus 2 Gründen:Beasy hat geschrieben: Ich glaube, was ich brauche ist ein Filesystem Filter Driver (thx@coder). Vielleicht hat ja jemand eine Idee dazu, ich gehe nochmal auf die Suche, werde dann hier berichten.
Nochmal danke an alle, die hier helfen.
1.) Kann ein Fehler in einem Treiber eine kritische Sicherheitslücke darstellen und anderen Programmen volle Rechte verschaffen, die diesen Fehler ausnutzen. Deshalb sollte ein Treiber nur eingesetzt werden, wenn wirklich nötig und dann sollte er auch mit bedacht auf dieser Problematik programmiert werden.
2.) Nicht signierte Treiber lassen sich nicht unter Vista und Win 7 verwenden. Bzw. nicht ohne das Windows bei jedem Boot anhält und sich über den Treiber beschwert.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
