Символьная ссылка драйвера исчезает

#c #driver #msdn #wdf #umdf

#c #драйвер #msdn #wdf #umdf

Вопрос:

В моем драйвере UMDF для Windows я создаю символическую ссылку на свое устройство в DosDevicesGlobal каталоге, чтобы отслеживать экземпляры устройств. Поэтому, если устройство подключается к хосту, создается символическая ссылка DosDevicesGlobalMyDevice0 . Если подключается другое устройство, создается символическая ссылка DosDevicesGlobalMyDevice1 . Я добиваюсь этого следующим кодом:

 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 секунд и подключу третье устройство, оно получит символическую ссылку DosDevicesGlobalMyDevice0 , чего не произойдет, потому что первое устройство уже получило индекс 0 и все еще подключено.

Итак, почему кажется, что символическая ссылка удаляется через некоторое время? Также мне интересно, подходит ли мой подход для подсчета экземпляров устройств?

Комментарии:

1. Что вы подразумеваете под исчезновением? Через некоторое время, ничего не делая, она удаляется, вы это имели в виду? Или она перекрывается? Это происходит только при вставке третьего устройства?

2. Да, я имею в виду, что она удаляется. Я не могу проверить точное время, когда это произойдет. Но это уже произошло, когда был вставлен третий считыватель.