当前位置: 首页 > news >正文

Windows中的对象

windows里常用句柄操作资源,而对应的对象由操作系统维护,
 
对象分为: 用户对象(GUI对象)、GDI对象和内核对象 用户对象用于windows管理 GDI对象用于绘图 内核对象用于内存、进程和IPC
 
Windows核心编程写道识别内核对象的方法是看有没有SECURITY_DESCRIPTOR参数。内核对象是不属于进程的,是属于Windows内核的。 进程只有一个内核对象句柄表,用来存放所有的内核对象句柄。所以,多个进程可以同时使用一个内核对象-- 只要有handle即可。
 
用户对象的资源包括:快捷键、光标、标记、dde转换、钩子、图标、 菜单、窗口
GDI对象包括:位图、画刷、画笔、设备上下文、图元、字体、调色板、区域等
内核对象包括:访问令牌、设备、控制台、桌面、事件、文件、文件映射、堆、作业、邮槽、模块、互斥体、管道、信号量、socket、线程、计时器等
 
其中GUI和GDI对象一般只能单线程访问,属于线程级的对象,多线程操作或访问这些对象会引起一些问题,当然这些对象也就不需要安全机制来控制了
 
用户对象,每个对象只能有一个句柄,不允许进程间复制和继承句柄,一个session的进程不能引用另一个session进程的句柄。每个session最多用户句柄有上限(200,18000),

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\USERProcessHandleQuota




GDI对象,每个对象只能有一个句柄,GDI对象的句柄对于进程是私有的,只有创建对象的进程可以使用对象句柄,句柄数最多用户句柄有上限(256,16384),
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota

内核对象句柄是进程所有的,也就是说进程要么打开已有对象,要么创建对象以获取内核对象句柄,该句柄可以复制和继承,每个进程句柄上限是2^24,然而句柄是存在分页内存中的,因此实际句柄数与可用内存有关。
内核对象的数据结构只能被内核访问,而 应用程序无法在内存中找到这些数据结构并改变它们的内容。进程共享这些内和对象,Windows通过引用计数的方式来保证内和对象的构建和销毁。与其他两种对象不同的是,当不再使用内和对象时,需调用CloseHandle方法来销毁内核对象。




 
 

相关文章:

  • Windows对象、句柄与MFC对象
  • C++结构体
  • C++ 指针运算符( 和 *)
  • C++中 引用与取地址的区别
  • C/C++语言中函数参数传递的三种方式(x,*x,x)
  • VC 和 VS 区别
  • 什么是Windows API
  • c++类与对象用多文件编写以及vs的操作步骤
  • DUMPBIN工具的使用
  • DLL的创建和使用(含代码)
  • _T() 函数
  • DirectUI
  • 托管与非托管
  • 什么是回调函数?
  • ShowWindow与UpdateWindow
  • 30天自制操作系统-2
  • Apache Spark Streaming 使用实例
  • CSS 专业技巧
  • DOM的那些事
  • JavaScript 一些 DOM 的知识点
  • js中的正则表达式入门
  • Magento 1.x 中文订单打印乱码
  • mysql常用命令汇总
  • PHP CLI应用的调试原理
  • SpiderData 2019年2月16日 DApp数据排行榜
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue学习系列(二)vue-cli
  • 从零开始的无人驾驶 1
  • 聚类分析——Kmeans
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 前端之Sass/Scss实战笔记
  • 全栈开发——Linux
  • 深度学习入门:10门免费线上课程推荐
  • 深入 Nginx 之配置篇
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • ​虚拟化系列介绍(十)
  • #vue3 实现前端下载excel文件模板功能
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (10)ATF MMU转换表
  • (2)STM32单片机上位机
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (一)Dubbo快速入门、介绍、使用
  • (转)关于多人操作数据的处理策略
  • .NET 5种线程安全集合
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .Net 代码性能 - (1)
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .net与java建立WebService再互相调用
  • .Net中的集合
  • .php文件都打不开,打不开php文件怎么办