Ошибка символьного имени LibUsbDotNet

Я не могу прочитать SymbolicName из LibUsb. Это пример кода:

static void Main(string[] args)
{
var devs = UsbDevice.AllDevices;
foreach (UsbRegistry usbRegistry in devs)
{
    String name = usbRegistry.SymbolicName;
}
Console.ReadLine();
UsbDevice.Exit();
}

Имя строки не содержит правильное символическое имя. Понятия не имею почему.

Проблема, кажется, в LibUsbRegistry.cs. Функция:

internal ErrorCode GetCustomDeviceKeyValue(SafeFileHandle usbHandle, string key, out byte[] propData, int maxDataLength)

вызывает LibUsbDriverIO.UsbIOSync с параметром: LibUsbIoCtl.GET_CUSTOM_REG_PROPERTY, а в LibUsbDriverIO.cs функция UsbIOSync вызывает Kernel32.DeviceIoControlAsObject. Эта функция возвращает false.

Какой-то код:

LibUsbRegistry:

bool bSuccess = LibUsbDriverIO.UsbIOSync(usbHandle,
                                                 LibUsbIoCtl.GET_CUSTOM_REG_PROPERTY,
                                                 bytesReq,
                                                 bytesReq.Length,
                                                 gcbytesReq.AddrOfPinnedObject(),
                                                 bytesReq.Length,
                                                 out iReturnBytes);

LibUsbDriverIO:

!Kernel32.DeviceIoControlAsObject(dev, code, inBuffer, inSize, outBuffer, outSize, ref ret, deviceIoOverlapped.GlobalOverlapped)

Проблема только появляется с LibUsbIoCtl.GET_CUSTOM_REG_PROPERTY. Но это все предварительно скомпилированный код из LibUsb... так почему же невозможно прочитать символическое имя?

1 ответ

Вы должны интерпретировать это как "нет SymbolicName". Вы можете соотнести то, что вы получаете с содержанием реестра. Запустите Regedit.exe и перейдите к HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB. Вы увидите VID&PID ключи для устройств вашей машины, как видно. Подраздел интерфейса имеет подраздел "Параметры устройства", который содержит значение "Символическое имя".

У меня есть несколько на моей машине, которые не имеют этого значения. Вы ожидаете этого для драйвера USB, который предоставляет альтернативный способ общения с устройством, например, эмулятор последовательного порта.

Другие вопросы по тегам