В моем драйвере Windows UMDF я создаю символическую ссылку на мое устройство в \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
и все еще подключен.
Так почему же кажется, что символическая ссылка удаляется через некоторое время? Также мне интересно, подходит ли мой подход для подсчета экземпляров устройства?
Задача ещё не решена.
Других решений пока нет …