Friday, June 26, 2009

WDM Driver

WDM程式編譯出來的並不是我們常見的.exe,而是.sys檔案,在未經設定編譯環境之前,是不能直接用VC來編譯的.其實驅動程式也是一種PE檔案,它同樣由DOS MZ header開頭,也有完整的DOS stub和PE header,同樣擁有Import table和Export table.

我們可以使用tdump.exe來分析.sys檔案.首先使用Delphi裡附帶的tdump.exe程式,然後鍵入︰C:\WINNT\System32\Drivers>tdump ccport.sys -em -ee
參數-em是列出Import table,-ee是列出Export table。返回之後,螢幕列出一大堆東西︰

C:\WINNT\SYSTEM32\DRIVERS>tdump ccport.sys -em -ee
Turbo Dump Version 5.0.16.12 Copyright ? 1988, 2000 Inprise Corporation
Display of File CCPORT.SYS

IMPORT: NTOSKRNL.EXE={hint:011Fh}.’memcpy’
IMPORT: NTOSKRNL.EXE={hint:003Dh}.’IoDeleteDevice’
IMPORT: NTOSKRNL.EXE={hint:0030h}.’IoAttachDeviceToDeviceStack’
IMPORT: NTOSKRNL.EXE={hint:008Eh}.’KeSetEvent’
IMPORT: NTOSKRNL.EXE={hint:0068h}.’IofCallDriver’
IMPORT: NTOSKRNL.EXE={hint:0095h}.’KeWaitForSingleObject’
IMPORT: NTOSKRNL.EXE={hint:0074h}.’KeInitializeEvent’
IMPORT: NTOSKRNL.EXE={hint:003Fh}.’IoDetachDevice’
IMPORT: NTOSKRNL.EXE={hint:00D3h}.’RtlFreeUnicodeString’
IMPORT: NTOSKRNL.EXE={hint:0077h}.’KeInitializeSpinLock’
IMPORT: NTOSKRNL.EXE={hint:0129h}.’strcpy’
IMPORT: NTOSKRNL.EXE={hint:0121h}.’memset’
IMPORT: NTOSKRNL.EXE={hint:003Ch}.’IoCreateUnprotectedSymbolicLink’
IMPORT: NTOSKRNL.EXE={hint:0038h}.’IoCreateDevice’
IMPORT: NTOSKRNL.EXE={hint:00C2h}.’RtlAnsiStringToUnicodeString’
IMPORT: NTOSKRNL.EXE={hint:0069h}.’IofCompleteRequest’
IMPORT: NTOSKRNL.EXE={hint:0124h}.’sprintf’
IMPORT: NTOSKRNL.EXE={hint:003Eh}.’IoDeleteSymbolicLink’
IMPORT: NTOSKRNL.EXE={hint:0042h}.’IoFreeIrp’
IMPORT: NTOSKRNL.EXE={hint:004Dh}.’IoInitializeIrp’
IMPORT: NTOSKRNL.EXE={hint:002Dh}.’IoAllocateIrp’
IMPORT: NTOSKRNL.EXE={hint:0027h}.’InterlockedExchange’
IMPORT: NTOSKRNL.EXE={hint:0025h}.’InterlockedCompareExchange’
IMPORT: NTOSKRNL.EXE={hint:0035h}.’IoCancelIrp’
IMPORT: NTOSKRNL.EXE={hint:012Ah}.’strlen’
IMPORT: NTOSKRNL.EXE={hint:0126h}.’strcat’
IMPORT: NTOSKRNL.EXE={hint:0114h}.’atoi’
IMPORT: NTOSKRNL.EXE={hint:0128h}.’strcmp’
IMPORT: NTOSKRNL.EXE={hint:0034h}.’IoBuildSynchronousFsdRequest’
IMPORT: NTOSKRNL.EXE={hint:00D5h}.’RtlInitAnsiString’
IMPORT: HAL.DLL={hint:0006h}.’KfAcquireSpinLock’
IMPORT: HAL.DLL={hint:0009h}.’KfReleaseSpinLock’

