我正在编写一个可以与 HID 设备通信的 .NET 应用程序。我希望能够从设备固件中检索和解析制造商字符串。我知道在 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)
但我得到了一个奇怪的结果。对于戴尔制造的产品,我的字符串看起来像这样“D\0e\0l\0l\0\0\0\0\0...”,“\0”继续到我传递的缓冲区的末尾。我如何将其解析为“戴尔”?