0

ユーザー空間から取得したプロセス ID (DWORD pid) で関数 PsLookupProcessByProcessId() を使用するにはどうすればよいですか?

別のアプリケーション (calc.exe など) のプロセス ID を取得するユーザー空間の C++ アプリケーションをコーディングし、DeviceIoControl を使用して、作成した構造体を介して pid をドライバーに正常に送信できます。

DbgPrint("PID received : %i", pInp->pid);

プロセスの正しい pid を出力します。しかし、行うとき:

 PsLookupProcessByProcessId(pInp->pid, eProcess);

次の警告が表示されます。

C4022: 'PsLookupProcessByProcessId': 実パラメーター 1 のポインターが一致しません

警告はエラーとして扱われ、vs はコンパイルを許可しません。「PsLookupProcessByProcessId」のドキュメントを調べたところ、最初のパラメーターに「ハンドル」が必要であると書かれています。その場合、ユーザー空間アプリケーションから送信された DWORD pid を使用してハンドルを取得するにはどうすればよいでしょうか?

4

1 に答える 1

1
PEPROCESS eProcess = NULL; 
PsLookupProcessByProcessId((HANDLE)pInp->pid, &eProcess);

"プロセスのプロセス ID を指定します。" -> HANDLE は紛らわしく聞こえるかもしれません。この場合、それは真の「HANDLE」オブジェクトではありません。

于 2015-02-27T18:27:54.320 に答える