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