C++ HidD_GetManufacturerString和类似函数返回成功,但不修改缓冲区
我在3个函数中遇到问题(C++ HidD_GetManufacturerString和类似函数返回成功,但不修改缓冲区,c++,winapi,usb,hid,C++,Winapi,Usb,Hid,我在3个函数中遇到问题(HidD\u GetManufacturerString,HidD\u GetProductString,HidD\u GetSerialNumberString)。问题是它们返回TRUE(表示成功),但不修改缓冲区(甚至不添加终止符) 功能的MSDN页面: HidD\u GetManufacturerString: HidD\u GetProductString: HidD\u GetSerialNumberString: 以下是实际调用这些方法的代码: wchar_t
HidD\u GetManufacturerString
,HidD\u GetProductString
,HidD\u GetSerialNumberString
)。问题是它们返回TRUE
(表示成功),但不修改缓冲区(甚至不添加终止符)
功能的MSDN页面:
HidD\u GetManufacturerString
:
HidD\u GetProductString
:
HidD\u GetSerialNumberString
:
以下是实际调用这些方法的代码:
wchar_t manufacturer[MAX_SERIAL_LEN];
wchar_t product[MAX_SERIAL_LEN];
wchar_t serial[MAX_SERIAL_LEN];
ZeroMemory(manufacturer, MAX_SERIAL_LEN);
ZeroMemory(product, MAX_SERIAL_LEN);
ZeroMemory(serial, MAX_SERIAL_LEN);
HidD_GetManufacturerString(hFile, manufacturer, MAX_SERIAL_LEN);
HidD_GetProductString(hFile, product, MAX_SERIAL_LEN);
HidD_GetSerialNumberString(hFile, serial, MAX_SERIAL_LEN);
printf("Information for device %s\nManufacturer: %S\nProduct: %S\nSerial: %S\n\n",
DevIntfDetailData->DevicePath,
manufacturer, product, serial
);
hFile
是这样打开的:
HANDLE hFile = CreateFile(DevIntfDetailData->DevicePath, 0, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
DeviceDetailData
使用SetupDiGetDeviceInterfaceDetail
MAX\u SERIAL\u LEN
定义为
sizeof(wchar_t)*127
可能是一个驱动程序错误
我有一个类似的问题:函数返回TRUE
,但缓冲区要么根本没有被触及,要么被随机垃圾填满
这里有一个陷阱:这种情况只发生在我的耳机上,而且只有当我通过Skype/Teams/等积极使用它的麦克风时才会发生。一旦我离开电话,这些功能就会再次返回普通名称
这让我相信你看到的是一个有毛病的司机。我的是Windows 10 1907上的Windows标准耳机驱动程序。可能是驱动程序错误
我有一个类似的问题:函数返回TRUE
,但缓冲区要么根本没有被触及,要么被随机垃圾填满
这里有一个陷阱:这种情况只发生在我的耳机上,而且只有当我通过Skype/Teams/等积极使用它的麦克风时才会发生。一旦我离开电话,这些功能就会再次返回普通名称
这让我相信你看到的是一个有毛病的司机。我的是Windows 10 1907上的Windows标准耳机驱动程序。Erm,当你使用ZeroMemory时,你怎么知道它不仅仅是一个空字符串?删除这些调用,然后再试一次。就像我在第一段中说的,它甚至没有添加一个终止符,它会在零字符串上添加终止符。缓冲区真的没有被触及可能你没抓住重点。当缓冲区已经包含零时,您如何检测它写入零字符?因为我专门将内存归零,因为它没有添加TerminatorRem,所以当您使用ZeroMemory时,您如何知道它不仅仅是一个空字符串?删除这些调用,然后再试一次。就像我在第一段中说的,它甚至没有添加一个终止符,它会在零字符串上添加终止符。缓冲区真的没有被触及可能你没抓住重点。当缓冲区已经包含零时,如何检测它写入零字符?因为我专门将内存归零,因为它没有添加终止符