2011-01-13 7 views
-2

Ich habe einen Kernel-Treiber geschrieben, der sich in einen Prozess einklinkt und einen Ordner versteckt. Dieser Treiber funktioniert sehr gut, bis ich eine externe Festplatte anschließe.Wie kann ich einen Kernel-Treiber-Absturz in Windows debuggen?

An diesem Punkt stürzt mein Betriebssystem (entweder Windows XP oder Server 2003) mit einem blauen Bildschirm des Todes (BSOD) ab.

Was könnte diesen Absturz verursachen, und wie kann ich meinen Treiber ändern, um ihn zu lösen?

+3

Es ist fast wie wenn man sagt: "Doktor, mir geht es heute nicht gut, können Sie mir helfen?" – Mehrdad

+0

Doktor, mein Arm tut weh, wenn ich das tue. Dann tu das nicht. – leppie

+0

Ich muss externe Festplatte an das System anschließen –

Antwort

1

Es gäbe zwei Möglichkeiten, im Allgemeinen sein:

  1. post-mortem-Debugging. Dies ist normalerweise der Fall, wenn Sie keine lokale Maschine zur Verfügung haben, um den Absturz zu reproduzieren. In diesem Fall untersuchen Sie die crashdump-Datei (Voll- oder Mini-Dump).
  2. Live-Debugging. Wenn Sie in diesem Fall wissen, dass das System abstürzen wird, bereiten Sie eine Maschine vor, um diese Maschine mit WinDbg zu steuern und über ein serielles oder FireWire-Kabel zu verbinden. Letzteres ist viel schneller.

Allerdings stimme ich zu, dass Sie zu wenig Details geben. Sie "Haken"? Nun wie? SSDT-Haken? Oder verwenden Sie die richtige Schreibweise eines Filtertreibers? Wenn ein Filtertreiber, welches Modell? Mini-Filter oder Legacy-Filter?

Ich bemerkte gerade Ihren Kommentar, dass Sie "NtOpenProcess und NtQueryDirectoryFile" haken, so dass es wie SSDT-Hooking klingt. Was genau tun Sie in Ihrer Implementierung? Ich kenne viele Treiber, die unsachgemäße SSDT-Hooks machen. Es beginnt mit der Methode, die verwendet wird, um den Hook an Ort und Stelle zu bringen, und endet normalerweise nicht mit einer gewagten Implementierung.

Bitte beachten Sie, dass WinDbg für das Live-Debugging einige nützliche Funktionen bietet, um Ihre neueste Treiberversion beim Booten zu übertragen und zu laden. So können Sie Ihre neueste Version ohne zusätzliche Vorbereitung debuggen. Der Kernel-Debugger auf dem Remote-Ende und WinDbg auf Ihrem Computer werden sich darum kümmern.

Auch möchten Sie vielleicht Ihre Frage zu den Listen bei OSR (nämlich NTDEV).

0

Sie haben fast keine technischen Details des BSOD gepostet, oder wie Ihr Code funktioniert, daher ist es unmöglich, eine spezifische Antwort zu geben. Als allgemeiner Ausgangspunkt würde ich vorschlagen, dass Sie den Minidump analysieren, um einige Details darüber zu erhalten, was schief gelaufen ist, um den BSOD auszulösen. Hier ist ein guter Einstieg Guide.

http://forums.majorgeeks.com/showthread.php?p=1418737

1

Wenn Sie Kernel-Treiber entwickeln, möchten Sie diese normalerweise auf einer virtuellen Maschine mit einer Kernel-Debugger-Verbindung testen (Host ist Debugger, VM ist Debuggee). Einige Umgebungen mit virtuellen Maschinen bieten direkte Unterstützung für das Debugging.

Danach müssen Sie natürlich auf einer Vielzahl von physischen und virtuellen Hardware debuggen.