2017-01-19 3 views
0

In letzter Zeit habe ich mit Treibern in Windows 7 gespielt. Bisher habe ich einen Treiber gebaut, der mit einer Benutzermodus-Anwendung sprechen kann. Ich habe jedoch ein Problem beim Starten und Stoppen des Treibers. Zuerst installiere ich den Treiber und starte ihn, und es funktioniert gut. Ich höre auf, und es hört auch auf. Allerdings, wenn ich es erneut starten, es mit einem Fehler 2 Code "Kann die angegebene Datei nicht gefunden".Windows 7 Treiber - läuft nur einmal und erfordert einen Neustart

Um dies zu beheben, muss ich den Treiber deinstallieren und dann neu starten. Sobald ich neu gestartet habe, kann ich es erneut installieren und es einmal ausführen, und dann beginnt der Prozess von vorne.

Also meine Frage ist, wie ich dieses Problem umgehen? Ich hasse es wirklich, jedes Mal neu starten zu müssen, wenn ich meinen Treiber neu kompiliere und teste, also habe ich mich gefragt, ob ich bei meinem Build- und Bereitstellungsprozess etwas falsch mache.

Ich verwende die Standard-DDK-Befehlszeile für den Build-Prozess, und ich verwende eine App namens OSR Driver Loader, um den Treiber zu laden. Ich kann jedoch auch die SC-Befehlszeile verwenden, um es zu installieren.

Antwort

1

Ich löste es. Ich musste den von mir erstellten symbolischen Link löschen und die Device-Instanz löschen.

Hier ist der Code ich in die OnUnload Funktion:

// this deletes the symbolic link for the driver 
IoDeleteSymbolicLink(&deviceLinkUnicodeString); 

// this deletes the device 
IoDeleteDevice(g_RootkitDevice); 

So In voller brauchte ich dies als meine OnUnload Funktion haben:

VOID OnUnload(IN PDRIVER_OBJECT DriverObject) 
{ 
    // this deletes the symbolic link for the driver 
    IoDeleteSymbolicLink(&deviceLinkUnicodeString); 

    // this deletes the device 
    IoDeleteDevice(g_RootkitDevice); 
}