青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統計

最新評論

WDM驅動程序設計之編譯安裝篇

  設計開發好自己的WDM驅動程序后,為了運行該驅動程序,我們必須編譯和安裝它們。

  編譯設備驅動程序的方法

  安裝DDK后,在DDK程序組下有Check和Free兩個編譯環境,Check環境用于編譯帶調試信息的驅動程序,Free則是編譯正式發布版本的環境。通常情況下設備驅動程序的編譯采用命令行的方式。通過一定的設置可以在VC ++的集成環境下編譯。

  一般來說,成功編譯一個最基本的設備驅動程序需要四個文件,第一個是驅動程序,即C語言源程序文件(例如vdisk.c,注意下面所有的例子都是以vdisk來說明);第二個是RC文件(例如vdisk.rc);第三個是sources文件;第四個文件是makefile.rc文件。sources文件和make文件類似,用來指定需要編譯的文件以及需要連接的庫文件。這三個輔助文件都很簡單,在DDK samples的每個例程里都有三個這樣的文件,依樣畫瓢就能理解它們的結構和意義。

  1.舉例分析

  以下以vdisk程序為例,設vdisk.rc代碼為:

  /vdisk.rc/

  #include

  #include

  #define VER_FILETYPE  VFT_DRV

  #define VER_FILESUBTYPE VFT2_DRV_SYSTEM

  #define VER_FILEDESCRIPTION_STR "SCSI VDisk Driver"

  #define VER_INTERNALNAME_STR "vdisk.sys"

  #define VER_ORIGINALFILENAME_STR "vdisk.sys"

  #include "common.ver"

  /end of vdisk.rc/

  設備驅動程序一般都使用Build實用程序來進行,Build只是NMAKE外面的一個外包裝程序。Build本身其實相當簡單,編譯的大部分工作實際上由Build傳遞給NMAKE來進行。

  /SOURCES/

  TARGETNAME=vdisk

  TARGETTYPE=DRIVER

  TARGETPATH=$(BASEDIR)\lib

  TARGETLIBS=$(BASEDIR)\lib\\$(DDKBUILDENV)\scsiport.lib

  INCLUDES=..\..\inc

  SOURCES=vdisk.c vdisk.rc

  /end of SOURCES/

  注意SOURCES的文件名沒有任何擴展名。

  # makefile

  #

  # 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

  # end of makefile

  對所有驅動程序而言,makefile都是一樣的,Microsoft也警告不要編輯這個文件,如果需要,可以編輯修改sources文件達到同樣的效果。對于設備驅動程序,所使用的C編譯器基本上無一例外地選用VC++。

  2.編譯的基本步驟

  (1)首先進入check或free編譯環境,初始化DDK編譯環境。

  (2)運行VC安裝目錄下bin目錄下的vcvars32.bat,初始化VC++編譯環境。

  (3)運行Build.exe進行編譯。

  ■設備驅動程序的安裝和啟動

  1.添加注冊表中的鍵值

  Windows NT在引導的時候,通過掃描注冊表構造驅動程序列表。這個列表既包括自啟動的驅動程序,也包括需要手工啟動的驅動程序。這個列表其實就是控制面板中設備Applet所列出來的所有設備。所有的設備驅動程序應該在注冊表的HKEY_LOCAL_MACHINE\System\CurrentControl-

  Set\Services\下有相應的鍵值。下面以vdisk為例來說明如何添加鍵值:

  首先在HKEY_LOCAL_MACHINE\ System\ Current ControlSet\Services\下添加一個子項vdisk,注意這里的名稱應該和你的驅動程序名稱一致。例如驅動程序名稱是vdisk.sys,那么這里的子項名稱就是vdisk。然后在vdisk下添加以下鍵值:

