19 Stimmen

Abfangen der von Windows geöffneten Datei

Ich versuche, ein kleines Programm zu erstellen, das den Öffnungsprozess einer Datei abfangen kann.

Wenn ein Benutzer auf eine Datei in einem bestimmten Ordner doppelklickt, informiert Windows die Software, die dann die Petition verarbeitet und Windows die Daten der Datei zurückgibt.

Vielleicht gibt es eine andere Lösung, wie z. B. die Überwachung von Öffnungsmeldungen und die Erzwingung, dass Windows wartet, während das Programm den Inhalt der Datei vorbereitet.

Eine Anwendung dieses Konzepts könnte darin bestehen, die Entschlüsselung einer Datei auf für den Benutzer transparente Weise zu verwalten. In diesem Zusammenhang würde sich die verschlüsselte Datei auf der Festplatte befinden, und wenn der Benutzer sie öffnet (mit einem Doppelklick oder mit einer Anwendung wie Notepad), würde der Hintergrundprozess dieses Öffnungsereignis abfangen, die Datei entschlüsseln und den Inhalt der Datei an die anfragende Anwendung weitergeben.

Es ist ein etwas seltsames Konzept, es könnte wie das "Man In The Middle"-Netzwerkkonzept sein, aber mit Dateien anstelle von Netzwerkpaketen.

Vielen Dank für die Lektüre.

16voto

Brian R. Bondy Punkte 325712

Der beste Weg, um alle Fälle des Öffnens aus einem beliebigen Programm abzudecken, wäre ein Dateisystem-Filtertreiber . Dies könnte jedoch zu komplex für Ihre Bedürfnisse sein.

14voto

Luke Quinane Punkte 16188

Sie können den Trick anwenden, dass Prozess-Explorer verwendet, um sich durch den Task-Manager zu ersetzen. Erstellen Sie im Grunde einen Schlüssel wie diesen:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe

Wo Sie ersetzen 'taskmgr.exe' mit dem Namen des abzufangenden Prozesses. Fügen Sie dann einen String-Wert namens 'Debugger' die den Pfad zu Ihrer ausführbaren Datei enthält. z.B:

Debugger -> "C:\windows\system32\notepad.exe"

Jedes Mal, wenn ein Prozess ausgeführt wird, der mit dem Namen des Bildes übereinstimmt, wird Ihr Prozess tatsächlich als Debugger für diesen Prozess mit dem Pfad zum aktuellen Prozess als Argument aufgerufen.

10voto

Len Holgate Punkte 20590

Sie können Code-Injektion und API-Umleitung verwenden. Sie starten Ihren Zielprozess und injizieren dann eine DLL, die die Windows-API-Funktionen abfängt, die Sie abfangen wollen. Sie werden dann aufgerufen, wenn der Zielprozess denkt, dass er OpenFile() oder was auch immer aufruft, und Sie können tun, was Sie wollen, bevor Sie den Aufruf an die echte API weiterleiten.

Googeln Sie nach "IAT Hooking".

0voto

mic.sca Punkte 1620

Windows verfügt über eine Option zum Verschlüsseln von Dateien auf der Festplatte (Datei->Eigenschaften->Erweitert->Verschlüsseln), und diese Option ist für die Anwendungen völlig transparent.

Vielleicht sollten Sie zum Verschlüsseln und Entschlüsseln von Dateiabschnitten einer Festplatte Software wie Criptainer in Betracht ziehen?

Es gibt auch diese Software http://www.truecrypt.org/downloads (kostenlos und quelloffen), aber ich habe es nicht ausprobiert.

Die Entwicklung einer maßgeschneiderten Lösung klingt sehr schwierig.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X