實驗五WinCE中的驅動程序開發(fā)_第1頁
實驗五WinCE中的驅動程序開發(fā)_第2頁
實驗五WinCE中的驅動程序開發(fā)_第3頁
實驗五WinCE中的驅動程序開發(fā)_第4頁
實驗五WinCE中的驅動程序開發(fā)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、WinCE 中的驅動程序開發(fā)一實驗目的1、熟悉 WinCE 中流式接口驅動程序的 12 個接口的功能。2、掌握流式驅動程序的工作過程。3、能夠編寫出流式接口的驅動程序。二實驗內容使用 VS2005 的智能設備應用程序開發(fā)方法, 進行網(wǎng)絡通信的編程,并通信多線程技術實現(xiàn) 服務器與客戶端之間的文件傳輸。三實驗設備及工具硬件: PC 機一臺;軟件: Windows XP 操作系統(tǒng), VS2005 開發(fā)環(huán)境, WinCE 6.0 開發(fā)環(huán)境, 或 Windows Mobile5.0 SDK四實驗步驟及說明(1) 寫出流式接口驅動程序的 12 個接口,及每個接口的功能。答:見教材 515 頁(2) 寫出流

2、式驅動程序的工作過程。 答:第一步:加載驅動程序,主要有兩種加載方式:( 1)當系統(tǒng)啟動時,設備管理器搜尋注冊表的 HKEY_LOCAL_MACHINEDriversBuiltIn 鍵下面的子鍵,并逐一加載該子鍵下的每一 個驅動, 此過程稱為 BusEnum;( 2)應用程序可調用 ActivateDeviceEx() 函數(shù)動態(tài)地加載驅 動程序。第二步:設備管理器從注冊表的 dll 鍵值中獲取驅動程序所在的 DLL 文件名。 第三步:設備管理器調用 LoadDriver() 函數(shù)把該 DLL 加載到自己的虛擬地址空間中。 第四步: 設備管理器在注冊表的 HKEY_LOCAL_MACHINEDr

3、iversActive 下,記錄所有已 經(jīng)加載的驅動程序。第五步:設備管理器調用驅動程序中的 COM_Init 函數(shù),并把上一步中添加的注冊表項 的完整路徑作為 COM_Init 函數(shù)的第 1 個參數(shù)傳入驅動程序內。第六步:在 COM_Init 中,通常須對硬件進行一些最基本的初始化操作。 通過以上的操作完成流式驅動程序的加載任務。對驅動程序的操作: 第一步:應用程序使用該設備。首先,應用程序調用 CreateFile(TEXT( “COM1 ”), .) 打開設備。然后,文件系統(tǒng)判斷打開的是文件還是設備。最后,如果打開的是設備,就將控 制權交回設備管理器。第二步:設備管理器調用驅動程序的 C

4、OM_Open() 函數(shù)打開設備。 第三步: COM_Open() 函數(shù)把打開設備的結果返回給設備管理器。第四步:設備管理器把SMP_open()的返回結果,返回給應用程序的CreateFile()函數(shù)調用。通過第七步到第十步,設備已被成功打開,接下來可對設備進行讀/寫和控制操作。下面將以從設備中讀取數(shù)據(jù)為例。第一步:應用程序使用CreateFile()調用返回的句柄,調用函數(shù)ReadFile(),向設備發(fā)送第二步:設備管理器調用驅動程序的 COM_Read() 函數(shù),讀取設備的數(shù)據(jù)信息。在此過 程中,COM_Read()函數(shù)可與硬件交互, 從硬件中讀取必要的信息。然后返回給設備管理器,再返回

5、給應用程序。最后,當應用程序不再使用該設備時,它可調用 CloseHandle() 將設備關閉。(3) 實驗過程及主要代碼分析:a. 寫出兩種導出動態(tài)鏈接庫接口的方法 答:導出動態(tài)鏈接庫接口的方法,主要有以下兩種: 第一種,使用動態(tài)鏈接庫的導出文件,即 .DEF 文件 LIBRARY GenDriverEXPORTSGEN_InitGEN_DeinitGEN_PreDeinitGEN_OpenGEN_CloseGEN_PreCloseGEN_ReadGEN_WriteGEN_SeekGEN_PowerDownGEN_PowerUpGEN_IOControl第二種,使用 _declspec(dl

6、lexport) 關鍵字 _declspec ( dllexport _declspec ( dllexport _declspec ( dllexport _declspec ( dllexport_declspec ( dllexport_declspec ( dllexport_declspec ( dllexport_declspec ( dllexport_declspec ( dllexport_declspec ( dllexport_declspec ( dllexport) DWORD GEN_Init (DWORD dwContext);) BOOL GEN_PreDein

7、it (DWORD dwContext);) BOOL GEN_Deinit (DWORD dwContext);) DWORD GEN_Open (DWORD dwContext, DWORD dwAccess, DWORD dwShare);) BOOL GEN_PreClose (DWORD dwOpen);) BOOL GEN_Close (DWORD dwOpen);) DWORD GEN_Read (DWORD dwOpen, LPVOID pBuffer, DWORD dwCount);) DWORD GEN_Write (DWORD dwOpen, LPVOID pBuffer

8、, DWORD dwCount);) DWORD GEN_Seek (DWORD dwOpenlo,ng lDelta, WORD wType);) DWORD GEN_IOControl (DWORD dwOpen, DWORD dwCode, PBYTE pIn, DWORD dwIn,PBYTE pOut, DWORD dwOut, DWORD *pdwBytesWritten);) void GEN_PowerDown (DWORD dwContext);declspec ( dllexport ) void GEN_PowerUp (DWORD dwContext);b.寫出示例代碼

