Ошибка символьного имени 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, который предоставляет альтернативный способ общения с устройством, например, эмулятор последовательного порта.