#include #pragma comment(lib,"shlwapi.lib")
#include #pragma comment(lib,"setupapi.lib")
/** 函式名稱: enumusbdev
* 函式功能: 列舉裝置
* 參 數:
* acdevpath: 存放裝置路徑
* ndevnum: 裝置數量
* 返 回 值: 成功返回true,失敗返回false
*/bool cenumdevdlg::enumusbdev(out char acdevpath[max_path][max_path], out int &ndevnum)
zeromemory(acdevpath, sizeof(acdevpath));
bool bret = false;
sp_device_inte***ce_data deviceinte***cedata; // 儲存裝置介面資訊
dword dwrequiredsize = 0; // 得到詳細資訊時需要的記憶體大小
psp_inte***ce_device_detail_data pdevicedetaildata = null; // 詳細資訊
hdevinfo hdeviceinfo; // 裝置資訊集合的指標
guid inte***ceguid = g_guidcdrom;
deviceinte***cedata.cbsize = sizeof(sp_device_inte***ce_data);
//// 1.列舉裝置
// int i = 0;
hdeviceinfo = setupdigetclassdevs(
&inte***ceguid,
null,
null,
digcf_deviceinte***ce|digcf_present);
if (hdeviceinfo == invalid_handle_value)
while (1)
// 下面需要得到inte***ce的詳細資訊
// 先得到詳細資訊需要的記憶體大小
bret = setupdigetdeviceinte***cedetail(hdeviceinfo, &deviceinte***cedata, null, 0, &dwrequiredsize, null);
if(bret)
// 為詳細資訊分配記憶體
if(pdevicedetaildata)
pdevicedetaildata = (psp_inte***ce_device_detail_data)malloc(dwrequiredsize);
if(pdevicedetaildata == null)
// 得到inte***ce的詳細資訊
pdevicedetaildata->cbsize = sizeof(sp_inte***ce_device_detail_data);
sp_devinfo_data deviceinfodata;
deviceinfodata.cbsize = sizeof(sp_devinfo_data);
bret = setupdigetdeviceinte***cedetail(
hdeviceinfo,
&deviceinte***cedata,
pdevicedetaildata,
dwrequiredsize,
&dwrequiredsize,
&deviceinfodata);
if ( !bret )
strcpy(acdevpath[ndevnum], pdevicedetaildata->devicepath);
ndevnum++;
} if(pdevicedetaildata)
setupdidestroydeviceinfolist(hdeviceinfo);
return true;
}void cenumdevdlg::onbutton1()
}
USB主機列舉USB裝置步驟
usb主機列舉usb裝置步驟 1.usb主機對usb裝置進行復位,復位後usb裝置用端點0來傳輸資料 usb主機向usb裝置傳送獲取裝置描述符指令,usb裝置收到指令後,通過端點0將裝置描述符資訊返回給usb主機,且若端點0中包含完整的18位元組裝置描述符資訊,則將完整的裝置描述符資訊返回給usb主...
USB裝置列舉過程
當裝置連線到主機時,按照以下順序進行列舉 1.連線了裝置的hub 在host 查詢其狀態改變端點時返回對應的bitmap,告知host 某個port 狀態發生了改變。2.主機向hub 查詢該port 的狀態,得知有裝置連線,並知道了該裝置的基本特性。3.主機等待 至少100ms 裝置上電穩定,然後向...
基於OHCI的USB主機 USB裝置列舉
usb裝置接入以後,必須進行裝置列舉,得到裝置引數,設定裝置執行配置等引數,下面的 就是對u盤裝置進行列舉的過程。因為沒有使用作業系統,所以函式使用狀態遷移的方式完成列舉,該函式在主迴圈中被呼叫。usb裝置列舉處理 return 當前列舉處理的狀態 short usbenumdev void old...