重复句柄错误:error_invalid_handle

DuplicateHandle error: error_invalid_handle

本文关键字:invalid handle error 句柄 错误      更新时间:2023-10-16

>我正在尝试使用 DuplicateHandle 函数将句柄从进程 1 传递到进程 2。我使用创建文件函数获取句柄:

HANDLE COMportHandle;
COMportHandle = CreateFile(TEXT("COM5"),
                           GENERIC_ALL | PROCESS_DUP_HANDLE,
                           0,
                           0,
                           OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,
                           0);

在第二个进程中,我首先通过共享内存从进程 1 获取进程 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: %dn",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: %dn",GetLastError());

引入一个新的,未初始化的COMportHandle。所以,假设这是实际的代码,我一点也不惊讶COMportHandle是无效的"。您将以某种方式需要从第一个进程中获取COMportHandle的实际值。