<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • 基于Windows開發WDM設備驅動程序的方法

    時間:2024-08-15 14:33:25 計算機畢業論文 我要投稿
    • 相關推薦

    基于Windows2000開發WDM設備驅動程序的方法

    摘 要:本文介紹了Windows 2000 WDM驅動程序結構及其原理,給出一個驅動程序的例子

    關鍵詞: WDM 驅動程序

    1.概述 引入了全新的WDM (Win32 Driver Model)的驅動程序架構,說是新技術,其實早在1997年Microsoft就提出了該項技術并在Windows 98中得到了充分的應用,換句話說,Windows 98也支持WDM。這樣WDM就成為了一個跨平臺的驅動程序模型不僅如此WDM驅動程序還可以在不修改源代碼的情況下經過重新編譯后在非Intel平臺上運行。
    2.WDM設備驅動程序的特點和原理
    2.1通用驅動程序
    對基本上一樣的硬件,因為他們共享一個總線或完成類似的任務,設備驅動程序可以使用這些標準的驅動程序功能,使公共總線的共享容易,且更容易寫出新的驅動程序,總線驅動程序,如USB、1394,和類驅動程序。
    (1)Win32程序接口: 可以使用Win32函數像訪問文件那樣訪問設備
    CreateFile() 、Closehandle()、ReadFile()、WriteFile()、DeviceIoControl()用于
    發出特殊請求,可發送數據給驅動和從驅動得到數據,IOCTL代碼可以是預先定義的也可是自己定義的。
    (2)創建設備 大多數WDM設備對象都是在PnP管理器中調用AddDevice入口時創建,這個PnP 例程在插入新設備和安裝Inf文件時被調用,此后一系列的PnP IRP被發送到驅動程序,指示設備應如何啟動和查詢它的功能
    2.2WDM-的工作原理
    WDM是在NT 4.0驅動程序結構上發展起來的,所以它與NT 4.0驅動程序極為相似 ,但是它卻有了本質上的提高,比如它支持USB、IEEE 1394、ACPI等全新的硬件標準。 雖然Windows 98與Windows 2000都支持WDM,可是并不意味著Windows 98下的VxD可以在 Windows 2000下運行,而NT下的WDM卻可以在Windows 98下運行。不過原先準備在兩個平臺上同時運行需要編寫兩個截然不同的驅動程序,而現在只需要編寫一個WDM驅動程序就 可以了。同NT 4.0驅動程序一樣,WDM驅動程序也是分層的,即不同層上的驅動程序有著不同的優先權,而Windows 9x下的VxD則沒有此結構。另外,WDM還引入了功能設備對象 FDO(functional device object)與物理設備對象PDO(physical device object)兩 個新概念來描述硬件,一個PDO代表一個真實硬件,在驅動程序看來則是一個FDO 。 另外值得注意的是,一個硬件只允許有一個PDO,但卻可以擁有多個FDO,而在驅動程序中我們不是直接操作硬件而是操作相應的PDO與FDO。在Ring-3與Ring-0通訊方面,操作系統為每一個用戶請求打包成一個IRP(IO Request Packet)結構,將其發送至驅動程序并通過識別IRP中的PDO來識別是發送給哪一個設備的。另外,在驅動程序的加載方面WDM既不靠驅動程序名稱也不靠一個具有某種特殊意義的ID,而是依靠一個128位的GUID來識別驅動程序(Windows下許多東西都是靠此進行識別的)。
    2.3 IRP處理
    I/O請求包IRP是驅動程序操作的中心,IRP是一個內核對象,它是預先定義好的數據結構,帶有一組對它進行操作的I/O管理器例程,I/O管理器接受一個I/O請求,然后將它傳送到合適的驅動程序棧中的最高驅動程序之前,分配并處始化一個IRP,每個I/O請求有主功能代碼
    2.4 IRP參數
    比如一個寫的I/O請求轉換成一個IRP時,I/O管理器填寫主要的IRP首部,并構造第一個個棧單元,對寫請求來講,首部包含用戶緩沖區信息,而棧單元則包含寫的具體參數。如果調用另一個驅動則必須創建下一個棧單元。
    一個IRP到棧頂時,使用PIO_STACK_LOCATION
    IoGetCurrentIrpStackLocation(
    IN PIRP Irp
    );IoGetCurrentIrpStackLocation returns a pointer to the caller's stack location in the given IRP。
    如決定需要把這個IRP沿設備棧向下傳遞,使用IoCopyCurrentIrpStackLocationToNext or IoSkipCurrentIrpStackLocation簡單的將內容復制到下一個單元,如果要更改下一個棧單元,要使用LOCATION
    IoGetNextIrpStackLocation(IN PIRP Irp );
    IoGetNextIrpStackLocation gives a higher level driver access to the next-lower driver's I/O stack location in an IRP so the caller can set it up for the lower driver.
    可使用IoCallDriver調用下一個驅動程序,當最低一層的驅動處理玩后調用IoCompleteRequest,IRP再向上傳遞返回用戶,當IRP向上傳遞時也可以每個驅動有機會再處理它,每個驅動要設置IoSetCompletionRoutine掛接一個例程 ,一個驅動不一定要沿著設備棧向下傳遞IRP,如果自己能處理就就使用IoCompleteRequest完成IrP
    2.5 設備接口
    用戶態使用Win32 CreateFile訪問驅動程序,dwShareMode為0時來請求獨占內核對象在設備對象DEVICE_OBJECT結構中存儲設備的信息,對于與設備的每個交互,相關的DEVICE_OBJECT被傳遞給驅動的回調例程。,但是開發者可以擴展設備結構,稱為設備擴展
    在PnP IRP中我們加載設備NTSTATUS Wdm1AddDevice( IN PDRIVER_OBJECT DriverObject,指向驅動程序的指針 IN PDEVICE_OBJECT pdo指向物理設備的指針)
    { DebugPrint("AddDevice");
    status = IoCreateDevice (DriverObject,創建設備
    sizeof(WDM1_DEVICE_EXTENSION),
    NULL, // No Name
    FILE_DEVICE_UNKNOWN,

    【基于Windows開發WDM設備驅動程序的方法】相關文章:

    Windows2000設備驅動程序的研制開發03-03

    基于PCI總線的雙DSP系統及WDM驅動程序設計03-19

    Windows CE中實現藍牙串口驅動程序03-18

    基于動態資源分配的WDM-PON結構研究基于動態資源分配的WDM-PON結03-07

    基于PROFIBUS開發的FTU及同步采樣方法的研究03-19

    對于設備驅動程序通知應用程序的幾種方法11-16

    windows nt環境下fddi網卡驅動程序設計03-18

    高性能Windows圖形開發庫WinG03-28

    基于Windows Media技巧的流媒體系統 的設計與實現03-23

    主站蜘蛛池模板: jizz国产精品网站| 精品成人av一区二区三区| 91精品成人免费国产片| 亚洲AV无码久久精品色欲| 国产成人综合精品一区| 97精品一区二区视频在线观看| 欧美人与动牲交a欧美精品| 国产精品网站在线观看| 亚洲欧美日韩国产精品 | 亚洲AV成人精品网站在线播放| 99精品在线免费| 国产精品99久久免费观看| 人妻少妇精品久久| 99精品欧美一区二区三区| 2022国内精品免费福利视频| 亚洲精品少妇30p| 精品国产热久久久福利| 久久九九亚洲精品| 精品人妻中文av一区二区三区| 日韩欧美国产精品第一页不卡 | 亚洲情侣偷拍精品| 精品a在线观看| 国产成人精品大尺度在线观看| 97久久国产亚洲精品超碰热 | 永久免费精品视频| HEYZO无码综合国产精品| 亚洲精品无码不卡在线播放HE| 久久久久久久亚洲精品| 一区二区三区国产精品| 国产精品嫩草影院一二三区入口| 精品久久久噜噜噜久久久| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 国产精品日韩欧美久久综合 | 国产精品天天影视久久综合网| 国产亚洲精品资源在线26u| 无码日韩人妻精品久久蜜桃| 亚洲欧美日韩国产一区二区三区精品| 欧美精品综合视频一区二区| 久久精品中文字幕第23页| 国产成人精品怡红院在线观看| 久久精品9988|