青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

玩心未泯

卡爾斯希普拉斯

C++博客 首頁 新隨筆 聯系 聚合 管理
  19 Posts :: 0 Stories :: 98 Comments :: 0 Trackbacks
         昨天太忙,沒來得及寫,今天晚上火車要回武漢了,5.1估計沒空寫,這兩天又有不少新發現想要些出來跟大家分享,但是一下子又理不清出頭緒,還是不能著急,慢慢寫,不要讓列位看官越看越糊涂才好。
         上一篇咱們寫到了USB驅動必須實現的三個入口函數:USBInstallDriver,USBUnInstallDriver和USBDeviceAttach。這一篇就主要介紹一下這幾個函數(及另外兩個函數:ActivateDevice和USBDeviceNotificationCallback,有時間的話,后來發現沒時間寫這么長了Attach都寫不完,只好下篇再寫)。
         其實網上搜索到的關于WinceUSB驅動開發的文章都有介紹這些函數,這些函數干什么用的,里面調用了那些東東都有說明,但是似乎天下文章一大抄的原則永遠沒有改變,每篇文章說的內容都差不多,還有些該說明的細節根本沒有一篇提到過,根本就不是給新手入門看的,我想可能學習Wince驅動開發最大的疑惑就是哪些是我們該做的,哪些是不需要我們作的,我在學習的時候,看了這些所謂的入門文章,還是沒有完全搞清楚,所以我才專門用一篇的篇幅把我研究所得寫出來,可能會對新入門的朋友有所幫助。
         先說USBInstallDriver,這個函數在驅動程序DLL被加載的時候會被調用,但是不是任何情況下加載驅動都會調用這個函數入口,前面提到過USB驅動的注冊表鍵值,當系統能夠根據注冊表定位到驅動程序dll并且成功加載的話,這個函數就不會被調用了。反之,當不能夠找到匹配的驅動或者不能夠成功加載驅動的時候,系統會彈出一個對話框,讓用戶輸入一個驅動程序名稱,這個時候,系統就會加載用戶輸入的這個驅動程序文件,并調用其中的USBInstallDriver函數了。USBUnInstallDriver函數呢,我很迷惑,《WindowCE驅動開發指南》有一句話說WinCE永遠不會調用它,我也不明白,但是就我測試的結果來看,確實沒發現這個函數被調用過。
        USBInstallDriver函數里面作什么的呢?說白了,就是寫注冊表,讓系統下次能夠通過注冊表信息匹配到這個驅動程序文件。其他文章都說了,怎么寫注冊表,就是用USBD.dll中的RegisterClientDriverID和RegisterClientSettings兩個函數,少不了LoadLibrary,GetProcAddress,FreeLibrary。網上看到過一個問題,問驅動程序不是被USBD進程加載的么?為什么不能直接用這個兩個函數,還要LoadLibrary和GetProcAddress來調用這些函數呢?我不知道怎么去解答這個問題,只覺得即使在一個進程里面,似乎不這樣你也得不到這兩個函數的地址吧。至于到處都說USBInstallDriver里面不要用Reg的API函數去操作注冊表,卻沒有個所以然,這個應該是因為這些注冊表主鍵可能會根據操作系統的變更而變更的,而不論你是哪個操作系統,RegisterClientDriverID和RegisterClientSettings都會找到對應的正確的注冊表主鍵去添加值,所以建議不要用regAPI來操作,換句話說你用了RegAPI去操作注冊表,寫入信息,也不會有什么問題,除非你的wince系統中那些驅動信息不應該寫在那幾個主鍵下了。
        要注意的一點是:在RegisterClientSettings的參數中,給的USB_DRIVER_SETTINGS(內有9個ID)如果和你的設備的ID對不上,結果就是系統仍然不能夠通過注冊表信息加載你的驅動程序,所以,那個提示你輸入驅動程序的對話框還會繼續彈出來,但是USBInstallDriver成功返回的話,其中寫入注冊表的信息是成功寫入了的(如果不成功,也會繼續彈出那個對話框)。
        在USBInstallDriver函數調用完之后,驅動程序dll會被釋放掉,然后系統再讀取注冊表信息去找匹配的驅動來加載,所以才會出現上述情況。因此如果你寫入的USB_DRIVER_SETTINGS是和你的設備匹配的,系統就會加載你的驅動,去繼續干活了。
        這次系統加載會干什么呢?會調用驅動DLL中的USBDeviceAttach入口函數。這個函數的學問就大啦,函數的聲明如下:
