我正在尝试使用DuplicateHandle函数从process1传递到process2的句柄。我使用CreateFile函数获取句柄:
HANDLE COMportHandle;
COMportHandle = CreateFile(TEXT("COM5"),
GENERIC_ALL | PROCESS_DUP_HANDLE,
0,
0,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,
0);
在第二个进程中,我首先通过共享内存从process1获取进程ID,然后尝试复制该句柄:
HANDLE pr1handle, CPH, COMportHandle;
pr1handle = OpenProcess(PROCESS_DUP_HANDLE,FALSE,process_id);
if(!DuplicateHandle(pr1handle,COMportHandle,GetCurrentProcess(),&CPH,PROCESS_DUP_HANDLE,FALSE,0))
printf("Error: %d\n",GetLastError());
然后我得到了ERROR_INVALID_HANDLE。
这些进程无关,我首先运行来打开COM端口,然后希望能够在第二个进程中从中读取信息。
有人可以告诉我渔获量在哪里吗?
最佳答案
在此代码中:
HANDLE pr1handle, CPH, COMportHandle;
pr1handle = OpenProcess(PROCESS_DUP_HANDLE,FALSE,process_id);
if(!DuplicateHandle(pr1handle,COMportHandle,GetCurrentProcess(),&CPH,PROCESS_DUP_HANDLE,FALSE,0))
printf("Error: %d\n",GetLastError());
您引入了一个新的未初始化的COMportHandle。因此,假设这是实际的代码,我一点也不惊讶COMportHandle无效。”您将需要以某种方式从第一个过程中获取COMportHandle的实际值。
关于c++ - DuplicateHandle错误: error_invalid_handle,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14500232/