我正在尝试使用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/

10-09 12:36