DuplicateHandle错误:error_invalid_handle

时间:2013-01-24 11:26:32

标签: c++ windows handle

我正在尝试使用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端口,然后希望能够通过第二个进程读取它。 有人能告诉我捕获的位置吗?

1 个答案:

答案 0 :(得分:1)

在此代码中:

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的实际值。