司机的符号链接消失了

时间:2016-10-12 10:41:51

标签: c++ driver msdn wdf umdf

在我的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并且仍然连接。

那为什么看起来符号链接会在一段时间后被删除?另外,我想知道我的方法是否适合计算设备实例?

0 个答案:

没有答案