在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

USB設備加載與卸除的通用方法介紹

英創信息技術 ? 作者:英創信息技術 ? 2019-09-25 17:09 ? 次閱讀

有時應用需要檢查USB設備的加載與卸除消息,如U盤的插上與拔出。一種辦法是以輪詢的方式調用設備接口嘗試訪問設備,但這樣的做法效率很低,并且實時性不高。本文將介紹更為通用的方法,通過系統API函數RequestDeviceNotifications,讀取設備消息,獲得設備加載及移除的消息。

查找設備IClass值

每個USB設備都有一個IClass值,相當于在系統里的編號,IClass值可以通過查詢板子注冊表獲得。以U盤為例:

USB設備加載與卸除的通用方法介紹

如圖,[HKEY_LOCAL_MACHINE\Drivers\USB\ClientDrivers]下存有所有USB設備類型的信息。Mass_Storage_Class即U盤的IClass值為{A4E7EDDA-E575-4252-9D6B-4195D48BB865}

用代碼表示即

GUID guid = { 0xA4E7EDDA, 0xE575, 0x4252, { 0x9D, 0x6B, 0x41, 0x95, 0xD4, 0x8B, 0xB8, 0x65 } };

調用API監聽設備消息

監聽流程如下:

創建消息隊列->綁定設備和消息隊列->讀取消息隊列

以U盤為例,代碼如下

MSGQUEUEOPTIONS msgopts;

//{A4E7EDDA-E575-4252-9D6B-4195D48BB865} 這個是USB storage的

GUID guid = { 0xA4E7EDDA, 0xE575, 0x4252, { 0x9D, 0x6B, 0x41, 0x95, 0xD4, 0x8B, 0xB8, 0x65 } };

msgopts.dwSize = sizeof(MSGQUEUEOPTIONS);

msgopts.dwFlags = 0;

msgopts.dwMaxMessages = 10; //?

msgopts.cbMaxMessage = sizeof(MYDEV);

msgopts.bReadAccess = TRUE;

HANDLE m_hReadMsgQ = CreateMsgQueue(NULL, &msgopts);

HANDLE hNotify;

DWORD ret;

hNotify = RequestDeviceNotifications(&guid, m_hReadMsgQ, TRUE);

flags = 0;

size = 0;

//while(true){

ret = WaitForSingleObject(m_hReadMsgQ, INFINITE);

if(ret == WAIT_OBJECT_0)

{

while (ReadMsgQueue(m_hReadMsgQ, &detail, sizeof(detail), &size, 1, &flags) == TRUE) //參數“1”表示1ms超時

{

if (detail.d.fAttached)

{

wprintf(L"%s %s,f=0x%x\r\n", detail.d.szName, detail.d.fAttached ? L"appeared" : L"was removed", flags);

}

Else

{

wprintf(L"%s %s,f=0x%x\r\n", detail.d.szName, detail.d.fAttached ? L"appeared" : L"was removed", flags);

}// if (detail.d.fAttached)

}//while

}//if(ret == WAIT_OBJECT_0)

//}while(true)

CloseMsgQueue(m_hReadMsgQ);

注意:如果是U盤,這里讀到的detail.d.szName是U盤在驅動中的名稱,如“DSK1”,并非U盤盤符。

消息隊列里讀到的消息包括已加載設備的加載消息。

根據設備加載消息獲得準確的設備信息

以U盤為例,它的設備類型為“DSK”,而SD卡,NANDFLASH的設備類型也是DSK,所以從設備消息里讀出設備名如“DSK1”、“DSK2”后并不能直觀確定哪個是U盤的設備名。

這時可以調用存儲器相關API函數OpenStore根據設備名,查詢U盤盤符等信息。

必要的頭文件及lib庫

#include "Storemgr.h"

#pragma comment(lib,"Storeapi.lib")

封裝OpenStore函數

增加超時是有必要的,因為設備加載消息來得更快,可能存儲設備還沒完全加載好。最長可能慢1ms,所以稍加延時即可。

HANDLE WINAPI OpenStoreEx(LPCTSTR szDeviceName, DWORD timeout = 3)

