Windows 2000核心模式驅動程式設計

來源:互聯網
上載者:User
文章來源:重慶郵電學院學報

裝置驅動程式是直接同硬體打交道的軟體模組。在Windows 2000中,微軟公司在Windows NT4.0的驅動程式結構基礎上,同時引入了Windows9X的即插即入特性,推出了新的驅動程式結構模式(WDM)。WDM通過提供一種靈活的方式來簡化驅動程式的開發,在實現對新硬體支援的基礎上減少並降低所必須開發的驅動程式的數量和複雜性。在Windows 2000中的驅動程式可以分為2大類:使用者模式驅動程式和核心模式的驅動程式。使用者模式驅動程式是與子系統特定相關的,它包含了Win32多媒體驅動程式、支援MS-DOS應用程式的虛擬設備驅動程式VDD(Virtual Device Driver)。核心模式驅動程式有3種基本類型,每一種都有稍微不同的結構和完全不同的功能,即最高層驅動程式(如檔案系統驅動程式(FSD))、中介層驅動程式(例如虛擬磁碟、鏡像或裝置類型特定的外圍裝置)、底層驅動程式(例如PnP硬體匯流排驅動程式)。在Windows2000作業系統下的驅動程式開發分為3個主要的領域:WDM驅動程式、檔案系統驅動程式和小連接埠驅動程式,見圖1。其中小連接埠驅動程式針對的是顯示裝置、SCSI和網路裝置等特定領域;檔案系統驅動程式針對的是存放裝置;WDM驅動程式針對的則是電腦應用系統開發所面對的大多數情況。本文我們討論了WDM核心模式的驅動程式設計的一般問題,雖然其他類型驅動程式與WDM核心模式驅動程式開發有所不同,但只要掌握了WDM核心模式驅動程式開發的基礎,結合2種基本類型的本身特點,就能夠很快掌握設計方法。



1 WDM的基本原理
  WDM是一個模組化的、分層次類型的微型驅動程式結構,階層2所示,其中左邊是一個裝置對象堆棧,右邊為驅動程式的分層結構。在WDM驅動程式模型中,每個硬體至少要包含功能驅動程式和匯流排驅動程式2個層。匯流排驅動程式為匯流排上發現的每個裝置建立物理裝置對象PDO,每個功能裝置驅動程式建立自己的功能裝置對象FDO。在驅動程式中不是直接操作硬體,而是操作相應的PDO與FDO。來自使用者模式API的I/O請求包(IRP)送到裝置堆疊的最上層驅動程式,然後逐漸過濾到下層的驅動程式。每一層驅動程式都可以決定如何處理IRP。核心模式的WDM驅動程式有著可移植性、可配置性、基於對象、包驅動等共有的屬性。


  使用者態程式和核心通過裝置對象訪問裝置驅動程式的裝置。WDM驅動程式有2種方法提供
