WinUSB で PID と VID を取得する

Posted Wed May 15 2013

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;
}