EXPORT ord:0001=’Vcomm_DriverControl’

我們可以很清楚地看到,它主要是用了NTOSKRNL.EXE和HAL.DLL檔案(幾乎所有的WDM驅動程式都會使用NTOSKRNL.EXE檔案),並且輸出了一個函數“Vcomm_DriverControl”。

這說明.sys跟.exe檔案都是一種PE檔案,不同的是.sys檔案Import的通常是NTOSKRNL.EXE,而.exe檔案Import的通常是KERNEL32.DLL和USER32.DLL。

因為.sys通常不使用KERNEL32.DLL和USER32.DLL,所以是不能在設備驅動程式裡面使用任何C、C++和Win32函數,而且也不能使用C++關鍵字new和delete等(不過可以用malloc和free來代替),而必須使用大量的內核函數。

下面是列出一些常見的驅動程式可用的內核函數︰
Ex… 執行支援
Hal… 硬體抽象層(僅NT/Windows 2000)
Io… I/O管理器(包括即插即用函數)
Ke… 內核
Ks… 內核流IRP管理函數
Mm… 內存管理器
Ob… 對象管理器
Po… 電源管理
Ps… 進程架構
Rtl… 營運時庫
Se… 安全引用監視
Zw… 其他函數

Saturday, June 13, 2009

心煩

公司的事情讓我有點心煩,可是當我想起毛毛的承諾的時候.一切就沒有煩惱了,我要守候我答應毛毛的承諾.所以我要努力衝衝衝.謝謝你,毛毛.謝謝你,毛毛.因為這樣.讓我大聲的說我愛你.

Saturday, June 6, 2009

疲倦

昨天一場激戰,好累好累真的好累.原本OK的, 結果我修正了, 另外一不部分有異狀. 本想說請他改到其他Solution下去跑, 結果馬上有其他聲音出現. 最後是兩個都不行 ........

到底是要修到好還是要出版本出去比較重要 ?再加上最近事情特別多, 6/20 又有新的東西要出來, 宣布時間點又剛好是定飯店時間的之前 (應該是我第一次問和最後確定有的中間點), 兩者的交叉趕工, 讓我工作好累好累. 下班之後很擔心毛毛最近怎麼了, 還有一些 Work List要做完. 也很想和毛毛見面 .......

今天可以放我一天假嗎 ? 不想做任何事情, 只想做我想做的事情. 我疲倦了.

希望你可以明白, 昨天已經沒有力氣告訴你了. 直到今天早上五點多又醒了, 因為工作還沒Final, 擔心會Delay到六月中和毛毛的旅行. 七點我又倒下去了, 直到剛剛醒來沖個澡之後才稍微有精神一點.

前陣子我胸口有一種差點喘不口氣的感覺, 大概是我太疲倦了吧.

Sunday, May 31, 2009

梅酒

昨天喝了一杯梅酒,梅酒果真是女人的最愛,不過不是很適合我這種喝的. 因為有點酸 ...

接觸的人越多, 看的也越多. 也就是如此. 假期結束了, 該繼續努力工作了.

Sunday, May 17, 2009

毛毛的夢

毛毛的夢想快要實現了, 在這感覺到很高興, 可是 .........

毛毛在很努力的為了它的夢想努力, 我也會努力加油的. 為了昨晚和你說的話

我會努力加油的.

Monday, April 20, 2009

想念

想念某個人 ..... Do u know ?

Tuesday, April 7, 2009

凌晨四點

睡不著的一晚,不知道為何突然醒來了.於是打開電腦想做點事情吧.已經很久沒有像現在這個樣子了,雯雯的教訓應該又會提醒我這樣很不好,我想也是吧,只是偶而一次這樣又無妨呢?

聽著饒舌的音樂,念著英文,我在思考我下一個目標是什麼?我要往前衝,衝衝衝.