2,640
社区成员
发帖
与我相关
我的任务
分享
int HIDDeviceRead(HANDLE handle, LPVOID lpBuffer, DWORD dwSize)
{
if (handle == NULL || handle == INVALID_HANDLE_VALUE)
return 0;
if (rOverLap.hEvent == NULL || rOverLap.hEvent == INVALID_HANDLE_VALUE)
return 0;
if (lpBuffer == NULL)
return 0;
BYTE rBuffer[512] = { 0 };
DWORD dwRet;
BOOL bRet = 0;
DWORD err;
char log[128];
rBuffer[0] = 0x00;
//调用成功,返回非0,调用不成功, 返回为0
if (!ReadFile(handle, rBuffer, Capabilities.InputReportByteLength, &dwRet, &rOverLap))
{
if ((err = GetLastError()) != ERROR_IO_PENDING)
{
sprintf(log, "Read data err:%d.\r\n", err);
_cprintf(log);
return bRet;
}
if (::WaitForSingleObject(rOverLap.hEvent, 100) != WAIT_TIMEOUT)
{
//::GetOverlappedResult(handle, &rOverLap, &dwRet, TRUE);
dwRet = rOverLap.InternalHigh;
bRet = min(dwRet, dwSize);
memcpy(lpBuffer, &rBuffer[1], bRet);
}
}
else
{
bRet = min(dwRet, dwSize);
memcpy(lpBuffer, &rBuffer[1], bRet);
}
ResetEvent(wOverLap.hEvent);
return bRet;
}