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: ...
随机推荐
- Wix - 教程
1. 不错的教程 http://www.merlinia.com/mdt/WiXTutorial4.msl 2.
- Gradle version 2.10 is required. Current version is 2.8.
今天在网上下载了EasyPusher-master文件,日期是20160527版本的,但是在我的Android Studio上运行时报错: Error:(1, 1) A problem occurre ...
- java中jvm的工作原理
首先我们安装了jdk和jre,但是jdk是为java软件开发工程师而使用的开发工具,我们运行java项目只要含有jre文件即可.对于jvm是内存分配的一块区域,我们知道,当我们开始使用java命令时, ...
- error in Swift. “Consecutive Declarations On A Line Must Be Separated By ';'”
当输入的时候以上代码的时候出现这个错误,经过尝试发现条件表达式?前面应该有一个空格 不然会和swift中的?和 !混淆
- java总结文章
java总结文章 原创地址: http://www.cnblogs.com/Alandre/ (泥沙砖瓦浆木匠),须要转载的,保留下! Thanks Talk is cheap. Show me th ...
- Socket tips: UDP Echo service - Server code
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/soc ...
- UIView层次管理bringSubviewToFront,sendSubviewToBack
将一个UIView显示在最前面只需要调用其父视图的 bringSubviewToFront()方法. 将一个UIView层推送到背后只需要调用其父视图的 sendSubviewToBack()方法. ...
- 【IOS】IOS高速入门之OC语法
Objective-C 是 C 语言的超集 您还能够訪问标准 C 库例程,比如在stdlib.h和stdio.h中声明的那些例程. Objective-C 还是一种很动态的程序设计语言,并且这样的动态 ...
- [小技巧][ASP.Net MVC Hack] 使用 HTTP 报文中的 Header 字段进行身份验证
在一些 Web 系统中,身份验证是依靠硬件证书进行的:在电脑上插入 USB 证书,浏览器插件读取证书的相关信息,然后在发送 HTTP 登录请求时顺便在 Header 字段附加上身份信息.服务器端处理这 ...
- Java基础知识强化38:StringBuffer类之StringBuffer的添加功能
1. StringBuffer的添加功能: public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身. publ ...