C++ 为什么WriteFile需要延迟才能工作,或者在某些Windows计算机上出现错误\u无效\u参数?
我使用C++ 为什么WriteFile需要延迟才能工作,或者在某些Windows计算机上出现错误\u无效\u参数?,c++,windows,winapi,hid,C++,Windows,Winapi,Hid,我使用CreateFile设置设备,并使用WriteFile向HID设备发送报告。在我的Dell Precision 3520 PC上我不需要通过睡眠通话向设备发送初始设置信息。但是,在其他Windows机器上调试后(列表中的Alienware),我发现如果不调用Sleep,尝试发送初始设置消息时会失败 这实际上是一个非常特殊的情况: HID设备正在建立可扩展连接 设备最初关闭,然后打开,Windows事件系统通过对WM_DEVICECHANGE的进程回调来查找设备到达,在那里CreateFi
CreateFile
设置设备,并使用WriteFile
向HID设备发送报告。在我的Dell Precision 3520 PC上我不需要通过睡眠通话向设备发送初始设置信息。但是,在其他Windows机器上调试后(列表中的Alienware),我发现如果不调用Sleep
,尝试发送初始设置消息时会失败
这实际上是一个非常特殊的情况:
- HID设备正在建立可扩展连接
- 设备最初关闭,然后打开,Windows事件系统通过对
的进程回调来查找设备到达,在那里WM_DEVICECHANGE
和CreateFile
发送安装报告WriteFile
- 这仅在某些Windows计算机上发生
Sleep(500); // this allows me to send a message
BOOL Result = WriteFile(IOHandle, OutputReport, OutputReportSize, &bytesWritten, NULL);
if (Result)
{
return 0;
}
else
{
d = GetLastError(); // This is 87 without Sleep
CloseComm();
return 1;
}
我的问题是:
1。为什么我得到错误\无效\参数(87),除非调用睡眠
2。为什么在某些Windows计算机上需要这样做调用
RtlGetLastNtStatus()
就地GetLastError()
-返回什么?@RbMm该函数的头是什么?没有头文件,但它与GetLastError
具有相同的签名。因此extern“C”uu declscpec(dllimport)NTSTATUS WINAPI RtlGetLastNtStatus()代码>并将ntdll.lib包含到链接器input@RbMm它返回87否,我询问的是RtlGetLastNtStatus()
result,而不是GetLastError()
result。RtlGetLastNtStatus()
从不返回0x57