这篇文章是对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对象总结的更多相关文章

  1. 报表软件JS开发引用HTML DOM的windows对象

    HTML DOM是W3C标准(是HTML文档对象模型的英文缩写,Document Object Model for HTML). HTML DOM定义了用于HTML的一些列标准的对象,以及访问和处理H ...

  2. js windows对象

    一.DOM操作 windows对象操作 document对象操作     二.属性.事件 1.window的属性: window.shuxing(属性) window.fangfa()(方法) 方法后 ...

  3. JavaScript基础--DOM对象(十三):(windows对象:history\location\navigator\screen\event)

    DOM编程1.为什么要学习DOM(1) 通过dom编程,我们可以写出各种网页游戏(2)dom编程也是ajax的重要基础2.DOM编程介绍DOM = Document Object Model(文档对象 ...

  4. HTML DOM部分---事件 windows对象;

    <!--DOM操作windows对象操作 对浏览器进行操作document对象操作 对浏览器内页面文件进行操作 window.shuxing;属性调用格式window.fangfa();方法调用 ...

  5. windows对象的属性和方法

    window对象是所有客户端javascript特性和API的主要接入点.它表示web浏览器的一个窗口或窗体,并且可以用标志符window来引用它. 一. windows对象的属性 1. locati ...

  6. javascript windows对象

    1.windows对象方法 2.计时器方法 3.计时器setInterval() <!DOCTYPE HTML> <html> <head> <meta ht ...

  7. JavaScript面向对象之Windows对象

    JavaScript之Window对象 首先我们先了解一个概念:事件. 事件,就是把一段代码设置好,满足条件时触发.或者说,事件是可以被 JavaScript 侦测到的行为. 网页中每个元素都可以触发 ...

  8. JavaScript学习 - 基础(五) - string/array/function/windows对象

    String对象 更详细转:http://www.w3school.com.cn/jsref/jsref_obj_string.asp //------------------------------ ...

  9. Windows对象、句柄与MFC对象

    windowsmfc编程c 目录(?)[-] Windows对象句柄与MFC对象 windows对象 句柄 mfc对象 杂谈 Windows对象.句柄与MFC对象 (2009-04-28 22:11: ...

随机推荐

  1. Java多线程中变量的可见性

    之所以写这篇博客, 是因为在csdn上看到一个帖子问的就是这个问题. 废话不多说, 我们先看看他的代码(为了减少代码量, 我将创建线程并启动的部分修改为使用方法引用). 1 2 3 4 5 6 7 8 ...

  2. linux mysql默认安装在哪个目录

    MySQL安装完成后不象SQL Server默认安装在一个目录,它的数据库文件.配置文件和命令文件分别在不同的目录,了解这些目录非常重要,尤其对于Linux的初学者,因为 Linux本身的目录结构就比 ...

  3. oracle修改服务器端编码

    因为装的是oracle 11g免费版,没有装oracle客户端,然后从网上找了免客户端使用pl/sql的教程,具体可以看链接,这里不再累述:但打开pl/sql的时候提示客户端和服务端编码不一致:网上一 ...

  4. -bash: mysql: command not found 解决办法 (转)

    root@DB-02 ~]# mysql -u root-bash: mysql: command not found 原因:这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下 ...

  5. 网页CSS

    CSS 样式表,(分三类:内联.内嵌.外部) 1,内联, 直接作于于 元素 例:   <p style="font-size:14px;"> 2,内嵌 作用于网页 首先 ...

  6. asp.net 5.0微信支付

    (原文出自:http://lib.csdn.net/article/wechat/46329) 微信支付官方坑太多,我们来精简 我把官方的代码,打包成了 an.wxapi.dll. 里面主要替换了下注 ...

  7. less样式表

    LESS是一种由Alexis Sellier设计的动态层叠样式表语言.受Sass所影响,同时也影响了Sass的新语法:SCSS.[2]  LESS是开源的,其第一个版本由Ruby写成,但在后续的版本当 ...

  8. php设计模式——单例模式

    单例模式概念 单例模式是指整个应用中类只有一个对象实例的设计模式. 单例模式的特点 一个类在整个应用中只有一个实例 类必须自行创建这个实例 必须自行向整个系统提供这个实例 php中使用单例模式的原因 ...

  9. zip命令的使用

    zip命令可以用来将文件压缩成为常用的zip格式.unzip命令则用来解压缩zip文件. 1. 我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip: # zip -r yasuo ...

  10. java优势

    跨平台,只要有JVM(Java虚拟机)的操作系统就可以运行JAVA程序: 安全: 弃用危险的指针: 自动内在管理机制,垃圾回收机制,由垃圾回收器回收,减轻程序负担,也避免了手动回收的危险性: 完全面向 ...