• windows内核对象句柄


    内核对象用于管理进程、线程和文件等诸多种类的大量资源,每一个内核对象都只是一个句内存快,它由操作系统内核分配,并只能右操作系统内核访问。这个内存块是一个数据结构,其维护着与对象相关的信息,其中少数成员是所有对象都有的,其他大多数都是不同类型的对象特有的。 由于内核对象只能由操作系统内核访问,因此windows提供了句柄来标识内核对象,对于应用程序来说,这个句柄就相当于这个内核对象。应用程序创建一个内核对象,就会返回对应的句柄,然后可以以这个句柄作为参数,去调用操纵和关闭内核对象的函数。 操作系统内核通过记录内核对象的使用计数,来维护内核对象的生存周期。初始创建的内核对象使用计数被设置为1,当其他进程获得对现有内核对象的访问后,使用计数就会递增,当其他进程主动关闭内核对象或者退出进程时,使用计数递减,当使用计数减为0时,操作系统内核就会销毁该对象。 为了维护内核对象的安全性,windows提供了安全描述符来记录谁拥有对象,哪些组和用户被允许访问或者使用对象,哪些组和用户被拒绝访问此对象。因此,几乎所有创建时提供了SECURITY_ATTRUBUTES(这个结构体包含了安全描述符对象指针)作为指针参数的对象,都是内核对象。 每个进程在初始化时,系统都为它分配了一个句柄表,这个句柄表仅供内核对象使用,我们称其为进程内核对象句柄表。 一个进程内核对象句柄表(简称进程的句柄表),只是一个数组,这个数组的每个元素都是一个结构体的指针,这个结构体包含了一个内核对象的指针、一个访问掩码和一些标志。 当进程创建一个内核对象时,操作系统内核将为这个内核对象分配一块内存,然后扫描这个进程的句柄表,找出一个空项,这个空项的内核对象指针会指向这个内核对象内部数据结构的地址,访问掩码会被设置成拥有的完全访问权限,标志也会被设置。 创建内核对象的函数返回的内核对象句柄,实质上就是进程句柄表中的索引的映射(由一个句柄获取索引的方式为用句柄的值除以4或者右移两位,以忽略句柄表中前面几个windows内核占用的索引(待参考))。因此,跨进程之间对同一个内核对象的共享,不能简单的传递这个句柄值去共享,因为它是和进程的句柄表相关的。
  • 相关阅读:
    67. Add Binary
    66. Plus One
    64. Minimum Path Sum
    63. Unique Paths II
    How to skip all the wizard pages and go directly to the installation process?
    Inno Setup打包之先卸载再安装
    How to change the header background color of a QTableView
    Openstack object list 一次最多有一万个 object
    Openstack 的 Log 在 /var/log/syslog 里 【Ubuntu】
    Git 分支
  • 原文地址:https://www.cnblogs.com/monotone/p/3235769.html
Copyright © 2020-2023  润新知