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

时间:2010-11-08 02:25:04

标签: 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
);

因此它的参数包括进程ID和进程句柄。我只是不知道为什么必须同时拥有它们。

非常感谢您的见解。

2 个答案:

答案 0 :(得分:4)

流程处理

  1. 任意
  2. 获得它的过程的内部。私有且无法在线程/进程之间共享
  3. 它也带有安全访问权限
  4. 虽然进程ID是

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

答案 1 :(得分:3)

不同之处在于'id'是系统范围的编号,它唯一地标识了该过程。另一方面,'handle'是一个不透明的值,它将进程和对该进程的访问连接到您的程序。你可以在同一个过程中拥有多个不同的句柄。

我不知道为什么MiniDumpWriteDump同时使用它们。