名稱
數據類型
說明
Type REG_DWORD 驅動程序的種類
Start REG_DWORD 驅動程序的起始啟動時間
ErrorControl REG_DWORD 驅動裝入失敗的錯誤處理
Group REG_SZ 驅動程序的組名
DependOnGroup REG_MULTI_SZ 所依賴的其他驅動程序
Tag REG_BINARY 同組內驅動程序裝入順序
Parameters (key) 驅動程序特定的參數鍵

  Type值為1表示內核模式驅動程序;為2表示文件系統驅動程序。

  ErrorControl值為0表示日志記錄錯誤并忽略;值為1表示日志記錄錯誤并顯示一個對話框;值為2表示日志記錄錯誤,并用最后的正確配置重新啟動;值為3表示日志記錄錯誤,如果已經使用過正確配置,返回失敗。

  在任何一個設備驅動程序中,上表中的前三項參數都是必需的。

  2.控制驅動程序的裝入次序

  有時候控制多個驅動程序的裝入次序是必要的。例如一套驅動程序中包括三個驅動程序,分別是jbChanger.sys,changerDisk.sys和vdisk.sys。jbChanger和changerDisk是兩個SCSI類驅動程序,它們都依賴SCSI小端口(mini port驅動程序),同時changerDisk必須在jbChanger啟動之后啟動。vdisk是虛擬的磁盤驅動程序,它必須在jbChanger和changerDisk都啟動之后才能啟動成功。

  3.驅動程序的Start值

  上面注冊表中驅動程序的Start值控制驅動程序在系統啟動的時間。目前,Start可以取以下值,此外為該值留有擴展余地,以適用于新的要求:

  (l)0x0 (SERVICE_BOOT_START):這個值指定本驅動程序應該由操作系統裝入程序啟動。一般的驅動程序不會采用本值,因為系統在這個時候幾乎還沒有啟動,大部分系統尚不可用。

  (2)0x1 (SERVICE_SYSTEM_START):該值表示在操作系統裝入后但同時初始化它自己時啟動驅動程序。

  (3)0x2 (SERVICE_AUTO_START):該值表示在整個系統啟動并運行后由服務控制管理器裝入。

  (4)0x3 (SERVICE_DEMAND_START):該值表示該驅動程序必須手工啟動。可以通過控制面板的設備applet或者使用WIN32 API編程來啟動。

  (5)0x4 (SERVICE_DISABLED):表示本驅動程序被禁用。

  注意在調試驅動程序的時候,最好將Start值設置為3來手工啟動,這是因為如果設置為自動啟動,而驅動程序在啟動的過程中又發生了異常錯誤的話,可能導致系統不能啟動。

  如果沒有緊急恢復盤,首先可以嘗試在啟動的時候選擇用已知的配置來啟動系統,看是否能啟動成功。如果失敗,可以用DOS啟動后到\%SystemRoot%\System32\Drivers目錄下將出現問題的驅動程序刪除,然后系統就可以啟動了。

  不過如果NT安裝在NTFS分區,DOS啟動后將看不到這個分區,這樣就必須將硬盤掛到另一NT系統上來刪除這個文件了。通過設置Start可以控制驅動程序在不同的時候啟動。但如果要解決依賴性問題,則需要使用Group和DependOnGroup值。

  首先要確定自己的驅動程序使用的Group名,系統有一些定義好的組名,對于當前系統存在的組名,可以觀察注冊表的\HKEY_LOCAL_MACHINE\System\CurrentControl-

  Set\Control\ServiceGroupOrder\List的鍵值。例如該值可以設置為:

  …

  SCSI miniport

  port

  Primary disk

  SCSI class

  SCSI CDROM class

  filter

  boot file system

  …

  這里每一行都是一個Group名,一般來說某個驅動程序都屬于某一個Group。系統啟動時按照該List下組的順序依次啟動各組里的驅動程序。例如jbChanger和changerDisk都屬于SCSI Class組。如果你覺得該表中的組名都不合適,可以在該List的適當位置中添加新的組名。

  DependOnGroup值控制本驅動程序啟動的時候必須先啟動另一組的驅動程序,例如jbChanger和changerDisk的啟動就依賴于SCSI miniport組。因此jbChanger和changerDisk的DependOnGroup值都為SCSI miniport。

  4.修改注冊表的方法

  在注冊表里這些值可以手工修改,也可以自己編程利用WIN32 API進行添加,同時也可以用ini文件的方式來添加。下面是一個ini(文件名為vdisk.ini)文件的例子。

  \Registry\Machine\System\CurrentControl

  Set\Services\VDisk

  Type=REG_DWORD 0x00000001

  Start=REG_DWORD 0x00000003

  ErrorControl=REG_DWORD 0x00000001

  Group=SCSI Class

  Parameters

  DriveLetter=N:

  然后以vdisk.ini為參數運行REGINI.EXE。就會自動在注冊表里添加相應的項。

  在注冊表里添加好這些項后,必須重新啟動系統,這樣所添加的設備驅動程序才能在控制面板的設備applet中列出來,再進行其他操作。

  5.啟動設備驅動程序

  在添加修改好注冊表后,重新啟動系統,如果選擇的Start值是0、1、2,如果一切正常,驅動程序就應該已經啟動起來了。可以觀察控制面板的設備applet中的設備列表。如果Start選擇的是3,則可以直接啟動。

  6.調試工具

  目前NT驅動程序的調試工具只有WINDBG和SOFTICE,WINDBG的使用需要雙機環境,強力推薦使用SOFTICE。注意目前國內FTP服務器上的SOFTICE 3.2 FOR NT的Setup.ins文件是錯誤的,它將導致安裝程序不認識你的NT,可以用3.0的setup.ins文件替代3.2的setup.ins,這樣就可以安裝成功。