BOOL USBDeviceAttach(USB_HANDLE hDevice, LPCUSB_FUNCS lpUsbFuncs,
                     LPCUSB_INTERFACE lpInterface, LPCWSTR szUniqueDriverId,
                     LPBOOL fAcceptControl,
                     LPCUSB_DRIVER_SETTINGS lpDriverSettings, DWORD dwUnused)
lpUsbFuncs是usb的一些函數接口,定義在USBDI.H頭文件中,大家自己先看看,對照msdn看看。今天只取其中一個函數說一下:lpGetDeviceInfo
在USBDeviceAttach中寫這么一行:
LPCUSB_DEVICE lpUsbDev = (lpUsbFuncs->lpGetDeviceInfo)(hDevice);
如果取出的lpUsbDev是NULL的話,那就說明該設備無法使用,咱們也不用繼續折騰了,不為空的話,建議大家把這個lpUsbDev指向的那些數據對照msdn搞清楚其含義,這也有助于你理解usb規范中的一些東西。這個結構里面套結構,套的很深很深,而且我看MSDN2005和我的eVc4中的頭文件中的定義有些地方有出入,大家自己研究一下,捉摸一下吧,結構就對照自己的頭文件中的定義去探索,各成員的含義就對照MSDN去解讀,完成了,差不多就進了一大步了
           馬上要開會,所以今天就寫到這里,大家也可以自己研究研究,然后和我交流,我只覺得一個人在這黑漆八烏地探索實在是......要是有個伴就好了~ :P有個老師就更爽了~~~


