开发USB HID的源码,调用SetupDiGetDeviceInterfaceDetail出错?
调用第一次SetupDiGetDeviceInterfaceDetail出错,返回122.这没有问题.可是为何第二次调用怎么还是出现1784-提供给请求操作的用户缓冲区无效呢.
我网上查阅的大量例子,发现我的程序是没有问题的啊,请高手帮忙看一下呢
Result=SetupDiEnumDeviceInterfaces
(hDevInfo,
0,
&HidGuid,
MemberIndex,
&devInfoData);
if (Result != 0)
{
Result = SetupDiGetDeviceInterfaceDetail
(hDevInfo,
&devInfoData,
NULL,
0,
&RequiredSize,//&Length,
NULL);
if (!Result) {
//得到错误代码
DWORD dwError = GetLastError();
*/
}
detailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(RequiredSize);//Length);
detailData -> cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
Result = SetupDiGetDeviceInterfaceDetail
(hDevInfo,
&devInfoData,
detailData,
RequiredSize,//Length,
&Required,
NULL);
if (!Result) {
DWORD dwError = GetLastError();
}
//创建设备对象
DeviceHandle=CreateFile
(detailData->DevicePath,
0,
FILE_SHARE_READ|FILE_SHARE_WRITE,
(LPSECURITY_ATTRIBUTES)NULL,
OPEN_EXISTING,
0,
NULL);
Attributes.Size = sizeof(Attributes);
//获取指定对象的属性
Result = HidD_GetAttributes
(DeviceHandle,
&Attributes);
MyDeviceDetected = FALSE;
//根据VIP,PID判断是否为所需设备
if (Attributes.VendorID == VendorID)
{
if (Attributes.ProductID == ProductID)
{
MyDeviceDetected = TRUE;
MyDevicePathName = detailData->DevicePath;
=
}
else
CloseHandle(DeviceHandle);
}
else
CloseHandle(DeviceHandle);
free(detailData);
}
else
LastDevice=TRUE;
MemberIndex = MemberIndex + 1;
}
while ((LastDevice == FALSE) && (MyDeviceDetected == FALSE));
SetupDiDestroyDeviceInfoList(hDevInfo);
return MyDeviceDetected;
}
[解决办法]
SetupDiGetDeviceInterfaceDetail出错是参数设置不对吧?
[解决办法]
设置一下对齐方式:
project options -> advanced compiler -> data alignment 选择 byte