
masm32-Kernelprogrammierung, Treiber, Tutorials, Beispiele und Tools (Credits Four-F)
Dregs Repo für seine eigenen Zwecke
masm32-Kernelprogrammierung, Treiber, Tutorials, Beispiele und Werkzeuge (Dank an Four-F)
Zu diesem Zeitpunkt wird eine .sys-Datei in C:\ erstellt.
Treiber laden:
w2k_load.exe oder osrloader.exe melden beim Laden von beeper.sys einen Fehler – ignorieren Sie ihn einfach.
Dieser Fehler wird vom Treibercode selbst erzeugt, wenn er seine eigene Ausführung beendet (mit diesem Trick braucht man ihn nicht zu entladen).
mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
ret
Wenn beep.sys also korrekt in den Kernel geladen wurde, sollten Sie einen Piepton aus Ihren Lautsprechern hören (der Treibercode erzeugt einen Piepton).
Wenn Sie einen Treiber entladen müssen, verwenden Sie:
Ich habe w2k_load.exe von Sven B. Schreiber modifiziert, damit es von Windows 2000 bis Windows 10 funktioniert (Manifest...).
Entpacken Sie osrloaderv30.zip und verwenden Sie dieses GUI-Programm:
Verwenden Sie für ältere Windows-Versionen einfach das in diesem Repo enthaltene DbgView.exe. Übrigens habe ich es modifiziert (Manifest...).
Verwenden Sie für moderne Windows-Versionen die neueste dbgview.exe von der Sysinternals-Website und sehen Sie sich dies zur Fehlerbehebung an:
Lesen Sie die .pdf-Dateien in diesem Repo und schauen Sie sich die Beispiele im Verzeichnis KmdKit18/examples an.
WARNUNG: Der gesamte ASM-Quellcode befindet sich in .bat-Dateien (Batch- und ASM-Code gemischt in derselben Datei).
Beispiel mit advanced\FindShadowTable\FindShadowTable.bat
;@echo off
;goto make
ASM DRIVER CODE GOES HERE
:make
set drv=FindShadowTable
\masm32\bin\ml /nologo /c /coff %drv%.bat
\masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj
del %drv%.obj
echo.
pause
Diese Datei enthält BATCH-Code, der eine .sys erzeugt, sowie den eigentlichen Treiberquellcode. Ja, es ist sehr knifflig – Build-Skript und Quellcode sind zusammen.
Dies ist ein Beispiel, wie man ServiceDescriptorTableShadow findet.
Es scannt lediglich Threads mit der ID 80h-400h, um einen Thread zu finden, dessen KTHREAD.ServiceTable ungleich KeServiceDescriptorTable ist. Wenn ein solcher Thread gefunden wird, enthält sein KTHREAD.ServiceTable die Adresse von ServiceDescriptorTableShadow.
Beobachten Sie die Debug-Ausgabe des Treibers mit DbgView (www.sysinternals.com) oder verwenden Sie SoftICE.
Getestet unter: Windows 2000, XP und Server 2003.
Dies ist ein Beispiel für einen einfachen Legacy- (Nicht-PnP-) PS/2-Tastaturfiltertreiber. WARNUNG: Sie werden ihn nicht an den USB-Tastaturstack anhängen können.
Getestet unter: Windows 2000, XP und Server 2003.
Four-F, [email protected] Diese Makrodateien stammen aus meinem Paket cocomac.
Dies ist ein Beispiel für einen einfachen Legacy- (Nicht-PnP-) PS/2-Mausfiltertreiber. WARNUNG: Sie werden ihn nicht an den USB-Mausstack anhängen können.
Getestet unter: Windows 2000, XP und Server 2003.
Dies ist ein Beispiel, wie man bestimmte Sicherheitseinstellungen auf ein benanntes Geräteobjekt anwendet, indem man IoCreateDeviceSecure anstelle von IoCreateDevice aufruft.
Da die Routine IoCreateDeviceSecure nicht Teil des Betriebssystems ist, binden wir wdmsec.lib ein, die alle benötigten Routinen enthält.
Die wdmsec.lib-Bibliothek, die Sie hier finden, ist nicht die mit dem DDK gelieferte. Ich musste sie neu erstellen, um ihre Größe zu reduzieren und nicht benötigte Member zu entfernen.
Dies ist ein Beispiel, wie man eine Datei erstellt, in sie schreibt, aus ihr liest und sie löscht.
Verwenden Sie KmdManager, um den Treiber zu registrieren/deregistrieren und zu starten. Beobachten Sie seine Debug-Ausgabe mit DbgView (www.sysinternals.com) oder verwenden Sie SoftICE.
Getestet unter: Windows 2000, XP und Server 2003.
Dies ist ein Beispiel, wie man den Treiber in Ressourcen verpackt.
Getestet unter: Windows 2000, XP und Server 2003.
So erfahren Sie, ob das System im abgesicherten Modus läuft oder nicht.
Verwenden Sie KmdManager, um den Treiber zu registrieren/deregistrieren und zu starten. Beobachten Sie seine Debug-Ausgabe mit DbgView (www.sysinternals.com) oder verwenden Sie SoftICE.
Getestet unter: Windows 2000, XP und Server 2003.
basic/MemoryWorks/LookasideList
Dies ist ein Beispiel, wie man eine Lookaside-Liste und eine doppelt verknüpfte Liste verwendet, um die aus der Lookaside-Liste zugewiesenen Speicherblöcke zu verwalten.
Verwenden Sie KmdManager, um den Treiber zu registrieren/deregistrieren und zu starten/stoppen. Beobachten Sie seine Debug-Ausgabe mit DbgView (www.sysinternals.com) oder verwenden Sie SoftICE.
Getestet unter: Windows 2000, XP und Server 2003.
Dies ist ein Beispiel, wie man Ausnahmen mit SEH behandelt. Aber denken Sie daran. MAN KANN NICHT ALLE AUSNAHMEN MIT SEH IM KERNELMODUS BEHANDELN!
Verwenden Sie KmdManager, um den Treiber zu registrieren/deregistrieren und zu starten/stoppen. Beobachten Sie seine Debug-Ausgabe mit DbgView (www.sysinternals.com) oder verwenden Sie SoftICE.
Getestet unter: Windows 2000, XP und Server 2003.
basic/MemoryWorks/SharedSection
Dies ist ein Beispiel, wie man ein benanntes Section-Objekt verwendet, um Speicher zwischen einem Benutzermodusprozess und einem Kernelmodus-Treiber zu teilen.