{

HANDLE hStore;

int i;

for(i=0;i

{

hStore = OpenStore(szDeviceName);

if (hStore != INVALID_HANDLE_VALUE)

{

break;;

}

Sleep(1);

}

return hStore;

}

獲得詳細信息

GetStoreInfo(hStore, &StoreInfo);

//if(wcscmp(StoreInfo.szStoreName, L"SD Memory Card") == 0) //判斷是SD卡

//else if(wcscmp(StoreInfo.szStoreName, L"NANDFS") == 0) //判斷是NandFlash

//else if (wcscmp(StoreInfo.szStoreName, L"USB Hard Disk Drive") == 0) //判斷是U盤

wprintf(L"%s %s %s,f=0x%x\r\n", detail.d.szName, StoreInfo.szStoreName, detail.d.fAttached ? L"appeared" : L"was removed", flags);

用鏈表存儲設備信息

在U盤加載時,可以通過訪問存儲驅動API來查詢設備信息。但是當設備移除后,設備信息就不存在于驅動中了,所以用OpenStore和GetStoreInfo就無法查到已移除的設備信息了。

想要知道移除的設備詳細信息,就只有在加載的時候將信息存在數據結構中。這樣在移除時,通過查詢數據結構中的數據,就可以獲得設備詳細信息了。

數據結構根據實際需求,使用數組,鏈表,MAP,都可以。英創對客戶提供一份使用單向鏈表實現的例程。

其它設備

USB擴展串口模塊

英創主板擴展串口號均在10以上,所以通過設備名中的設備號,能很容易確定是否為USB擴展的串口設備。

USB打印機、攝像頭等

這些USB設備通過設備名即能確定是什么USB設備。

相關例程可以聯系英創工程師獲得。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • usb
    usb
    +關注

    關注

    60

    文章

    7991

    瀏覽量

    266372
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6087

    瀏覽量

    35661
收藏 人收藏

    評論

    相關推薦

    檢查u***設備加載卸除方法

      有時應用需要檢查USB設備加載卸除消息,如U盤的插上與拔出。一種辦法是以輪詢的方式調用設備接口嘗試訪問
    發表于 01-04 14:34

    USB主機和設備介紹

    USB主機和設備USB總裁中最重要的就是USB主機和USB設備
    發表于 05-23 09:23

    Freescale USB大容量存儲設備引導加載器資料分享

    USB大容量存儲設備(MSD)引導加載程序
    發表于 12-09 07:28

    USB大容量存儲設備主機引導加載程序資料分享

    USB大容量存儲設備(MSD)主機引導加載程序
    發表于 12-09 06:07

    微軟 USB存儲設備通用驅動 for Win9X

    微軟 USB存儲設備通用驅動 for Win9X.zip
    發表于 01-26 14:39 ?5次下載

    創意USB設備介紹

    創意USB設備介紹 奇百怪的創意設備盤點又和大家見面了。繼前幾期推出了千奇百怪USB玩意兒盤點后,大家可謂大開了眼界。有網友來電詢問
    發表于 04-28 10:20 ?1248次閱讀

    通用串行總線USB設備的驅動

    從問題的由來、類驅動程序、通信協議、描述符、驅動開發等對 USB 的驅動進行分析和討論,提出USB 設備使用操作系統嵌入的通用類驅動程序成為趨勢。
    發表于 06-03 17:10 ?126次下載
    <b class='flag-5'>通用</b>串行總線<b class='flag-5'>USB</b><b class='flag-5'>設備</b>的驅動

    將DSP物理連接到USB主機上的USB引導加載程序

    TMS32 VC5506/C5507/C5509/C5509A數字信號處理器(DSP)的加載通過處理器通用串行總線(USB)外圍設備是標準的一部分。在
    發表于 04-25 10:49 ?8次下載
    將DSP物理連接到<b class='flag-5'>USB</b>主機上的<b class='flag-5'>USB</b>引導<b class='flag-5'>加載</b>程序

    如何通過系統API函數讀取USB設備消息,獲得設備加載及移除的消息

    有時應用需要檢查USB設備加載卸除消息,如U盤的插上與拔出。一種辦法是以輪詢的方式調用設備接口嘗試訪問
    發表于 08-31 17:52 ?5497次閱讀
    如何通過系統API函數讀取<b class='flag-5'>USB</b><b class='flag-5'>設備</b>消息,獲得<b class='flag-5'>設備</b><b class='flag-5'>加載</b>及移除的消息

    如何加載USB-Blaster驅動的詳細視頻資料說明

    本文檔的主要內容詳細介紹的是如何加載USB-Blaster驅動的詳細視頻資料說明。
    發表于 05-06 16:40 ?3次下載
    如何<b class='flag-5'>加載</b><b class='flag-5'>USB</b>-Blaster驅動的詳細視頻資料說明

    HMI畫面加載到HMI設備方法

    可將自己新建的項目加載到 HMI設備并在運行系統中執行。 為此,組態設備和 HMI設備之間必須建立連接。 如果您沒有使用 HMI設備,則
    的頭像 發表于 09-21 09:29 ?5902次閱讀
    HMI畫面<b class='flag-5'>加載</b>到HMI<b class='flag-5'>設備</b>的<b class='flag-5'>方法</b>

    通用圖像加載器教程及案例

    ) ImageLoader配置(線程執行器、下載器、解碼器、內存和磁盤緩存、顯示圖像選項等)的廣泛定制 每個顯示圖像調用都有很多定制選項(存根圖像、緩存開關、解碼選項、位圖處理和顯示等) 圖像緩存在內存和/或磁盤(設備的文件系統或SD卡) 監聽加載
    發表于 03-30 13:41 ?3次下載

    USB設備在Linux系統中的識別和加載過程

    不知道大家在學習Linux的時候有沒有過這樣的疑問,為什么我們通過同一個接口接入的不同USB設備,我們的電腦都可以識別到呢?為什么Linux電腦不會把鼠標識別成鍵盤呢?帶著這些疑問我們一起來看一下USB的識別和
    的頭像 發表于 05-10 11:53 ?4762次閱讀

    USB復合設備介紹

    電子發燒友網站提供《USB復合設備介紹.pdf》資料免費下載
    發表于 08-01 10:37 ?0次下載
    <b class='flag-5'>USB</b>復合<b class='flag-5'>設備</b><b class='flag-5'>介紹</b>

    用于MCU的USB?DFU引導加載程序

    電子發燒友網站提供《用于MCU的USB?DFU引導加載程序.pdf》資料免費下載
    發表于 10-27 14:23 ?1次下載
    用于MCU的<b class='flag-5'>USB</b>?DFU引導<b class='flag-5'>加載</b>程序
    主站蜘蛛池模板: 男人的天堂一区二区视频在线观看 | 两性色午夜视频免费老司机 | 色欧美视频 | 日日夜夜精品 | 四虎成人欧美精品在永久在线 | 六月婷婷色 | 国产香蕉免费精品视频 | 亚洲精品视频区 | 国产日日操| 美女扒开尿口给男人桶动态图 | 午夜网站免费版在线观看 | a级特黄毛片| 婷婷色亚洲 | 久久国产免费观看精品 | 91视频色| 在线观看高清视频 | xxxx黄| 成人黄色免费看 | 天天射综合 | 欧美久操| 青青操久久 | 狠狠干干干 | 亚洲骚片| 久久婷婷丁香七月色综合 | 欧美无遮挡一区二区三区 | 日日噜噜噜夜夜爽爽狠狠 | 性刺激的欧美三级视频 | 奇米影视亚洲四色8888 | 四虎影视国产精品 | 日本特级淫片免费看 | 亚洲黄色录像 | 色香视频一sxmv首页 | 2021国产精品自在拍在线播放 | 天天在线天天综合网色 | free性欧美video | 人人骚| 性视频软件 | 色一欲一性一乱一区二区三区 | 午夜美女久久久久爽久久 | 日本一本高清视频 | 欧美 日韩 中文字幕 |