Steward
分享是一種喜悅、更是一種幸福
驅動程式 - Windows Driver Model (WDM) - 使用範例 - C/C++ (DDK) - Hello, world!
參考資訊:
https://wasm.in/
http://four-f.narod.ru/
https://github.com/steward-fu/wadk
這個範例主要列印Hello, world!字串,在DriverEntry()回傳-1,意指驅動程式沒有載入成功,這個練習主要是熟悉如何編譯、載入驅動程式以及查看Debug訊息
main.c
#include <wdm.h>
NTSTATUS DriverEntry(PDRIVER_OBJECT pMyDriver, PUNICODE_STRING pMyRegistry)
{
DbgPrint("Hello, world!\n");
return -1;
}
main.inf
[Version] Signature="$WINDOWS NT$" Class=Unknown Provider=%MFGNAME% DriverVer=10/01/2026,1.0.0.0 [Manufacturer] %MFGNAME%=DeviceList %MFGNAME%=DeviceList,NTamd64 [DeviceList] %DESCRIPTION%=DriverInstall.NTamd64,*MyDriver [DeviceList.NTamd64] %DESCRIPTION%=DriverInstall.NTamd64,*MyDriver [DestinationDirs] DriverCopyFiles=12 [SourceDisksNames] 1=%INSTDISK% [SourceDisksFiles] main.sys=1 [DriverInstall.NTamd64] CopyFiles=DriverCopyFiles [DriverCopyFiles] main.sys [DriverInstall.NTamd64.Services] AddService=FILEIO,0x00000002,DriverService [DriverService] DisplayName=%SERVICE_DESC% ServiceType=1 StartType=3 ErrorControl=1 ServiceBinary=%12%\main.sys [DriverInstall.NTamd64.HW] AddReg=DriverHwAddReg [DriverHwAddReg] HKR,,SampleInfo,,"" [Strings] MFGNAME="MyDriver" INSTDISK="MyDriver Disc" DESCRIPTION="MyDriver" SERVICE_DESC="MyDriver Kernel Driver"
autorun.inf
[autorun] open=run.bat
run.bat
e: devcon.exe install main.inf *mydriver devcon.exe remove main.inf *mydriver
fix.py
import os
import sys
import pefile
if len(sys.argv) != 2:
print('Usage: {} xxx'.format(sys.argv[0]))
sys.exit()
fname = sys.argv[1]
pe = pefile.PE(fname);
pe.OPTIONAL_HEADER.CheckSum = pe.generate_checksum();
pe.write(fname);
Makefile
CFLAGS += -target i686-pc-windows-msvc CFLAGS += -D_X86_ CFLAGS += -Xclang CFLAGS += -fdefault-calling-conv=stdcall CFLAGS += -I/opt/wadk/xpddk/inc/wxp CFLAGS += -I/opt/wadk/xpddk/inc/ddk/wxp CFLAGS += -I/opt/wadk/xpddk/inc/ddk/wdm/wxp CFLAGS += -I/opt/wadk/xpddk/inc/crt LDFLAGS += /driver LDFLAGS += /base:0x10000 LDFLAGS += /subsystem:native LDFLAGS += /entry:DriverEntry LDFLAGS += /safeseh:no LDFLAGS += /opt/wadk/masm32/lib/wxp/i386/ntoskrnl.lib all: clang $(CFLAGS) -c main.c lld-link main.o $(LDFLAGS) /out:main.sys python3 fix.py main.sys run: genisoimage -R -J -o cdrom.iso * /opt/wadk/tools/devcon.exe myqemu winxp clean: rm -rf main.sys main.o cdrom.iso
編譯
$ make $ make run
完成