2

DuplicateHandle関数を使用してprocess1からprocess2にハンドルを渡そうとしています。CreateFile関数を使用してハンドルを取得します。

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

2番目のプロセスでは、最初に共有メモリを介して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ポートを開き、次に2番目のプロセスでそこから読み取れるようにします。誰かがキャッチがどこにあるか教えてもらえますか?

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 に答える