进程与句柄

发布时间 2023-09-22 20:27:54作者: lanwah


进程是操作系统进行资源分配和调度的基本单位。

句柄是对操作系统资源的引用,用于访问和操作这些资源(如文件、窗口、线程等)。

关联关系

在Windows中,句柄和进程之间的关联是通过内核对象表(Kernel Object Table)来实现的。

内核对象表是操作系统维护的一个数据结构,用于记录所有可被进程访问和操作的内核对象,如文件、线程、窗口等。

对象的创建过程?

当进程打开或创建一个资源时,操作系统会为该资源分配一个内核对象,并将其信息记录在内核对象表中。同时,系统会为进程分配一个句柄表(Handle Table)来管理进程拥有的句柄。

然后,系统在句柄表中为该资源生成一个唯一的句柄,并将句柄与内核对象的相关信息关联起来。这样,进程就可以使用该句柄来引用和操作对应的资源。

每个进程都有自己的句柄表,记录了它所拥有的句柄和对应的内核对象信息。通过句柄表,操作系统可以在进程中快速查找和访问资源。

需要注意的是,句柄只是一个特定进程中对资源的引用,不同进程可以拥有相同的句柄,即多个进程可以共享同一个资源的句柄。而内核对象和内核对象表是在操作系统内核级别管理的,句柄只是用户级别的标识。

通过这种方式,句柄和进程之间建立了联系,使得进程能够方便地管理和操作资源,同时也加强了对资源的访问控制和保护。

内核对象表

内核对象表是操作系统内核中的一个数据结构,用于记录所有可被进程访问和操作的内核对象,如文件、线程、进程、窗口等。

主要功能

  • 维护内核对象的状态和属性信息。
  • 跟踪哪些进程拥有对特定内核对象的访问权限。
  • 确保并发访问的正确执行,例如提供同步和互斥机制。

通过内核对象表,操作系统可以有效地管理和跟踪内核对象,确保它们在系统中的合理分配和使用。

进程句柄表

进程句柄表是每个进程在操作系统内核中分配的一个数据结构,用于管理和跟踪进程所拥有的句柄。

主要功能

  • 记录进程所拥有的句柄和对应的内核对象信息。
  • 提供快速的句柄查找和引用,以便进程可以访问和操作对应的资源。
  • 管理句柄的生命周期,包括句柄的分配、释放和回收。

每个进程的句柄表是独立的,不同的进程拥有各自的句柄表。这样可以实现进程间的资源隔离和安全性,每个进程只能访问和操作自己句柄表中的句柄和对应的资源。

资源的创建过程

当进程打开或创建一个资源时,操作系统会在进程的句柄表中为该资源生成一个唯一的句柄,并将句柄与对应的内核对象关联起来。进程可以使用句柄来引用和操作资源,而无需了解和直接访问内核对象。

进程句柄表的设计使得进程能够方便地管理和操作资源,并提供了对资源的访问控制和保护。

总结

通过内核对象表和进程句柄表的配合,操作系统能够有效地管理和跟踪内核对象和进程句柄,实现资源的合理分配和使用,同时确保进程对资源的访问安全性和隔离性。这对于操作系统的正常运行和应用程序的稳定性具有重要意义。

扩展

Handle小工具

Handle 是一个实用工具,用于显示有关系统中任何进程的打开句柄的信息。 可以使用它查看打开了文件的程序,或查看程序的所有句柄的对象类型和名称。

Handle v5.0

Handle 的目标是搜索打开的文件引用,因此,如果不指定任何命令行参数,它将列出系统中引用打开文件的所有句柄的值以及文件名。 它还需要多个参数来修改此行为。

用法:handle [[-a [-l]] [-v|-vt] [-u] | [-c <handle> [-y]] | [-s]] [-p <process>|<pid>] [name]

参数 说明
-a 转储有关所有类型的句柄的信息,而不仅仅是引用文件的句柄。 其他类型包括端口、注册表项、同步基元、线程和进程。
-l 仅显示页面文件支持的节句柄。
-c 关闭指定的句柄(解释为十六进制数)。 必须通过其 PID 指定进程。 警告:关闭句柄可能会导致应用程序或系统不稳定。
-g 打印授予的访问权限。
-y 不要提示关闭句柄确认。
-s 打印每种类型的打开句柄的计数。
-u 搜索句柄时显示拥有用户名。
-v 使用逗号分隔符的 CSV 输出。
-vt 使用制表符分隔符的 CSV 输出。
-p 此参数不会检查系统中的所有句柄,而是将 Handle 的扫描范围缩小到以名称进程开头的进程。 因此: handle -p exp 将为以“exp”开头的所有进程转储打开的文件,其中包括 Explorer。
name 存在此参数,以便你可以指示 Handle 搜索对具有特定名称的对象的引用。 例如,如果想要知道哪个进程(如果有)打开了“c:\windows\system32”,则可以键入: handle windows\system 名称匹配不区分大小写,指定的片段可以是路径中你感兴趣的任意位置。

相关参考

  1. Windows进程管理小工具Handle:用于解决未知程序占用文件问题(Windows10系统)