- Published on
WinUSB で PID と VID を取得する
- Authors
- Name
- Daisuke Kobayashi
- https://twitter.com
WinUSB を使ったプログラムで接続している USB デバイスの PID と VID を取得し表示などを切り替えたい時があった.
とりあえず,前回 説明したプログラムの GetDevicePath 関数の引数の device_path にそれらの情報が文字列として格納されていたので,そこから抽出することにした.
HANDLE OpenDevice(LPGUID interface_guid, bool sync, CString& vid, CString& pid)
{
HANDLE device_handle = NULL;
char device_path[_MAX_PATH + 1];
BOOL retval = GetDevicePath(interface_guid, (LPTSTR)device_path,
sizeof(device_path) / sizeof(device_path[0]));
device_handle = CreateFile((LPTSTR)device_path,
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_WRITE | FILE_SHARE_READ, NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
NULL);
CString dpath(_T(device_path));
int n = dpath.Find("vid_");
vid = dpath.Mid(n + 4, 4);
n = dpath.Find("pid_");
pid = dpath.Mid(n + 4, 4);
return device_handle;
}