WinUSBのサンプルコード. C言語です.
http://d.hatena.ne.jp/Waroe/20090220/1235124086
2/20版はこちら↑
http://d.hatena.ne.jp/Waroe/20090311/1236761835
3/11 通信完了. 完成品↑
#include<stdio.h> //テスト用です #include<windows.h> //ここ追加(HowTo・・にないけど) #include<WINUSB.H> #include<usb100.h> #include<setupapi.h> //ここも追加 #include<strsafe.h> //ここも追加 BOOL GetDevicePath(LPGUID InterfaceGuid, PCHAR DevicePath, size_t BufLen) { BOOL bResult = FALSE; HDEVINFO deviceInfo; SP_DEVICE_INTERFACE_DATA interfaceData; PSP_DEVICE_INTERFACE_DETAIL_DATA detailData = NULL; ULONG length; ULONG requiredLength=0; HRESULT hr; deviceInfo = SetupDiGetClassDevs(InterfaceGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); interfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); bResult = SetupDiEnumDeviceInterfaces(deviceInfo, NULL, InterfaceGuid, 0, &interfaceData); SetupDiGetDeviceInterfaceDetail(deviceInfo, &interfaceData, NULL, 0, &requiredLength, NULL); detailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)LocalAlloc(LMEM_FIXED, requiredLength); if(NULL == detailData) { SetupDiDestroyDeviceInfoList(deviceInfo); return FALSE; } detailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); length = requiredLength; bResult = SetupDiGetDeviceInterfaceDetail(deviceInfo, &interfaceData, detailData, length, &requiredLength, NULL); if(FALSE == bResult) { LocalFree(detailData); return FALSE; } hr = StringCchCopy(DevicePath, BufLen, detailData->DevicePath); if(FAILED(hr)) { SetupDiDestroyDeviceInfoList(deviceInfo); LocalFree(detailData); } LocalFree(detailData); return bResult; } void main(void){ // 仮にGUIDが"1F1F1F1F1-1F1F-1F1F-1F1F-1F1F1F1F1F1F"だった場合,INFの[Dev_AddReg]で指定したGUID GUID guid = { 0x1F1F1F1F1, 0x1F1F, 0x1F1F, { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F} }; //↑のようにする. GUID構造体というものがあるらしい. char devicePath[512]; //MAX_DEVPATH_LENGTH は英語だからわかりにくいが, 想定されるデバイスのパス名の長さ GetDevicePath( &guid, devicePath, 512); printf("Hello, world!\n"); }
途中までしかかけてないけどビルドは通ります.
ビルドが通るので, デバイスハンドルの取得はできているはずです.*1