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

正文內(nèi)容

usb接口通信(驅(qū)動(dòng))的設(shè)計(jì)與實(shí)現(xiàn)(編輯修改稿)

2024-07-26 18:25 本頁(yè)面
 

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