9、進行驅動程序的打開,并分析代碼 答:打開驅動程序 GenDriver 的示例代碼如下:HWND hWnd = hMain;DWORD dwwritten;int count;int ret;/ 加載驅動HANDLE HandleDriver = INVALID_HANDLE_VALUE; / 驅動程序句柄HANDLE hFile = INVALID_HANDLE_VALUE; / 設備文件操作句柄HKEY hDrvKey = NULL; / 注冊表操作句柄HandleDriver = ActivateDeviceEx(L "DriversBuiltInGEN" , NULL

10、, 0, NULL);/* 加載 SimpleDriver 驅動 */if (HandleDriver = INVALID_HANDLE_VALUE)Add2List(hWnd,TEXT( " 加載 SimpleDriver 失敗 ." ); elseAdd2List(hWnd,TEXT( " 加載 SimpleDriver 成功 ." ); HANDLE hDrv =CreateFile(TEXT( "GEN0:" ),GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORM AL

11、,NULL);/ 以打開文件的方式打開流式驅動程序if (INVALID_HANDLE_VALUE = hDrv)OutputDebugString(L "Failed to open driver.rn");Add2List (hWnd, TEXT( "Failed to open driver." ); return 0;elseOutputDebugString(L "succeed to open driver.rn");Add2List (hWnd, TEXT( "File sent successfully.&q

12、uot; );(4) 實驗結果及分析:答:(1)用 VS 2008 生成 GenDriver.dll ,位于 CHS Windows Mobile 5.0 PocketPC R2 Emulator 仿真器中, 具體位置 :我的設備 Program filesGenDriver.dll 。如圖 1 所示。將 GenDriver.dll復制到根目錄下 ()圖 1 生成的 GenDriver.dll(2)修改 CHS Windows Mobile 5.0 PocketPC R2 Emulator 的注冊表。第一步:打開VS2008的遠程注冊表編輯器, 打開設備CHS Windows Mobile 5

13、.0 PocketPC R2 Emulator。如圖2所示圖2VS2008的注冊表遠程編輯器第二步:在下增加 Gen Driver,具體內容如下所示:HKEY_LOCAL_MACHINEDriversBuilt InGENPrefix=GENDll=Ge nDriver.dllFrie ndlyName=Simple DriverIn dex=dword:0Order=dword:0最后,更新注冊表(3)運行流式驅動程序的加載測試程序MySquit,運行結果如圖3所示:Pocket PC - WM 5.0n1X文件(E)閃存(L)幫助(H)sglsgl圖3 GenDriver加載成功通過VS2

14、008的遠程進程查看器,也可以證明驅動程序已經(jīng)運行,如圖4所示indaws CE Remote Proc«s Vtc-wcrPIDS'ThreeshK.Df13FFKXE!3camcoooocccoiniwy5.ff«u日和朋3OMKOXJ(XKXS002如詩歸g沖汗磁3oeoranc-wxxmHsheii3C.Ej?577522306000000mcooreiFTFEE3WD000MOXCCOIOwvk&eoeE774D+663ooxoccoiXCCCOjD巾芒硝ar w * h打仍妙3(xwxx>OXIOOO<ICtorf1flrOer<

15、;2 用E0710=3HKOTWcraxmnpOJJMk點誕5714h4FA331ZOOOOX'mcoioottmngc 訛沖 KE?9E3BL-KOOdXi0XC020Dnm丹vl1JWQ6J?ijwrmnrrmdYiE班中or期I敝綏Key細1I I PriorityI ItetI El|i:Jjrrerl:PjDKLIMX6OOOCOOL5oorawsCOOCOCC6KOCOCO5COOCECC6 ixnxioo COTOCDS rrrnixF; nrrmiriRr-tdiib陸d血IDrYocGoirtcbd Court| Bsc MetHModuktRJI Path*jeraW.dl965-LAffiZ1D12FWOO2W729&5LPEK歸曲hxdlr-eS20Li.dl9iftZCl:iZ11僉創(chuàng)£CL5C硼Fk如沖00001ncU.dlg力:旦ECl24&257OK01525529772«Eu訓 iTckwi:,lfldtLJ i.d 1MA:.rllW30XCJcs?9mx>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論