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: ...
随机推荐
- JVM内存堆布局图解分析
JAVA能够实现跨平台的一个根本原因,是定义了class文件的格式标准,凡是实现该标准的JVM都能够加载并解释该class文件,据此也可以知道,为啥Java语言的执行速度比C/C++语言执行的速度要慢 ...
- [转]Android Volley完全解析(四),带你从源码的角度理解Volley
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17656437 经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了,但是 ...
- CSS3新特性(阴影、动画、渐变、变形、伪元素等) CSS3与页面布局学习总结——CSS3新特性(阴影、动画、渐变、变形、伪元素等)
目录 一.阴影 1.1.文字阴影 1.2.盒子阴影 二.背景 2.1.背景图像尺寸 2.2.背景图像显示的原点 三.伪元素 3.1.before 3.2.after 3.3.清除浮动 四.圆角与边 ...
- css单位rem---移动端至宝
1.rem是什么? rem(font size of the root element)是指相对于根元素的字体大小的单位.简单的说它就是一个相对单位.看到rem大 家一定会想起em单位em(font ...
- 3.1,pandas【基本功能】
一:改变索引 reindex方法对于Series直接索引,对于DataFrame既可以改变行索引,也可以改变列索引,还可以两个一起改变. 1)对于Series In [2]: seri = pd.Se ...
- XAML 概述
我们将向 Windows 运行时应用开发人员介绍 XAML 语言和 XAML 概念,并介绍在使用 XAML 创建 Windows 运行时应用时,在 XAML 中声明对象和设置属性的不同方式. 什么是 ...
- Linux CentOS PhpMyAdmin安装
安装好PHP,Apache和MySQL程序后,为了管理MySQL数据库,我们需要安装phpMyAdmin程序.下面是关于如何在centos安装phpMyAdmin程序的方法.1.管理员root身份登录 ...
- UI基础视图----UIView总结
UIView是UIKit框架里面最基础的视图类,是UIResponder的子类,是UIApplication和UIViewController的兄弟类,是UIWindow,UILabel,UIImag ...
- (六)backbone - API学习 - Backbone路由
Backbone路由本质 Backbone路由分为两个大块,Router以及History用户在Router中定义相关规则,然后开启history.start进行路由监控,执行默认的回调所以,Rout ...
- 使用自定义类型做qmap,qhash的key
map在STL中的定义 template <class Key, class T, class Compare = less<Key>, class Alloc = alloc> ...