2013-01-09 7 views
7

Ich muss ein Programm schreiben, um ein Passwortfenster anzuzeigen, wenn Benutzer versucht, auf eine Datei oder einen Ordner in C++ für Win XP & Win 7 zuzugreifen (für 32bit und 64bit). Aber der schwierige Teil ist, dass ich IAT \ EAT oder Inline-Hooking für diese Aufgabe nicht verwenden kann, da es erforderlich ist, eine Bit Microsoft unterstützte Methode für dieses Projekt zu verwenden.Abfangen von Datei Ordner I O ohne API-Hooking oder Filtertreiber

Während Googeln für dieses, es wurde auch in vielen Foren erwähnt, dass dies mit einem Dateisystem-Filter-Treiber erreicht werden kann, aber ich frage mich, wie ich ein Passwort-Dialog von einem Mini-Treiber zeigen.

Ich denke, eine Shell-Erweiterung könnte diesen Job erledigen, aber msdn Dokumentationen zeigt, dass Shell-Erweiterung nicht zum Abfangen von E/A-Aufruf verwendet werden kann.

Bitte Beratung, danke im Voraus.

+1

Was verhindert, dass ein Benutzer eine DOS-Box starten kann und nur Konsolenbefehle verwendet, um zu bekommen, was er will? – selbie

+4

Ich schreibe eine Treiberkomponente, der Treiber selbst würde wahrscheinlich keine Benutzeroberfläche zeigen. Aber es könnte bis zu einer Benutzermodus-App (ala task tray app) kommunizieren, um eine UI zum Sammeln von Krediten zu starten. – selbie

Antwort

4

Sie benötigen Kernel-Treiber, um das zu erreichen. Shell-Hooks und -Extensions werden nur aktiviert, wenn auf die Datei über die Shell zugegriffen wird (z. B. im Windows Explorer angeklickt) und nicht ausgelöst werden, wenn auf die Datei direkt von anderen Programmen zugegriffen wird.

Ich hatte eine ähnliche Herausforderung bei der Arbeit an On-Access-Anti-Virus.

Aber wie @selbie sagte, der Treibercode selbst kann keine interaktiven Eingabeaufforderungen verarbeiten - es muss mit Benutzermoduscode kommunizieren, um das zu erreichen. Dies kann eine eigenständige App sein oder Ihre DLL wird automatisch in jeden Prozess geladen. In meinem Fall mussten wir, wenn eine Benutzerantwort erforderlich war, die Treiber- und Benutzermodus-App über Pipes kommunizieren lassen - der Treiber würde die Nachricht an die Benutzermodus-App leiten (falls sie aktiv war) und dann auf eine Antwort warten. Die App gab eine schnelle und piped Antwort an den Treiber zurück.

Das Thema Datei-E/A-Hooking wurde auch in earlier thread here diskutiert.