Win32程式可用的名稱,舊的方法是在驅動程式的裝置建立時,通過函數IoCreate-SymbolicLink建立一個符號連結名,新的方法是使用128位的裝置介面標識(GUID)。在驅動程式編寫中,該GUID可以通過Windows提供的guidgen.exe工具產生。
2 WDM驅動程式的結構及設計
  核心模式的驅動程式不同於常規的應用程式,可以把一個完整的驅動程式看作是一個容器,它包含許多常式,當作業系統遇到一個IRP時,它就調用這個容器中的常式來執行該IRP的各種操作。圖3表示了這一概念。在每一個WDM驅動程式中,都必須擁有DriverEntry、AddDevice、DispatchPnP、DispatchPower和DispatchWmi這5個常式,其他的常式則是可選的。需要對IRP排隊的驅動程式一般都有一個StartIo常式,執行DMA傳輸的驅動程式應有一個AdapterControl常式。大部分能產生硬體中斷的裝置,其驅動程式都有一個插斷服務常式(ISR)和一個延遲程序呼叫(DpcForIsr)常式。驅動程式一般都有幾個支援不同類型IRP的分發常式。WDM驅動程式開發人員的主要任務就是為3所示的容器選擇,並完成所需要的常式。

  當I/O管理器裝入驅動程式時,它調用每個驅動程式必須有的DriverEntry常式,以用來初始化驅動程式範圍的資料結構和資源。一般來說,在DriverEntry常式中通常完成以下功能:①找到所要控制的硬體;②在驅動程式對象中設定驅動程式的Dispatch-,AddDevice,Startio(如果有)和UN-LOAD(如果有)等分發常式的程式的進入點;③建立所有驅動程式對象或其他系統資源;④返回的NTSTATUS表明驅動程式是否成功裝入,並能接收和處理來自PnP管理器的配置、增加(AddDevice)及啟動其裝置的請求。對於功能驅動程式,AddDevice函數的基本職責是建立一個裝置對象並把它聯結到以PDO為底的裝置堆疊中。分發(Dispatch)常式是裝置驅動程式提供的主要函數。當被調用去執行一個I/O操作時,Windows 2000通過實現Dispatch常式來處理來自使用者模式應用程式的請求或來自系統的其他地方的請求。
  一個完整的驅動程式要完成以下工作:初始化;建立與刪除裝置;處理應用程式層程式的開啟和關閉控制代碼的請求;處理應用程式層程式的輸入/輸出請求;序列化對裝置的訪問;訪問硬體;調用其他驅動程式;取消I/O請求;處理可熱插拔裝置的加入和刪除事件;電源管理和WMI;對能夠產生中斷的裝置進行中斷處理。
  作業系統使用I/O請求包(IRP)的資料結構與核心模式驅動程式通訊。IRP是一個核心對象,它是一個預先定義的資料結構,帶有一組對它進行操作的I/O管理器常式。I/O管理器接收一個I/O請求後分配並初始化一個IRP。一個IRP有一個固定的首部和可變數目的IRP堆棧單元塊,每個堆棧單元塊都對應一個將處理該IRP的驅動程式,因此這些堆棧塊至少應與驅動程式堆棧中將要處理這一請求的驅動程式數目一樣多。每個I/O請求有一個主功能代碼(IRP_MJ_XXX),並可能有次功能代碼(IRP_MN_XXX)。主功能代碼決定了該I/O請求調用的分發常式的驅動程式進入點。分發常式接收到I/O請求後進行如下處理:確認I/O請求的合法性;儘可能在分發常式中直接完成該I/O請求;如果該請求不能在驅動程式的分發常式中被處理完,驅動程式就把這個請求排進隊列,以便以後完成處理。WDM驅動程式提供了2種I/O請求排隊的方法:I/O管理器管理的系統排隊和驅動程式自己管理的驅動程式排隊。
  在Windows 2000和Windows 98中,通過使用匯流排驅動程式,PnP管理器能夠自動檢測硬體和分配I/O資源。在WDM驅動程式中PnP管理器使用主功能代碼為IRP-MJ-PNP的I/O請求包與裝置驅動程式交換資訊和請求,完成對硬體裝置的檢測和配置工作。PnP請求包完成2種功能:指示驅動程式何時又如何配置和取消硬體及驅動程式本身的設定;指導驅動程式完成一系列的狀態轉換。PnP請求可以包含二十多個次功能代碼,部分功能代碼(如IRP-READ-CONFIG,IRP-MN-QUERY-RE-SOURCE-REQUIREMENTS等)只能由匯流排驅動程式處理,功能驅動程式和過濾驅動程式只是將該IRP請求下傳到匯流排驅動程式。對功能驅動程式和過濾驅動程式中比較重要的IRP-MN-START-DEVICE用來通知功能驅動程式其硬體被賦予了什麼的I/O資源,以及指導功能驅動程式做任何必要的硬體或軟體佈建,以便裝置能正常工作。IRP-MN-REMOVE-DEVICE告訴功能驅動程式關閉裝置並釋放與之關聯的裝置對象。
  驅動程式的ISR和DpcForIsr在裝置產生中斷時共同向裝置提供服務。當裝置產生中斷時,驅動程式的ISR將被調用,ISR通過詢問裝置硬體收集有關的硬體裝置資訊,並儘可能地處理,如果不可能完全處理該插斷要求,就將中斷資訊傳遞給Dpc-ForIsr進行處理。ISR是運行在DIRQL插斷要求級的,在運行時,會阻止在同一處理器上的所有裝置發出的具有更低的DIRQL的中斷,因此在驅動程式的編寫時,ISR應儘可能快地返回控制。另外,ISR可以與驅動程式的其它部分共用資料和硬體資源,因此需要注意同步問題的處理。
3 WDM驅動程式開發環境及編譯
  Windows 2000下編寫驅動程式的環境被稱為DDK For Microsoft Windows 2000或Windows2000 DDK,DDK是一個命令列下的工作環境。在安裝DDK前需要先安裝Micro-soft VisualC++和Win32 SDK(可選)。對驅動程式的編譯可以通過設定VC++的項目設定,在VC++中直接編譯驅動程式,但改變設定的工作較繁且易出錯,因此DDKbuild.exe編譯聯結器是構造驅動程式的主要工具。它從設定檔Sources中讀出待編譯的程式的配置,包括源檔案、目標檔案等,從環境變數Include中得到引用檔案的地址,然後調用VisualC++的編譯聯結器Nmake.exe進行實際的編譯聯結工作。
    另外,build編譯聯結器還可以通過查看DIRS檔案中的偽指令,確定要編譯的驅動程式目錄列表。記錄檔build.log、build.wrn,build.err中分別記錄了編譯聯結中執行的命令列、遇到的錯誤和警告。編譯完成後的檔案尾碼為.sys。
  驅動程式的調試是在原代碼級進行的,可以用微軟公司提供的WinDbg調試工具,但需要在兩台以串口聯結的電腦上進行。而NUMEGA公司的SOFTICE比較方便地在一台電腦上進行核心代碼的調試。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.