2010-11-29 13 views
5

Ich versuche, einen sehr einfachen Treiber zu bauen. Sein einziger Zweck wird es sein, "PsSetCreateProcessNotifyRoutine" zu registrieren und bei Callbacks, die vom Kernel empfangen wurden, meine Win32-Anwendung darüber zu informieren, welche Prozesse gestartet und beendet werden.Kommunikation zwischen Delphi-Anwendung und Windows NT-Systemtreiber

Ich weiß nur, wie man einen so einfachen Treiber mit "DriverEntry" und "DriverUnload" erstellt und mit DDK kompiliert. Aber ich weiß nicht, wie ich die Kommunikation tatsächlich umsetzen soll. Ich weiß, dass es mit IOCTL gemacht werden kann. Aber darüber hinaus bin ich im Dunkeln. Ich kann kein einfaches Beispiel dafür finden, wie man das in Delphi macht. Ich weiß nur, dass es getan werden kann.

Also was ich suche ist ein einfaches und verständliches Tutorial, wie man es besser macht oder ein Beispiel Delphi-Programm mit einem umfassenden Treibercode. Vielleicht gibt es sogar andere Arten der Kommunikation.

Jede Hilfe würde geschätzt werden.

+2

Runner diese Frage überprüfen http://StackOverflow.com/Questions/3489501/How-to-recognise-that-an-Anwendung-intends-to-execute-run-a-file/3489779#3489779 der WMI hat die 'ExecNotificationQuery'-Ereignis in Verbindung mit der' Win32_Process'-Klasse kann erkennen, wenn ein Prozess startet oder gestoppt wird. – RRUZ

+0

Danke für die Info. Im Allgemeinen mag ich WMI nicht, aber in diesem Fall ist es einen Blick wert. Ein Fahrer ist hier eine ziemlich drastische Wahl, auch wenn er sehr effektiv ist. – Runner

+0

@RRUZ, dein Kommentar war sehr gut, aber ich akzeptierte die Antwort von ihm selbst, was auch gut war und die Antwort auf die eigentliche Frage war. – Runner

Antwort

2

Egal ob in Delphi oder nicht. Sie müssen die Funktion DeviceIoControl verwenden. Lesen Sie die article in MSDN darüber.

Kurz gesagt, müssen Sie einige IOCTL codes aus dem verfügbaren Set wählen. Dann rufen Sie DeviceIoControl mit einem dieser Codes auf und übergeben einige Daten, und im Treiber verarbeiten Sie diese Anfrage und geben etwas anderes zurück.

Sie können auch Standard-IOCTLS verarbeiten, z. B. solche, die beim Aufruf von ReadFile oder WriteFile im Benutzermodus generiert werden.

Suchen Sie nicht nach einem "Tutorial, wie man das in Delphi macht", suchen Sie einfach nach einem Tutorial. Sie sind alle gleich, unabhängig von der Sprache, es ist reines Win32/Native API-Zeug. Here's one zum Beispiel, googelte es einfach.

+0

Danke, schau mal rein. Ich habe das Delphi-Beispiel gesagt, weil man oft Konstanten, Funktionsprototypen etc. definieren oder nach bereits getroffenen Definitionen suchen muss. Ich möchte das nicht durchmachen, wenn ich nicht muss. Ich suche keine Abkürzungen, nur das Wissen von jemandem, der das schon getan hat. – Runner

+2

Die Übersetzung fast aller API-Header ist bei JEDI (http://delphi-jedi.org/) verfügbar. Aber ich denke, Sie brauchen nicht viel von Benutzermodus, es ist nur DeviceIoControl und Standard-Win32-Funktionen (CreateFile usw.), alle in Windows.pas definiert. – himself

+0

+1 für Jedi Apilib – Remko