freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設計論文usb接口通信(驅(qū)動)的設計與實現(xiàn)(編輯修改稿)

2025-07-25 10:42 本頁面
 

【文章內(nèi)容簡介】 始化它自己創(chuàng)建和刪除設備處理Win32打開和關閉文件句柄的請求處理Win32輸入/輸出(I/O)請求串行化對設備的訪問訪問硬件調(diào)用其他驅(qū)動程序取消I/O請求超時I/O請求處理一個可熱插拔的設備被加入或刪除的情況處理電源管理請求使用WMI(Windows Management Instrumentation)和NT事件向系統(tǒng)管理員報告只有“初始化”模塊是必不可少的,本設計中,只用到了其中部分模塊。因為對一個鍵盤驅(qū)動來說,許多功能是用不到的。 2 設計方案及設計工具、環(huán)境選擇 鍵盤驅(qū)動程序設計方案及設計工具鍵盤驅(qū)動有很多種設計工具,除了用DDK開發(fā)之外,還可以用Windriver,DriverStudio等開發(fā)工具開發(fā)。一般的來說,使用封裝的更高層的工具象Windriver,開發(fā)起來周期較短,也更容易些,但是出了問題也更難調(diào)試。作為一個畢業(yè)設計,為了更深入的了解Windows驅(qū)動模型,應該選擇使用DDK開發(fā)。了解到鍵盤首先是一個HID設備,Windows系統(tǒng)是將鍵盤作為HID設備處理。因此,在開發(fā)鍵盤驅(qū)動的時候,是在一個HID minidriver的框架下來實現(xiàn)的,HID類驅(qū)動中有一些IOCTL(輸入輸出控制),我們所做的就是要建立起來這個框架,并且填充這些IOCTL,來實現(xiàn)驅(qū)動程序的完全功能。 那么怎么來實現(xiàn)讀寫鍵盤的功能成為下一步考慮的問題,因為鍵盤是一個USB鍵盤,這時候我們用到了USB類的IOCTL,在第一章里提到了Windows包含的各種類驅(qū)動,可以看到USB類和HID類都列在其中。事實上在這里它們結合起來組成了一個完整的USB鍵盤驅(qū)動程序。通過調(diào)用USB類的USBDI,我們可以實現(xiàn)讀寫鍵盤,啟動鍵盤(USB設別),停止鍵盤(USB設備),移除鍵盤(USB設備)等一系列必須的事件的響應。將實現(xiàn)的代碼添加到HID minidriver中。這樣,HID類的接口得以實現(xiàn),對下面的一層則使用了USB驅(qū)動程序接口(USBDI)。一個完整的驅(qū)動程序的設計方案大致如上。事實上,如果只是做一個簡單的訪問鍵盤的程序,而不是將其嵌入在系統(tǒng)中,作為驅(qū)動程序的話,只需要USB類的特性就夠了。那樣的話,整個題目的難度會降低一些。 環(huán)境設置DDK是驅(qū)動程序開發(fā)工具包,不同的操作系統(tǒng)有不同的版本,本論文設計的驅(qū)動程序是在Windows 2000環(huán)境下,因此使用Windows 2000DDK。安裝DDK之后,需要把DDK的bin目錄加入到VC++的目錄列表中,這樣一些使用到DDK頭文件的客戶程序,可以方便的找到它們要用的頭文件。而不用專門拷貝出來。,它來為VC++使用DDK進行開發(fā)做一些環(huán)境設置,并且檢查開發(fā)工具VC++的版本,是否安裝。DDK2000支持VC5和VC6,這也是為什么作者一開始選擇VC++.NET作為開發(fā)工具。當創(chuàng)建新的Makefile項目時,Visual Studio缺省提供兩個build配置“Win32 Debug”和“Win32 Release”,build命令行中的設置,根據(jù)程序所在驅(qū)動器位置的不同而需要改變。,使用DDKROOT環(huán)境變量,如果在Visual Studio中請求一個完整的重新構造,把選項nmake /a添加到這個命令行。設置輸出文件名,使得在build菜單中顯示正確的名字。代碼清單2-1 Win32自由配置設置build命令行 MakeDrvr %DDKroot% e:\lcsDriver checked全部重新構造選項 nmake /a輸出文件名 瀏覽信息文件名 objchk\i386\如果在以上配置中,checked改為free,那么在瀏覽信息文件名中,應改為objfre\ i386\。makefile文件時必不可少的,它是一個標準文件,激活DDK 。不要試圖來編輯這個文件,為了把它添加到我們的工程中去,在SOURCES文件的SOURCES宏中,寫入了它。代碼清單2-2 Makefile文件內(nèi)容 DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source file to this ponent. This file merely indirects to the real make file that is shared by all the driver ponents of the Windows NT DDK!INCLUDE $(NTMAKEENV)\與普通的生成程序不同,在Windows2000中,build分開保存自由構造版本和檢查構造版本文件。如果TARGETPATH(目標路徑)是OBJ,自由構造x86目標文件和最終的驅(qū)動程序進入OBJFRE\i386目錄中,檢查構造目標文件和驅(qū)動程序進入OBJCHK\i386目錄中,在本論文的驅(qū)動程序中,使用的是后者。在要求Visual Studio構造驅(qū)動程序時,它總是至少傳遞四個參數(shù):DDK基目錄,源驅(qū)動器,源目錄和構造類型(“free”或“checked”)。任何其他的參數(shù)直接傳遞給build。MakeDrvr先對傳遞的參數(shù)進行一些基本的檢查,然后調(diào)用DDK setenv命令為build目錄正確設置環(huán)境變量,改變目錄為源驅(qū)動器和目錄,最后調(diào)用build。b選項保證顯示完全的錯誤文本,w選項保證在屏幕輸出上出現(xiàn)警告,可以在Visual Studio的build Output窗口中發(fā)現(xiàn)它們。MakeDrvr命令文件的屏幕輸出出現(xiàn)在Visual Studio Output窗口中。代碼清單2-3 MakeDrvr文件@echo offif %1== goto usageif %3== goto usageif not exist %1\bin\ goto usagecall %1\bin\setenv %1 %4%2cd %3build b w %5 %6 %7 %8 %9goto exit:usageecho usage MakeDrvr DDK_dir Driver_Drive Driver_Dir free/checked [build_options]echo eg MakeDrvr %%DDKROOT%% C: %%WDMBOOK%% free cef:exit驅(qū)動程序沒有任何保護,因為它是內(nèi)核的一部分,要特別仔細地完全測試驅(qū)動程序,否則會丟失數(shù)據(jù)。驅(qū)動程序出錯的方式有以下幾種。崩潰內(nèi)核轉儲驅(qū)動程序不啟動掛起資源遺漏時間依賴性DebugPrint軟件用來允許我們使用格式化的打印語句跟蹤驅(qū)動程序的執(zhí)行。\DebugPrint。首先我安裝了DebugPrint驅(qū)動程序,安裝方法于安裝驅(qū)動程序類似。它的用戶態(tài)監(jiān)視程序監(jiān)視測試驅(qū)動程序的打印跟蹤事件。在程序中使用DebugPrint的方法如下:。修改SOURCES文件。驅(qū)動程序中調(diào)用DebugPrint函數(shù),只能在DISPATCH_LEVEL或更低的IRQL調(diào)用這些函數(shù),這意味著可以在DriverEntry例程,主IRP分發(fā)例程和StartIo及延遲過程調(diào)用(DPC)例程中調(diào)用DebugPrint函數(shù),但不能在中斷處理例程中調(diào)用。DebugPrintInit例程必須在PASSIVE_LEVEL IRQL調(diào)用。DebugPrint調(diào)用在驅(qū)動程序的執(zhí)行中只引起很小的延遲,DebugPrint調(diào)用的主要工作在以低實時優(yōu)先級在后臺運行的系統(tǒng)線程中發(fā)生。在本論文的驅(qū)動程序代碼中一個典型的例子如下:代碼清單2-4 DebugPrint調(diào)用實例NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject , IN PUNICODE_STRING RegistryPath){if DBG DebugPrintInit(Lcs_Kbd checked )。else DebugPrintInit(Lcs_Kbd free )?!? 3 使用USB USB類概述圖3-1 主要的USB類圖3-1列出了主要的USB設備類,由圖中我們可以看出人工輸入設備類(HID類)與USB類是有關系的,在下一章中,可以看出HID類和USB類的關系遠不止如此。事實上,HID協(xié)議本來就是USB協(xié)議的一個子部分,最初的時候HID是因USB而生,但是現(xiàn)在它的作用不止如此。當然HID設備是不一定在USB上運行的,但是因為一些特定的關系,它們能夠很好的適合于USB設備模型。 使用Windows USB驅(qū)動程序接口(USBDI),可以編寫訪問USB鍵盤的驅(qū)動程序,并讀取原始鍵盤輸入數(shù)據(jù)。并可以對鍵盤進行控制,使得鍵盤上的LED燈發(fā)光或是熄滅。Windows 2000使用的是USBDI ,因為這個驅(qū)動程序中并沒有用到WMI(Windows Management Instrumentation)數(shù)據(jù),所以受版本的影響不大。表3-1中是USB驅(qū)動程序接口的內(nèi)部IOCTL。表3-1 USB驅(qū)動程序接口的內(nèi)部IOCTLIOCTL_INTERNAL_USB_SUBMIT_URB 發(fā)出URB停止等待結果IOCTL_INTERNAL_USB_RESET_PORT 復位并重新啟用一個端口IOCTL_INTERNAL_USB_GET_PORT_STATUS 得到狀態(tài)位: USBD_PORT_ENABLED USBD_PORT_CONNECTEDIOCTL_INTERNAL_USB_ENABLE_PORT 重新啟用一個被禁止的端口IOCTL_INTERNAL_USB_GET_HUB_COUNT 集線器驅(qū)動程序內(nèi)部使用IOCTL_INTERNAL_USB_CYCLE_PORT 模擬設備拔出和再次插入IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO 集線器驅(qū)動程序內(nèi)部使用IOCTL_INTERNAL_USB_GET_HUB_NAME 得到集線器驅(qū)動程序的設備名IOCTL_INTERNAL_USB_GET_BUS_INFO 獲得USB總線信息IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME 得到主機控制器設備名最重要的內(nèi)部IOCTL是IOCTL_INTERNAL_USB_SUBMIT_URB,它發(fā)出USB請求塊(URB)由USB類驅(qū)動程序處理。有30多個不同的URB功能代碼。USB客戶使用URB做它們大多數(shù)的工作。URB結構是一個聯(lián)合,含有16個不同的_URB_*結構。 對一個USB鍵盤來說,它有這么幾種操作,復位設備,配置設備,和讀寫設備。在使用USB設備之前,第一件事就是要復位它,來確保它可用。然后主機負責配置設備。配置設備的過程與物理特性相關。在USB鍵盤的配置中,我們所要做的是獲得設備的配置描述符,然后找出接口,設備接口的每個管道的最大傳輸數(shù)據(jù)包為8,創(chuàng)建配置設備的URB請求發(fā)送給USBDI。 具體的配置過程在第五章中描述,在這里主要涉及的是,如何使用USBDI。USB設備驅(qū)動程序從不直接與硬件對話。它僅靠創(chuàng)建URB(USB請求塊)并把URB提交到總線驅(qū)動程序就可完成硬件操作。,是接受URB的實體。向USBD的調(diào)用被轉化為帶有主功能代碼為IRP_MJ_INTERNAL_DEVICE_CONTROL的IRP。然后USBD再調(diào)度總線時間,發(fā)出URB中指定的操作。(1)為了創(chuàng)建一個URB,首先應該為URB分配內(nèi)存,然后調(diào)用初始化例程把URB結構中的各個域填入請求要求的內(nèi)容(2)創(chuàng)建完URB后,你需要創(chuàng)建并發(fā)送一個內(nèi)部I/O控制(IOCTL)請求到USBD驅(qū)動程序,USBD驅(qū)動程序位于驅(qū)動程序?qū)哟谓Y構的低端。在大多數(shù)情況下,你需要等待設備回應。(3)當提交一個URB到USB總線驅(qū)動程序時,最終將收到一個描述該操作結果的NTSTATUS代碼。當USBD完成一個URB時。DDK中的URB_STATUS宏可以簡化這個值的存取。這就是調(diào)用USBDI的完整過程。 USB鍵盤的一個特點這個問題本來可以在后面inf文件的部分予以說明,但是因為設計到USB,所以在這里描述。下面是標準安裝文件中的一部分,它的意思是,這個設備驅(qū)動程序所對應的設備屬于USB類,ClassGUID給出的是設備的標識符。Class=USBClassGUID={36FC9E60C46511CF8056444553540000}替代Windows 2000中的鍵盤驅(qū)動,用這樣的配置文件是不可能的,Windows 2000有對USB鍵盤的內(nèi)置支持,在這兩個操作系統(tǒng)中,它們裝入人工輸入設備(HID)類驅(qū)動程序,然后標準鍵盤驅(qū)動程序通過HID客戶驅(qū)動程序得到鍵輸入。,第一種來自于一本描述Windows 2000 wdm驅(qū)動程序設計的書,在參考書目中列出了它的具體信息。()替換HID 。 USB設備,這種替換是可以的,但是卻使用戶不能使用USB鍵盤進行常規(guī)的輸入。另外一種方法是將標準安裝文件改為:Class=KeyboardClassGUID={4D36E96BE32511CEBFC108002BE10318} 4 HID小驅(qū)動程序?qū)崿F(xiàn) 人工輸入設備模型(HID),是與用戶輸入設備交互的標準方法,HID設備使用各種描述符定義它的功能。報告描述符詳細說明它可以產(chǎn)生的輸入報告呵可以接收的輸出報告。HID規(guī)范是用于控制計算機的大多數(shù)人工輸入設備的抽象模型,例如,一個輸入設備可以是普通的老式鍵盤,汽車模擬方向盤或計算機的軟開關按鈕。HID規(guī)范一開始是為USB設
點擊復制文檔內(nèi)容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1