驅動版Hello world
純屬無聊的產物,請不要拍磚,先來看看彙編的,這個例子修改自4-F的KMD教程,我只是加了一句話而已T_T :
01 ;@echo off
02 ;goto make
03 ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
04 ; simplest - Simplest possible kernel-mode driver
05 ;
06 ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
07 .386
08 .model flat, stdcall
09 option casemap:none
10 ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
11 ; I N C L U D E F I L E S
12 ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
13 include /masm32/include/w2k/ntstatus.inc
14 include /masm32/include/w2k/ntddk.inc
15 ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
16 ; C O D E
17 ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
18 .code
19 ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
20 ; DriverEntry
21 ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
22 DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
23
24 invoke DdbPrint,$CTA0("Hello World!") ;; 列印訊息,但得通過偵錯程式或DbgView來捕捉
25
26 mov eax, STATUS_DEVICE_CONFIGURATION_ERROR ;;返回錯誤,使驅動被解除安裝
27 ret
28
29 DriverEntry endp
30 ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
31 end DriverEntry
32 ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
33 ; B U I L D I N G D R I V E R
34 ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
35 :make
36 set drv=simplest
37 /masm32/bin/ml /nologo /c /coff %drv%.bat
38 /masm32/bin/link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj
39 del %drv%.obj
40 echo.
41 pause
這個驅動是用批處理進行編譯的,下面的是C語言版的,更簡單了,用的是驅動模板的生成檔案,也是隻修改了一
句話,嘿嘿,,,看來這一貼是水定了:
01
02 ////////////////使用驅動模板生成/////////////////////
03 extern "C"
04 {
05 #include <ntddk.h>
06 #include <ntddndis.h>
07 #include <pfhook.h>
08 }
09
10 NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryString)
11 {
12
13 DbgPrint("Hello world!"); //列印訊息,但得通過偵錯程式或DbgView來捕捉
14 return STATUS_DEVICE_CONFIGURATION_ERROR; //返回錯誤,使驅動被解除安裝
15
16 }
檔案明顯短了一半,但這種寫法是不好的,至少也應該填充幾個常用的例程,但這個是入門級的,所以能省一點
就省一點。似乎這兩份程式碼都是豆腐工程......