Process ID和Process句柄之间的区别是什么

smw*_*dia 6 windows process

进程ID是唯一标识进程的编号.进程句柄也是唯一标识进程内核对象的数字.

为什么我们都需要它们,因为它们中的任何一个都可以识别过程.

我认为答案可能在于进程和进程内核对象之间的映射关系.是否可以将多个进程内核对象映射到单个进程?每个进程内核对象都有自己的进程句柄.这样每个进程内核对象都可以表示不同的访问模式或类似的东西.

当我使用MiniDumpWriteDump()函数时,这个问题出现了,它被声明为:

BOOL WINAPI MiniDumpWriteDump(
  __in  HANDLE hProcess,
  __in  DWORD ProcessId,
  __in  HANDLE hFile,
  __in  MINIDUMP_TYPE DumpType,
  __in  PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
  __in  PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
  __in  PMINIDUMP_CALLBACK_INFORMATION CallbackParam
);
Run Code Online (Sandbox Code Playgroud)

所以它的参数包括进程ID和进程句柄.我只是不知道为什么有必要让他们两个.

非常感谢您的见解.

Fah*_*eem 5

现“处理句柄”为

  1. 任意的
  2. 内部流程来获取它。私有的,不能在线程/进程之间共享
  3. 它还具有安全访问权限

进程ID为

  1. 独特
  2. 通用,公共,因此可以在线程/进程之间共享

  • 请注意,您可以将句柄继承并复制到其他进程中,因此2并非完全正确。 (2认同)
  • 可以在线程之间共享Win32`HANDLE`-s。唯一的例外是伪句柄,例如由GetCurrentThread返回的伪句柄。另外,我还要添加需要关闭的“ HANDLE”,因为它们实际上引用了系统资源。 (2认同)