在我的 UMDF Windows 驱动程序中,我在目录中创建了我的设备的符号链接,\DosDevices\Global\以跟踪设备实例。因此,如果设备连接到主机,则会\DosDevices\Global\MyDevice0创建符号链接。如果连接了另一个设备,\DosDevices\Global\MyDevice1则会创建一个符号链接。我通过以下代码实现了这一点:
int symbolicLinkIndex = 0;
for (symbolicLinkIndex = 0; symbolicLinkIndex < 127; symbolicLinkIndex++) // 127 max usb devices
{
swprintf(m_SymbolicLinkName,
L"\\DosDevices\\Global\\MyDevice%d",
symbolicLinkIndex);
hr = m_FxDevice->CreateSymbolicLinkA(m_SymbolicLinkName);
if (FAILED(hr))
{
// Symbolic link already exists try next index
if (HRESULT_CODE(hr) == ERROR_ALREADY_EXISTS || HRESULT_CODE(hr) == ERROR_FILE_EXISTS)
continue;
else
{
TraceEvents(TRACE_LEVEL_ERROR, TRACE_DEVICE, "%!FUNC! Failed to create symbolic link: %lu", hr);
goto Exit;
}
}
else
{
TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_DEVICE, "%!FUNC! Created symbolic link: %S", m_SymbolicLinkName);
break;
}
}
方法文档:IWDFDevice::CreateSymbolicLink
如果我快速将两个设备连接在一起,这将起作用。但是,如果我等待大约 10 秒并连接第三个设备,它似乎会获得\DosDevices\Global\MyDevice0不会发生的符号链接,因为第一个设备已经获得索引0并且仍然连接。
那么为什么符号链接似乎在一段时间后被删除了呢?另外我想知道我的方法是否适合计算设备实例?