posted on 2008-01-17 23:35 大龍 閱讀(365) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美精品久久天天躁| 欧美国产精品劲爆| 久久精品国产欧美激情| 国产精品麻豆成人av电影艾秋| 国内激情久久| 久久久青草婷婷精品综合日韩| 亚洲图片你懂的| 国产精品色午夜在线观看| 亚洲午夜激情在线| 亚洲校园激情| 韩国av一区二区三区在线观看| 久久久国产精品亚洲一区| 久久久久国色av免费观看性色| 精品91视频| 亚洲精品在线二区| 国产伦精品一区二区三区免费迷| 欧美一区二区大片| 一区二区三区毛片| 午夜一区二区三区不卡视频| 韩国精品主播一区二区在线观看| 理论片一区二区在线| 欧美极品aⅴ影院| 午夜精品久久久久久久久| 久久国产精品一区二区| 亚洲黄色在线观看| 亚洲欧美三级伦理| 99精品国产99久久久久久福利| 国产精品99久久99久久久二8| 国产一区二区av| 亚洲精品欧美专区| 亚洲国产视频一区二区| 午夜精品福利一区二区三区av | 久久婷婷蜜乳一本欲蜜臀| 一本久久综合亚洲鲁鲁五月天| 欧美一级一区| 久久国产色av| 国产精品青草久久| 亚洲国产精品久久| 国产日韩欧美亚洲| 亚洲午夜在线| 欧美一级理论性理论a| 欧美精品日韩一区| 亚洲国产三级在线| 亚洲国产日本| 欧美激情视频网站| 亚洲美女中出| 亚洲欧美在线观看| 国产精品自在欧美一区| 亚洲综合色丁香婷婷六月图片| 亚洲图片在区色| 中文精品99久久国产香蕉| 亚洲欧洲精品一区二区三区波多野1战4 | 久久成人精品无人区| 欧美大片免费观看| 欧美日韩另类视频| a91a精品视频在线观看| 小黄鸭精品aⅴ导航网站入口| 欧美国产一区二区在线观看| 亚洲国产精品久久久| 久久久久久久久一区二区| 久久久精彩视频| 亚洲一区二区三区四区中文| 国产精品嫩草99av在线| 久久国产日本精品| 欧美国产国产综合| 久久国产精品网站| 在线成人激情黄色| 国产精品国产三级国产专播品爱网| 欧美一区二区三区喷汁尤物| 亚洲在线视频免费观看| 久久艳片www.17c.com| 亚洲精品国产品国语在线app| 亚洲在线视频一区| 亚洲精品综合精品自拍| 亚洲国产成人精品视频| 国产日韩综合| 国产精品xxxav免费视频| 欧美电影免费观看高清| 久久亚洲国产精品日日av夜夜| 亚洲欧美中文另类| 亚洲一二三区在线| 亚洲视频专区在线| 99视频+国产日韩欧美| 亚洲日本在线观看| 亚洲人成77777在线观看网| 亚洲激情第一区| 欧美视频中文在线看 | 亚洲欧美一级二级三级| 一本色道久久综合亚洲精品小说| 亚洲第一综合天堂另类专| 欧美不卡一区| 亚洲高清免费| 日韩视频―中文字幕| 中文国产成人精品久久一| 亚洲综合第一页| 久久精品一区二区国产| 欧美大片专区| 国产精品美腿一区在线看| 国产区日韩欧美| 在线播放日韩欧美| 99精品99久久久久久宅男| 性欧美精品高清| 免费不卡在线视频| 国产精品99久久久久久白浆小说| 一区二区三区免费观看| 久久国产手机看片| 欧美日韩在线高清| 亚洲国产精品久久久久秋霞影院| 亚洲精品一区在线| 欧美一区二区三区视频免费播放| 欧美成年人网站| 欧美亚洲三区| 欧美看片网站| 亚洲国产高清aⅴ视频| 亚洲欧美日韩精品| 亚洲人被黑人高潮完整版| 久久久久网站| 狠狠狠色丁香婷婷综合激情| 亚洲欧美色婷婷| 日韩午夜黄色| 欧美日韩国产天堂| 亚洲美女91| 亚洲高清av| 欧美黄色aaaa| 亚洲黄色性网站| 亚洲欧洲综合| 欧美激情1区2区3区| 久久精品免费电影| 在线观看中文字幕亚洲| 久久精品国产成人| 欧美一区=区| 黄色小说综合网站| 欧美岛国激情| 欧美韩日精品| 欧美中在线观看| 久久久久久综合网天天| 亚洲片在线观看| 亚洲伦理久久| 国产日韩欧美三区| 亚洲国产精品一区制服丝袜| 欧美日韩一区不卡| 久久精品国产久精国产爱| 欧美成人一二三| 亚洲欧美影音先锋| 麻豆91精品91久久久的内涵| 一区二区三区欧美视频| 久久久久9999亚洲精品| 亚洲夜间福利| 久久人人97超碰国产公开结果| 在线亚洲+欧美+日本专区| 久久福利电影| 亚洲视频精选| 欧美福利视频网站| 久久综合久久综合久久综合| 欧美特黄一区| 亚洲成人资源| 在线观看国产成人av片| 亚洲一区二区精品在线观看| 亚洲国产精品va在线看黑人动漫| 亚洲线精品一区二区三区八戒| 一本久久a久久免费精品不卡| 欧美一级视频免费在线观看| 亚洲视频在线免费观看| 免费看亚洲片| 欧美国产一区二区在线观看| 一区二区三区在线免费视频| 欧美在线不卡视频| 久久久国产一区二区| 国产人久久人人人人爽| 亚洲综合三区| 久久国产精品99国产精| 国产精品永久| 久久精品三级| 亚洲全部视频| 欧美大片在线看| 在线亚洲欧美专区二区| 制服丝袜激情欧洲亚洲| 欧美二区在线观看| 亚洲精品网址在线观看| 亚洲欧美日韩直播| 好看不卡的中文字幕| 久热re这里精品视频在线6| 亚洲高清激情| 性高湖久久久久久久久| 亚洲第一网站| 国产精品国产a级| 久久久精品午夜少妇| 一区二区三区精密机械公司| 久久青青草综合| 亚洲一区二区在线播放| 国产午夜精品久久久| 另类欧美日韩国产在线| 一本一本a久久| 亚洲国产精品一区二区久| 久久精品一区蜜桃臀影院| 99热在线精品观看| 在线观看日韩| 一区二区三区在线免费播放| 国产精品久久久对白| 欧美日韩一二三区|