驅動入門系列---驅動級鍵盤記錄器(一)

驅動入門系列---驅動級鍵盤記錄器(一)  

走過了VC++到驅動開發,回頭看,才發現真是迂迴曲折。今天,應一個朋友之邀,結合一個完整的例子,寫一點驅動入門的東西,希望對初學者能有所幫助。爲了更深入的學習驅動開發,我將用DDK 和Compuware DriverStudio V3.2兩種方法來構建這個例子。

我也只是入門,理解也未必正確,有錯誤的地方望多多指教。有問題歡迎與我聯繫。郵箱爲[email protected], QQ爲35777618。對於這本教程,您可以免費獲得。如果需要轉載,請保證其完整性。另外,不得剽竊任何內容作爲任何贏利出版物的全部或者部分。

一. 驅動開發環境搭建

系統平臺:WinXP

開發環境:VC6.0 + XPDDK

 1. 序言

過去驅動程序的編譯、調試都是在CMD命令行進行的,這多少有些不便。對此,網上有不少朋友總結了在VC6.0的IDE環境下進行驅動程序的開發,大大方便了用DDK進行驅動開發的步驟,這裏我再來詳細說一下用VC6.0來集成驅動的開發環境,至於命令行的方式,有興趣的朋友可以參看我的另一篇文章: 

2. 詳細步驟

2.1 創建一個目錄DriverDev(目錄名隨意),作爲你開發驅動的大本營然後添加兩個用戶環境變量,一個是DDKROOT,他的值應該是你所安裝DDK的根目錄。(比如在安裝DDK時安裝到了d:\WINDDK\2600,那麼 DDKROOT的值應該爲d:\WINDDK\2600),另外一個變量是WORKPATH,這個變量的值就應該是你第一步所創建的驅動工程目錄的路徑。(若按本文,WORKPATH的值應該是D:\DriverDevelop),這兩個變量會在我們接下來的工程配置中要用到,當然既然是變量,他們的名稱是隨你的喜歡了

2.2  在D:\DriverDevelop下創建一個名稱爲DIRS的無擴展名的文件。用記事本打開它,寫上 DIRS=Hello。Hello是你的驅動文件所在的文件夾名. 在該目錄(D:\DriverDevelop\Hello)下創建一個批處理文件MakeDrvr.bat,內容如下:

@echo off

if "%1"=="" goto usage1
       if "%3"=="" goto usage2
       if not exist %1\bin\setenv.bat goto usage3


       call %1\BIN\setenv %1 %4

%2
       cd %3  去掉,這裏有問題,否則提示找不到文件
       build -b -w %5 %6 %7 %8
       goto ok

:usage1
       echo Error: the first parameter is NULL!
       goto exit

:usage2
       echo Error: the third parameter is NULL! 
       goto exit

:usage3
        echo Error: %1\bin\setenv.bat not exist!
        goto exit

:ok
       echo MakeDriver %1 %2 %3 %4
       :exit

簡要說明:該批處理首先對傳遞的參數作一些檢查,然後調用ddk的setenv命令設置環境變量,然後改變目錄爲源程序所在驅動器和目錄,並最後調用build,-b保證顯示完全的錯誤信息,-w保證在屏幕上輸出警告,在vc ide裏的output窗口中可以看到這些錯誤和警告。

2.3. 建立一個空白Makefile工程

選File的new菜單項,然後選project欄的makefile,然後輸入路徑,一路next下去即可,visual studio提供兩種配置win32 debug和win32 release. 如下圖:

驅動入門系列---驅動級鍵盤記錄器(一) - sun201201 - 西北望,射天狼

2.4. 修改這兩種配置

選project的settings菜單項win32 debug:
       在Build Command Line一欄填入MakeDriver %DDKROOT% E: %WORKPATH% CHECKED

這裏要特別注意你工作的盤符,即E:,一定不能錯,否則的話,會一直編譯WDM庫,而不編譯你的程序
       在Rebuild all options一欄填入 -nmake /a
       在output file一欄填入與sources文件中的TARGETNAME相同的文件名,這裏是Hello.sys

如下圖:     

驅動入門系列---驅動級鍵盤記錄器(一) - sun201201 - 西北望,射天狼
  win32 release: 
  選project的settings菜單項win32 Release:
       在Build Command Line一欄填入MakeDriver %DDKROOT% E: %WORKPATH% FREE
       在Rebuild all options一欄填入 -nmake /a
       在output file一欄填入與sources文件中的TARGETNAME相同的文件名,這裏是Hello.sys 如下圖:

驅動入門系列---驅動級鍵盤記錄器(一) - sun201201 - 西北望,射天狼
       2.5. 添加源文件到工程

可以新建,也可以添加,這和普通的win32開發一樣。注意DDK開發驅動程序需要用C語言,不要使用C++. 這裏需要先添加一個KeyLog.h文件和KeyLog.cpp文件。文件內容以後再添加。

2.6. 添加資源文件

選Project的Add to Project菜單的New菜單項即可,如下圖:

驅動入門系列---驅動級鍵盤記錄器(一) - sun201201 - 西北望,射天狼

2.7. 把makefile文件放入源程序目錄

makefile 無擴展名的文件,內容總是一樣,也可以直接從DDK源代碼那裏拷貝過來一個,內容如下:

#
       # DO NOT EDIT THIS FILE!!!  Edit .\sources. if you want to add a new source
       # file to this component.  This file merely indirects to the real make file
       # that is shared by all the driver components of the Windows NT DDK
       #

!INCLUDE $(NTMAKEENV)\makefile.def

2.8 創建一個sources文件,內容如下:

TARGETNAME=KeyLog    //這是要生成的驅動程序.sys文件的名字
       TARGETPATH=obj      //
       TARGETTYPE=DRIVER  //驅動程序的類型,一般不變 
        INCLUDES=$(DDKROOT)\inc; $(DDKROOT)\inc\DDK    //ddk包含文件路徑,一般不變
        TARGETLIBS=$(DDK_LIB_PATH)\usbd.lib \ $(DDK_LIB_PATH)\ntoskrnl.lib
        SOURCES=KeyLog.c

2.9 至此,環境設置完畢,KeyLog.cpp 和 KeyLog.h 輸入內容後,你可以按F7, build你的驅動程序了。

 

好了,今天就先到這裏了,下次我將繼續講解驅動實現的詳細內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章