Я пишу .NET-приложение, которое может взаимодействовать с HID-устройствами. Я хочу иметь возможность получать и анализировать строку «Производители» из прошивки устройства. Я знаю, что в hid.dll есть метод с именем HidD_GetManufacturerString. MSDN описывает этот метод следующим образом:
BOOLEAN HidD_GetManufacturerString(
IN HANDLE HidDeviceObject,
OUT PVOID Buffer,
IN ULONG BufferLength
);
Обертка, которую я использую для этого метода, выглядит следующим образом ...
[DllImport("hid.dll", SetLastError = true)]
internal static extern Boolean HidD_GetManufacturerString(
SafeFileHandle hFile,
Byte[] SerialNumber,
Int32 SerianNumberLength);
Мне нужно знать две вещи. Во-первых, как мне узнать, какой размер инициализировать буфер SerialNumber? Когда я выполняю такие операции, как GetFeatureReport, я знаю, какой размер создать в буфере, потому что я могу извлечь максимальную длину отчета о функциях из атрибутов устройства, используя HidD_GetAttributes (); К сожалению, этот метод не дает мне никакой информации о длине строки производителя, строке серийного номера, имени продукта и т. Д.
Мой второй вопрос: как правильно проанализировать байтовый массив, возвращаемый в строку? Я пытался использовать
System.Text.Encoding.ASCII.GetString(MfrBuffer)
но я получаю странный результат. Для продукта, изготовленного Dell, моя строка выглядит следующим образом: "D \ 0e \ 0l \ 0l \ 0 \ 0 \ 0 \ 0 \ 0 ...", "\ 0" продолжается до конца буфера, который я передал. Как мне разобрать это в "Dell"?