win32裝置驅動程式體系結構
目前,由於需要支援新的業務和新的pc外部裝置型別對驅動程式開發造成了新的挑戰。新型匯流排增加了裝置的數量和對裝置驅動程式的需求。裝置上各種功能的不斷增加使驅動程式的開發變得越來越複雜。同時,快速反應的互動式應用程式要求將軟體和硬體緊密的結合在一起。2023年,在用於windows 95和windows nt的統一的win32驅動程式模型(wdm)有了進一步的發展,將這些因素全部考慮在內。wdm允許使用乙個單一的驅動程式源(x86二進位制)來同時在windows 95和windows nt中實現對新的匯流排和新裝置的支援。
wdm的關鍵目標是通過提供一種靈活的方式來簡化驅動程式的開發,使在實現對新硬體支援的基礎上減少並降低所必須開發的驅動程式的數量和複雜性。wdm還必須為即插即用和裝置的電源管理提供乙個通用的框架結構。wdm是實現對新型裝置的簡便支援和方便使用的關鍵元件。
為了實現這些目標,wdm只能以windows nt i/o子系統提供的一組通用服務為基礎。wdm改進了由一組核心擴充套件構成的功能實現對即插即用、裝置電源管理、和快速反應i/o流的支援。除了通用的平台服務和擴充套件外,wdm還實現了乙個模組化的、分層次型別的微型驅動程式結構。型別驅動程式實現了支援通用匯流排、協議、或裝置類所需的功能性介面。類驅動程式的一般特性是為邏輯裝置的命令設定、協議、和**重用所需的匯流排介面實現標準化提供必要的條件。wdm對標準類介面的支援減少了windows 95和windows nt所需的裝置驅動程式的數量和複雜性。
微型驅動程式允許通用類驅動程式的擴充套件實現對特定裝置協議或物理程式設計介面的支援。例如,乙個微型驅動程式可以被用於實現對ieee 1394匯流排類驅動程式的擴充套件,用於對特定主機控制器程式設計介面的支援。微型驅動程式非常易於開發,因為它們可以通過簡單的擴充套件通用的類驅動程式介面功能來實現。儘管微型驅動程式設計簡便,但是重複使用微型驅動程式模組所帶來的優點也可以通過對標準裝置程式設計介面的支援來實現。usb主機控制器介面(openhci或uhci)就是這方面的乙個例子。
模組化的wdm體系結構靈活統一的介面使作業系統可以動態的配置不同的裝置驅動程式模組來支援特定的裝置。模組化的wdm體系結構靈活統一的介面使作業系統可以動態的配置不同的驅動程式模組來支援特定的裝置。乙個典型的驅動程式堆疊由通用裝置、協議、和用特定協議和特定匯流排的微型驅動程式聯接的匯流排類驅動程式構成。例如,作業系統可以配置乙個驅動程式堆疊來支援這樣乙個照相機,它的命令是用圖象類定義的,並且它是根據來自ieee 1394匯流排類的功能控制協議(fcp)類而發表的。這種靈活性還使其可以很容易的支援乙個多功能裝置,僅需簡單的實現乙個微型驅動程式將多功能硬體與幾個裝置類的介面相連線。動態構造wdm驅動程式堆疊是實現即插即用裝置支援的關鍵。
wdm服務使實現乙個用於windows nt和windows 95快速反應的模型成為可能。wdm提供了多個執行優先順序包括核心態和非核心態執行緒、irq級別、和被延緩的程式呼叫(dpc)。所有的wdm類和微型驅動程式都作為核心態(第0層)的特權級執行緒(不會被cpu排程程式中斷)執行。32個irq級可以被用於區分硬體中斷服務的優先順序。對於每個中斷,dpc被排入佇列等到被啟用中斷的irq服務例程完成後再執行。dpcs通過有效的減少中斷被禁止的時間,使系統對中斷的響應獲得了很大的提高。對於使用多處理器的基於x86的pc系統,在windows nt下對中斷的支援是以intel的多處理器規範1.4版本為基礎的。
對於需要活動的多**的應用程式,wdm在核心態提供了快速反應的介面來處理i/o流。wdm的流介面是通過標準的wdm類介面提供出的。對於wdm,乙個多**流完全可以用乙個或多個軟體過濾器和裝置驅動程式來處理。為了加速對i/o流的處理,wdm流可以直接對硬體進行訪問,避免了由於進行非核心態和核心態之間的轉換而造成的延遲,並且還省取了對中間i/o緩衝區的需要。
要充分利用wdm提供的優點,建議你使用即插即用相容的電源管理輸入、聲音、圖形、和使用usb和ieee 1394的儲存外圍裝置。
wdm驅動程式可以在windows nt上與現有的windows nt驅動程式共存,也可以在windows 95上與現有的windows 95驅動程式共存。現有的windows nt 和windows 95驅動程式將繼續被支援,但是卻不能使用wdm的先進優點。由微軟提供的可擴充套件的wdm類驅動程式是支援新裝置的最好選擇。在開始開發乙個新的wdm類驅動程式之前,硬體開發者應當請教微軟公司以取得對特定裝置類的支援資訊。一旦有可能,就採用僅編寫一次類驅動程式,然後通過使用wdm的微型驅動程式來將其擴充套件成針對特定硬體介面的驅動程式的方法。
NT式驅動模版
前段時間把自己寫的驅動程式整理了一下,改寫出這麼乙個模版來,雖然是nt式驅動的,但wdm式驅動只需在此基礎上增加一些函式就可以了。標頭檔案 test.h 自定義i o控制 define ioctl ctl code file device unknown,0x801,method buffered,...
NT式驅動的基本結構
對於nt式驅動,主要的函式是driverentry例程 解除安裝例程以及各個irp的派遣例程。驅動程式有乙個入口函式,也就是首先被執行的函式。這個函式通常被命名為driverentry,也可以指定另外的名字。函式原型 ntstatus driverentry in pdriver object pd...
WDM驅動和應用的互動
deviceiocontrol的同步和非同步呼叫方式 上層應該可以以同步或非同步的方式.ov ov.hevent createevent null,true,false,null deviceiocontrol ov 執行其它操作.等待驅動事件 handle aevents 2 aevents 0 ...