我想將資料從我的 Windows 計算機發送到我的 Android 手機。
為此,我需要激活 Android 設備的Accessory 模式和 Windows 設備上的 USB Host 模式。
在我的 Windows 計算機上,我有一個用于 Android Mobile 的 USB 復合設備。這個復合 USB 設備捆綁了幾個介面:USB 復合設備列舉。
不幸的是,我找不到如何訪問復合設備的單個設備的資訊。
我想獲得一個設備 ID / 路徑,我可以用它打開它CreateFile以使用創建HANDLE的打開 WinUsb 句柄WinUsb_Initialize。
但是如果我嘗試用 來打開一個復合 USB 設備CreateFile,我會得到一個ERROR_NOT_ENOUGH_MEMORY結果。
我正在使用這段代碼:
_deviceHandle = CreateFile(
deviceId, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_NONE, NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
...檔案名為“\?\USB#VID_04E8&PID_6864#RF8NB0NMT0X#{a5dcbf10-6530-11d2-901f-00c04fb951ed}”
這是GUID_DEVINTERFACE_USB_DEVICE啟用了 USB 除錯的三星 Galaxy 手機的設備 ID。
由于驅動程式 Windows 使用ssudbus2.sys三星電子有限公司的版本 2.17.16.0 (2021-09-14)。
MyPhoneExplorer應用程式可以訪問我的手機。所以它必須是沒有特殊驅動程式的解決方案。
如何獲取復合 USB 設備中單個 USB 設備的此設備 ID/路徑?
uj5u.com熱心網友回復:
您使用的檔案名代表整個 USB 設備;它不代表任何特定的實體。代表介面的檔案名將&mi_01在產品名稱之后有類似的內容,其中 1 是從 0 開始的介面編號。
您也許可以&mi_xx在適當的位置將適當的字串插入檔案名并使其作業。我認為您還需要修改字串末尾的 GUID,即設備介面 GUID。
在代碼中查找檔案名的更標準方法是使用 SetupAPI 和配置管理器 (CM) API 來遍歷 USB 設備的所有子設備。查找設備實體 ID(使用 檢索CM_Get_Device_ID)包含MI_xx您xx要查找的兩位數介面編號的子項。
以獨立形式撰寫此代碼并對其進行測驗和除錯需要付出很多努力,因此我不會向您展示一個有效的代碼示例。相反,我鼓勵您查看get_interface_compositelibusbp 函式中的作業代碼,它可以完成您需要做的事情:
https://github.com/pololu/libusbp/blob/759f48d/src/windows/interface_windows.c#L86
還有一些步驟可以獲取該設備節點的路徑。然后實際呼叫的代碼CreateFile在WinUsb_Initialize這里:
https://github.com/pololu/libusbp/blob/759f48d/src/windows/generic_handle_windows.c#L56-L77
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/525985.html
上一篇:我該如何解決“(此處為變數名)是一個變數,但用作型別?”[復制]
下一篇:POST請求回傳空回應
