2

我正在尝试使用 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 端口,然后希望能够使用第二个进程从中读取。有人能告诉我钓点在哪里吗?

4

1 回答 1

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

于 2013-01-24T11:32:53.757 回答