windows对象总结
这篇文章是对windows对象的总结,在winows编程中,windows对象,句柄是一个基本概念,理解这些概念有助于后面的windows编程学习。文章的形式还是以解答问题的方式来组织。
注:在文中,对象对应的英语翻译是object,句柄对应的英语翻译是handle.
1. 在windows中,什么是对象?
欲解释内核对象,需要先解释windows下对象(object)和句柄的概念。在windows中,对象其实指的是一个通用的结构,这个数据结构代表的一个系统资源,例如一个文件资源,线程资源等等。当我们操作的时候,只能通过句柄来操作这个对象代表的资源,无论你是文件还是线程。这个时候会有一个问题:
windows为什么要将对象统一起来,只能通过句柄来操作对象代表的资源?
大约有以下几点原因:
*统一使用句柄,可以理解为封装,这意味着用户不需要关心对象的具体细节。这样就可以在系统升级的时候对用户的程序没有影响。
*更好地利用windows安全策略,每个对象都有独立的访问控制列表(ACL),这样就可以限定访问对象的行为。例如我们想要读取某个文件,但是当前用户没有权限,那么就会返回一个空的句柄。
2.windows对象都有哪些呢?
在windows编程中,我们每时每刻都在和windows对象打交道,例如进程,线程,文件等等。其实微软对windows对象做了分类:用户对象,内核对象,GDI(这是图像驱动接口,在这里不讨论这个)。
用户对象
主要用来窗口相关的管理,例如Cursor,Hook,Window,这些都是用户对象
内核对象
用来进行更底层的系统资源管理,例如内存,进程通信等等。
更详细的信息请点击链接(msdn).
在这里,需要简单说下用户对象和内核对象一个重要的区别:
每个用户对象只能有一个句柄;而每个内核对象却可以有多个句柄,例如:Mutex是内核对象,用于多进程的同步,在某处创建,返回句柄,也可以在其它的进程打开(这其实也依赖此内核对象的安全属性设置)。
3 .内核对象共享的方式有哪些,系统是如何知道什么时候该销毁此对象呢?
在此需要说明下,内核对象共享指的是跨进程共享内核对象。
先说第二个问题,当我们不需要使用内核对象的时候,直接调用CloseHandle即可,在系统内部维护着此内核对象的信息,当使用此内核对象的进程为0时,系统会销毁此对象。
接下来就是内核对象的共享方式了,首先要了解,为什么要共享内核对象?原因很简单:在很多场景下都需要使用共享内核对象的方式,例如使用文件映射对象可以在不同进程之间共享数据。
在windows中,有三种方法可以用来共享内核对象:
a. 继承
在创建内核对象时,需要使用默认的安全性来创建,同时要将SECURITY_ATTRIBUTES中的bInhertHandle置为true。这样在创建子进程的时候,将创建的参数--bInheritHandles设置为true,这样就可以子进程就可以访问父进程相应的内核对象了。
b. 为对象命名
首先a进程创建一个内核对象,并对其命名为A,如果b进程想访问A,那么可以创建一个相同的内核对象,将其命名为A,如果b对象有足够的权限,那么新创建的内核对象将指向A,b进程就可以访问A了。
c. 使用DuplicateHandle方法
A进程调用此方法,将B进程中的内核对象共享到C进程中。
以上就是对Windows对象的总结。
windows对象总结的更多相关文章
- 报表软件JS开发引用HTML DOM的windows对象
HTML DOM是W3C标准(是HTML文档对象模型的英文缩写,Document Object Model for HTML). HTML DOM定义了用于HTML的一些列标准的对象,以及访问和处理H ...
- js windows对象
一.DOM操作 windows对象操作 document对象操作 二.属性.事件 1.window的属性: window.shuxing(属性) window.fangfa()(方法) 方法后 ...
- JavaScript基础--DOM对象(十三):(windows对象:history\location\navigator\screen\event)
DOM编程1.为什么要学习DOM(1) 通过dom编程,我们可以写出各种网页游戏(2)dom编程也是ajax的重要基础2.DOM编程介绍DOM = Document Object Model(文档对象 ...
- HTML DOM部分---事件 windows对象;
<!--DOM操作windows对象操作 对浏览器进行操作document对象操作 对浏览器内页面文件进行操作 window.shuxing;属性调用格式window.fangfa();方法调用 ...
- windows对象的属性和方法
window对象是所有客户端javascript特性和API的主要接入点.它表示web浏览器的一个窗口或窗体,并且可以用标志符window来引用它. 一. windows对象的属性 1. locati ...
- javascript windows对象
1.windows对象方法 2.计时器方法 3.计时器setInterval() <!DOCTYPE HTML> <html> <head> <meta ht ...
- JavaScript面向对象之Windows对象
JavaScript之Window对象 首先我们先了解一个概念:事件. 事件,就是把一段代码设置好,满足条件时触发.或者说,事件是可以被 JavaScript 侦测到的行为. 网页中每个元素都可以触发 ...
- JavaScript学习 - 基础(五) - string/array/function/windows对象
String对象 更详细转:http://www.w3school.com.cn/jsref/jsref_obj_string.asp //------------------------------ ...
- Windows对象、句柄与MFC对象
windowsmfc编程c 目录(?)[-] Windows对象句柄与MFC对象 windows对象 句柄 mfc对象 杂谈 Windows对象.句柄与MFC对象 (2009-04-28 22:11: ...
随机推荐
- synchronized 与 Lock 的那点事
最近在做一个监控系统,该系统主要包括对数据实时分析和存储两个部分,由于并发量比较高,所以不可避免的使用到了一些并发的知识.为了实现这些要求,后台使用一个队列作为缓存,对于请求只管往缓存里写数据.同时启 ...
- 冷门却使用的 javascript 技巧
前端已经被玩儿坏了!像用近似乱码的 javascript 拼一个图形,并且能够正常执行等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬 ...
- TO DO NOW——送给奋斗着的程序“猿”们
大家在我们的日常生活中是不是经常会遇到学习和工作效率低,不能够按照自己的计划有条不紊地按时.按点儿的完成自己的任务呢?是不是还在为此而头疼不堪呢?好吧, 那是你执行力有问题.那么究竟什么是执行力?怎样 ...
- 图形绘制 Canvas Paint Path 详解
图形绘制简介 Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0.大部分2D使用的api都在android.grap ...
- Resizable(调整大小)组件
一.加载方式 //class 加载方式 <div id="rr" class="easyui-resizable" data-options=" ...
- DOM中的NodeList与HTMLCollection
最近在看<Javascript高级程序设计>的时候,看到了这样一句话:“理解NodeList和HTMLCollection,是从整体上透彻理解DOM的关键所在.”,所以觉得应该写一篇关于N ...
- 关于javascript中setTimeout()和clearTimeout()的疑惑。
由于在w3school中学习javascript时,当学到setTimeout()和clearTimeout()方法时.根据它所提供的例子(下面的代码转自w3cschool)—计数程序,发现当你不停的 ...
- 面试题,自己写写dome总是好的
1.完成如下图所示的布局 <html> <head> <meta http-equiv="Content-Type" content="te ...
- js ||与&&
||:找到结果为true的分项就停止,并返回该分项的值,否则继续执行,如果都没有为true的分项则返回最后分项的值(注意每个分项先转成bool与true进行比较). //例如下面的例子: // &qu ...
- C#编码标准--编码习惯
C#编码标准--编码习惯 0. 书写程序时的大小写规则: a) 类:PascalCase表示法.如 MyClass b) 枚举值:PascalCase表示法.如 Colors.Red c) 枚举类型 ...