posted on 2007-04-29 14:22 SuperPlayeR 閱讀(3364) 評論(0)  編輯 收藏 引用 所屬分類: WinCE/Mobile應用開發
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产日本欧美一区二区三区| 欧美成人午夜免费视在线看片| 欧美日韩一区二区在线播放| 一本色道久久综合精品竹菊| 亚洲免费激情| 国产精品不卡在线| 欧美一区三区二区在线观看| 久久不射电影网| 亚洲激情影视| 一区二区国产日产| 国产亚洲欧美aaaa| 欧美高清在线精品一区| 欧美国产先锋| 欧美一区二区三区在线| 亚洲精品中文字幕在线| 久久精品九九| 免费看的黄色欧美网站| 在线亚洲免费| 午夜精品国产更新| 亚洲黄色影院| 亚洲一区高清| 亚洲国产另类精品专区| aa日韩免费精品视频一| 韩国成人理伦片免费播放| 亚洲精品视频免费在线观看| 国产日韩欧美视频| 亚洲国产福利在线| 国产精品高潮呻吟久久| 另类av导航| 国产精品久久久久影院色老大 | 亚洲视频1区| 久久久欧美一区二区| 亚洲视频网站在线观看| 久久久久久久久久看片| 亚洲一区二区日本| 久久免费国产精品1| 亚洲一区在线播放| 久久国产一二区| 亚洲欧美激情一区二区| 久久视频在线免费观看| 欧美一区激情| 国产精品福利在线| 亚洲日本va在线观看| 伊人久久大香线蕉综合热线| 亚洲色图制服丝袜| 99亚洲精品| 玖玖国产精品视频| 久久精品九九| 国产一区二区精品久久99| 一区二区三区 在线观看视| 亚洲国产合集| 久久久久久久91| 久久久久久精| 国产欧美精品在线| 亚洲欧美另类综合偷拍| 亚洲一区二区在线播放| 欧美日本国产| 91久久精品一区| 亚洲乱码久久| 欧美国产亚洲精品久久久8v| 亚洲电影免费观看高清完整版| 国产在线观看一区| 久久大香伊蕉在人线观看热2| 欧美一区二区三区四区高清| 国产精品网站一区| 亚洲综合三区| 久久精品91久久香蕉加勒比 | 久久久青草青青国产亚洲免观| 久久精品夜色噜噜亚洲a∨| 国产精品人人做人人爽| 一区二区三区四区蜜桃| 亚洲一区二区在线看| 欧美视频在线一区| 亚洲一区网站| 久久精视频免费在线久久完整在线看| 国产亚洲a∨片在线观看| 欧美一区二区免费| 国模一区二区三区| 美女999久久久精品视频| 影音先锋日韩精品| 久久久久久久久综合| 欧美成ee人免费视频| 91久久综合亚洲鲁鲁五月天| 欧美美女福利视频| 亚洲深夜av| 久久天天躁夜夜躁狠狠躁2022 | 国产欧美日本| 久久中文字幕导航| 99re6热只有精品免费观看| 亚洲一区制服诱惑| 国产一区自拍视频| 免费观看在线综合| 日韩香蕉视频| 久久免费99精品久久久久久| 亚洲精品之草原avav久久| 欧美午夜免费| 久久久久久自在自线| 亚洲人被黑人高潮完整版| 香蕉亚洲视频| 亚洲区一区二区三区| 国产精品久久久久久久久| 久久精品在这里| 日韩亚洲欧美一区| 蜜臀91精品一区二区三区| 亚洲一区二区av电影| 狠狠干综合网| 国产精品午夜av在线| 欧美ed2k| 久久精品免费观看| 99国产精品久久久久久久| 猫咪成人在线观看| 午夜精品免费视频| 亚洲韩国日本中文字幕| 国产欧美精品一区二区三区介绍| 免费日韩av电影| 欧美一级大片在线免费观看| 日韩视频永久免费观看| 欧美本精品男人aⅴ天堂| 亚洲综合国产| 日韩一区二区久久| 伊人激情综合| 国产综合18久久久久久| 国产精品男人爽免费视频1 | 亚洲一区二区免费看| 亚洲精品乱码久久久久久黑人 | 午夜视频在线观看一区| 亚洲日本理论电影| 欧美成人精品在线观看| 久久精品国产亚洲5555| 亚洲图片欧洲图片av| 日韩午夜激情| 亚洲精品久久久久久下一站| 一区二区视频免费完整版观看| 国产精品一区一区| 国产伦精品一区二区三区四区免费| 欧美激情综合五月色丁香| 免费看成人av| 欧美aa国产视频| 欧美二区在线播放| 欧美福利一区二区| 美日韩丰满少妇在线观看| 久久久久免费视频| 美女精品在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久精品国产欧美亚洲人人爽| 欧美一区二区三区在线观看| 最新亚洲一区| 欧美精品久久久久久久| 久久精品一二三| 久久久精品国产一区二区三区| 久久成人综合视频| 久久亚洲综合色| 久久一区二区精品| 欧美精品一线| 国产精品久久二区二区| 国产精品久久久久影院色老大| 国产精品入口福利| 国产主播精品在线| 亚洲欧洲另类| 亚洲午夜一二三区视频| 亚洲一区二区三区免费观看 | 亚洲承认在线| 亚洲三级影院| 亚洲欧美日韩精品久久| 欧美在线免费观看亚洲| 另类图片国产| 亚洲精品日韩综合观看成人91| 亚洲特级片在线| 欧美一区二区三区精品 | 亚洲伦理在线观看| 亚洲图片欧美午夜| 久久精品国产精品亚洲精品| 麻豆亚洲精品| 欧美午夜片在线观看| 国产亚洲综合在线| 亚洲日本aⅴ片在线观看香蕉| 亚洲综合国产激情另类一区| 久久久午夜电影| 亚洲精选中文字幕| 篠田优中文在线播放第一区| 免费亚洲一区| 国产午夜精品全部视频在线播放| 亚洲精品视频啊美女在线直播| 亚洲欧美日韩另类| 欧美高清在线视频观看不卡| 一区二区三区视频在线观看| 久久久久久久一区二区| 欧美日韩视频在线一区二区观看视频| 国产手机视频一区二区| 一本大道久久a久久精品综合| 久久亚洲捆绑美女| 日韩亚洲国产欧美| 久久香蕉精品| 国产日韩欧美在线播放| 一区二区毛片| 欧美黑人在线观看| 欧美一区二粉嫩精品国产一线天| 欧美日产一区二区三区在线观看| 国产综合色产在线精品| 午夜在线视频观看日韩17c|