USB端口绑定到应用程序 - Windows

时间:2015-07-15 22:48:12

标签: visual-c++ usb

我编写了与特定USB设备(视频编码器)通信的应用程序。 设备本身不允许获取设备ID,因此如果我连接两个设备,我无法识别它们。现在的解决方案是拥有与USB设备(编码器)一样多的PC

我想知道如何为每个应用程序专用一个USB端口。

说明我现在的情况

[Device 1] - [PC 1] - [USB Port 1] - [Application 1]
[Device 2] - [PC 2] - [USB Port 1] - [Application 1]
[Device 3] - [PC 3] - [USB Port 1] - [Application 1]

我希望如何

[Device 1] \            / [USB Hub / USB Port 1] - [Application 1]
[Device 2]  -- [PC 1] --  [USB Hub / USB Port 2] - [Application 2]
[Device 3] /            \ [USB Hub / USB Port 3] - [Application 3]

我想像这样创建(伪代码)

main(){

    attachApplicationToUsbPort('USB Hub / USB Port 1')

    CoInitializeEx(NULL, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE);

    result = CoCreateInstance(CLSID_CBMDStreamingDiscovery, NULL, CLSCTX_ALL, IID_IBMDStreamingDiscovery, (void**)&m_streamingDiscovery);

    ...
    ...
}

现在我打开三个应用程序并将每个应用程序分配给特定端口。

1 个答案:

答案 0 :(得分:0)

我不知道您使用哪种API来访问该USB设备,但Windows中的每个设备都有一个名为Device Instance ID的唯一标识符。对于没有序列号的USB设备,设备实例ID将如下所示:

USB\VID_51AD&PID_7D8B\6&11A23516&18&0000

我相信第二个反斜杠之后的部分应该是你插入设备的端口的函数,我认为重启时不应该改变。您应该可以使用它将进程分配给特定的USB设备,只要该设备始终插入同一端口。

我认为这是一种简单的方法。另一方面,如果您真的想开始处理代码中的USB集线器和端口,可以查看Microsoft的USBView代码。