/ / Ereignisse aus dem Kernel-Modus an einen Windows-Dienst senden - C ++, Windows, Multithreading, Kernel

Senden Sie Ereignisse an einen Windows-Dienst von Kernel-Modus - C ++, Windows, Multithreading, Kernel

Ich schreibe eine Software, die aus bestehteinen Kernelmodustreiber und einen Windows-Dienst im Benutzermodus. Der Kernel-Treiber muss den Dienst über verschiedene Ereignisse und Informationen informieren, die der Dienst dann verarbeiten wird.

Meine Frage ist diese: Wie lässt sich diese Kommunikation am besten einrichten? Ich weiß, dass es möglich ist, eine Nachricht vom Kernel mit einem Minifilter und FilterGetMessage () abzurufen, dies erfordert jedoch eine Abfrage des Kernels nach neuen Daten. Ich brauche ein System, mit dem der Kernel den Dienst benachrichtigen kann, wenn neue Daten verarbeitet werden müssen.

Nebenbei bemerkt verwendet der Dienst selbst dieEs gibt einen Thread, der nur dem Abrufen von Daten aus dem Kernel und dem Ablegen einer Warteschlange für einen anderen Satz von Worker-Threads dient. Alle Gedanken zu diesem Design sind ebenfalls willkommen.

Antworten:

2 für die Antwort № 1

Warum nicht einfach ReadFile oder DeviceIoControl verwenden?die Service-Seite? Einfaches IRP auf der Treiberseite. Schließen Sie es ab, wenn Sie etwas zu berichten haben. Der Dienst muss einen Thread hochfahren oder einen E / A-Beendigungsrückruf verwenden. Und CancelIo, um den Sperranruf abzubrechen, wenn der Dienst beendet wird.