二問 DevicePath 取得問題 |
缺席
|
HUNK999
初階會員 發表:9 回覆:35 積分:28 註冊:2009-07-23 發送簡訊給我 |
請問如何得到DevicePath ?
[code cpp] interfaceDev.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); // cbSize=28 正確! int ErrorCode00 = GetLastError(); //0 : 顯示沒錯誤 //------------------------------------------------------------------------ //Get interface if(!SetupDiEnumDeviceInterfaces(hDev, NULL, &guid, dwDevice, &interfaceDev)|| SetupDiGetDeviceInterfaceDetail(hDev, &interfaceDev, NULL, 0, &dwSize, NULL)) { return INVALID_HANDLE_VALUE; } //------------------------------------------------------------------------ //Create buffer //DeviceDetail = offsetof(SP_DEVICE_INTERFACE_DETAIL_DATA,DevicePath) sizeof(TCHAR) 1; // <-- 網路上有人提供此方法 , 但他不是我要的指標型態(pDevice) , 如何修改此行呢 ??? pDeviceDetail = (SP_INTERFACE_DEVICE_DETAIL_DATA*)malloc(dwSize); // 我得到是dwSize = 170 int ErrorCode0 = GetLastError(); //錯誤碼 = 122 : 上行執行後 , 顯示傳遞到系統調用的數據區太小 pDeviceDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA); //cbSize得到是6 , 改5也沒用!? int ErrorCode = GetLastError(); //錯誤碼 = 122 : 也是顯示傳遞到系統調用的數據區太小 Why ????? [/code] 編輯記錄
HUNK999 重新編輯於 2009-08-03 18:58:28, 註解 無‧
|
HUNK999
初階會員 發表:9 回覆:35 積分:28 註冊:2009-07-23 發送簡訊給我 |
DevicePath 已成功取得! [code cpp] HDEVINFO info = SetupDiGetClassDevs(pGuid,NULL,NULL,DIGCF_PRESENT|DIGCF_INTERFACEDEVICE); //再次取得目前HID裝置的資訊 if(info == INVALID_HANDLE_VALUE) //判斷是否資訊取得成功\par { fprintf(fp1,"No available for this GUID !\n"); return NULL; //如果失敗, Handle = NULL } SP_DEVICE_INTERFACE_DATA ifdata; //宣告界面的資料 ifdata.cbSize = sizeof(ifdata); //宣告界面資料的大小, 要設成一個Byte Alignment (正確值為) by C 程式碼產生 int ErrorCode1 = GetLastError(); //檢查介面大小是否為 if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, instance, &ifdata)) //列舉裝置 { fprintf(fp1,"SetupDiEnumDeviceInterfaces Error ! 第%d個instance , 沒找到HID裝置! \n",instance); SetupDiDestroyDeviceInfoList(info); return NULL; } int ErrorCode2 = GetLastError(); //檢查列舉是否成功 DWORD ReqLen; SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, NULL, &ReqLen, NULL); //第一次調用InterfaceDetail , 得到ReqLen大小, 返回錯誤 DWORD TrueLen = ReqLen; //= 182 PSP_DEVICE_INTERFACE_DETAIL_DATA ifDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(TrueLen); int ErrorCode3 = GetLastError(); //檢查細節資料是否正確 122代表緩衝區過小 if(ifDetail==NULL) { fprintf(fp1,"ifDetail == NULL !\n"); SetupDiDestroyDeviceInfoList(info); return NULL; } ifDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); //6 int ErrorCode4 = GetLastError(); //再檢查細節資料是否正確 if(!SetupDiGetDeviceInterfaceDetail(info, &ifdata, ifDetail, TrueLen, &ReqLen, NULL)) //第二次調用InterfaceDetail { fprintf(fp1,"SetupDiGetDeviceInterfaceDetail Error !\n"); delete ifDetail; SetupDiDestroyDeviceInfoList(info); return NULL; } int ErrorCode5 = GetLastError(); //檢查設定細節資料是否執行正確 HANDLE pDevice = CreateFile(ifDetail->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0,//FILE_ATTRIBUTE_NORMAL, NULL); int ErrorCode6 = GetLastError(); //開設備是否成功 [/code] ===================引 用 HUNK999 文 章=================== 請問如何得到DevicePath ? [code cpp] interfaceDev.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); // cbSize=28 正確! int ErrorCode00 = GetLastError(); //0 : 顯示沒錯誤 //------------------------------------------------------------------------ //Get interface if(!SetupDiEnumDeviceInterfaces(hDev, NULL, &guid, dwDevice, &interfaceDev)|| SetupDiGetDeviceInterfaceDetail(hDev, &interfaceDev, NULL, 0, &dwSize, NULL)) { return INVALID_HANDLE_VALUE; } //------------------------------------------------------------------------ //Create buffer //DeviceDetail = offsetof(SP_DEVICE_INTERFACE_DETAIL_DATA,DevicePath) sizeof(TCHAR) 1; // <-- 網路上有人提供此方法 , 但他不是我要的指標型態(pDevice) , 如何修改此行呢 ??? pDeviceDetail = (SP_INTERFACE_DEVICE_DETAIL_DATA*)malloc(dwSize); // 我得到是dwSize = 170 int ErrorCode0 = GetLastError(); //錯誤碼 = 122 : 上行執行後 , 顯示傳遞到系統調用的數據區太小 pDeviceDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA); //cbSize得到是6 , 改5也沒用!? int ErrorCode = GetLastError(); //錯誤碼 = 122 : 也是顯示傳遞到系統調用的數據區太小 Why ????? [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |