`
- 浏览:
1525268 次
- 性别:
- 来自:
杭州
-
系统使用对象和句柄来控制对于系统资源(文件、线程等)的访问主要出于两个目的:
1、只要保持对象原有接口不变,这样Microsoft可以很好的更新系统功能。当系统发布时,原先使用对象的应用程序只要进行很少修改或者不用修改就可以照样运行。
2、使用对象将有利于使用Windows NT 。每个对象都有自己的反问控制列表(ACL)。访问控制列表指定了进程可以对相应对象所进行的操作。每次应用程序创建对象的句柄时,系统会检查对象的ACL。
对象管理器:
一
个对象包含一个标准头和特定于对象类型的属性。因为所有的对象有着相同的结构,所以Windows内部使用一个“对象管理器”来管理所有的对象。对象头包
含对象名(其它进程可以用对象名来引用该对象)、安全表述表(对象管理器用来控制进程对于系统资源的访问)。对象管理器实现如下几个功能:
1、创建对象
2、对于进程使用对象的权限进行验证
3、创建对象并且返回给调用函数
4、对于资源配额进行维护
5、创建复制句柄(duplicate handle)
6、关闭对象的句柄
对象接口:
Windows对于如下任务提供了相应的操作函数:
1、创建一个对象
2、获取一个对象句柄
3、获取对象的信息
4、设置对象的信息
5、关闭对象句柄
6、清除对象
对象和句柄将消耗内存。应此,为了保持系统的性能,只要对象不再需要时,你必须关闭句柄并且删除对象。如果你不这样做,系统将由于过多使用分页,将大大影响其性能。
注意:当进程结束时,系统将自动关闭句柄并且删除由该进程所创建的对象。然而,当线程结束时,通常系统不会关闭句柄或者删除对象。除了以下对象例外:window、hook、window position和DDE 会话对象。这些对象当创建线程结束时才被清除。
句柄数的局限:
有些类型的句柄在同一时间只允许存在一个句柄。当应用程序创建对象时,系统提供句柄;当应用程序删除对象时,系统将使句柄失效(invalidate)。另外一些对象类型允许一个对象可以有多个句柄。在对象的最后一个句柄被关闭后,OS会自动从内存中移除对象。
在系统中允许的打开句柄的总数只受到可用内存大小的限制。然,有些对象类型在一个会话或者一个进程中对句柄数进行限制。
句柄的继承:
子进程能够从父进程继承句柄。被继承的句柄只有在子进程的上下文环境中有效。为了让子进程能够从它的父进程那里继承已打开的句柄,必须如下操作:
1、在创建句柄时,将SECURITY_ATTRIBUTES结构的成员bInheritHandle设置成TRUE
2、用CreateProcess函数创建子进程时,将bInheritHandle设置成TRUE
DuplicateHandle函数可以复制句柄,复制的句柄可以在当前进程或者在另一个进程中使用。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
在Windows中,每个对象(如文件、窗口、线程、进程等)都有一个唯一的标识符,称为对象句柄。进程句柄就是进程对这些对象的引用,通过句柄,进程可以访问和操作对象。句柄不仅包含了对象的唯一ID,还包含了访问权限...
总的来说,获取和使用Windows指定窗口的窗口句柄是Windows编程中的基本操作,它使得程序能够对目标窗口进行各种定制化的控制,从而实现丰富的功能。理解并熟练运用这些API函数,对于编写高效、灵活的桌面应用程序至...
在Windows操作系统中,句柄是系统用来唯一标识对象(如窗口、进程、线程等)的一种关键数据结构。对于开发者而言,理解并有效地使用句柄至关重要,尤其是在进行软件开发和调试过程中。而Spyxx,作为一个强大的...
1. **句柄**:句柄是Windows编程的基础,它是一个唯一的整数标识符,用于标识应用程序中的不同对象或对象的不同实例。常见的句柄包括: - `HWND`: 窗口句柄 - `HINSTANCE`: 当前实例句柄 - `HCOURSOR`: 光标句柄 ...
内核对象是 Windows 编程中非常重要的一部分,包括句柄表、引用计数、复制内核对象、跨进程共享等。 线程 API 线程 API 是 Windows 编程中非常重要的一部分,包括线程的上下文、线程的状态、线程的优先级、线程的...
设备坐标系是Windows中定位和绘制图形的基础,它采用笛卡尔坐标系统,单位通常是像素。x轴自左向右递增,y轴自顶向下递增。在Windows环境下,显示器是一个共享设备,因此有多种设备对象句柄,分别对应屏幕的不同区域...
在C++编程中,句柄和指针是两种不同的数据访问机制,它们都在不同场景下用于访问和操作内存中的对象。尽管两者都能通过一个较小的数据值来引用或控制大量数据,但它们的本质和用途有所不同。 首先,句柄是一个抽象...
总结起来,Windows编程基础涉及消息传递、事件驱动和Windows API的使用,而MFC编程基础则通过面向对象的方式简化了这一过程,提供了一套更易用的开发框架。对于初学者,理解这两个领域的基础知识是迈进Windows桌面...
动态捕获Windows窗口句柄工具。 Inspect 支持无焦点窗口捕获,可动态实时监听当前系统打开的窗口,并获取窗口的详细信息。 可以很方便的对软件进行模拟操作。。。 DDDD 动态捕获Windows窗口句柄工具。 Inspect 支持...
总的来说,Windows编程基础和MFC编程基础是构建Windows桌面应用程序的基础,涵盖了从消息传递和事件驱动的程序设计模型,到使用MFC进行面向对象编程的各种概念和技术。深入理解这些内容,开发者就能构建出功能丰富、...
在Windows编程中,句柄(Handle)是一个至关重要的概念,它是操作系统用来唯一标识系统资源如窗口、内存块、文件、GDI对象等的一种抽象标识符。句柄并不是资源的实际地址,而是一个由操作系统分配的整数值,用于在...
在计算机编程领域,尤其是涉及到操作系统级别的操作时,"内核对象句柄"是一个重要的概念。易语言,一种中文编程环境,提供了对系统底层资源管理的支持,包括枚举内核对象句柄的功能。本文将深入探讨这个主题,帮助你...
在多线程编程领域,Linux 和 Windows 操作系统提供了不同的实现方式和接口。本文将探讨 Linux 和 Windows 下的多线程编程的异同,并重点讨论它们的线程创建、线程同步以及通信机制。 首先,多线程编程的初衷是为了...
在Windows操作系统中,"获取句柄"是编程过程中的一个重要概念,主要涉及到系统级的交互和资源管理。句柄(Handle)是Windows API提供的一种机制,用于标识和访问操作系统内部的各种对象,如窗口、文件、设备等。这些...
句柄在Windows编程中扮演着极其重要的角色,它是用来标识系统中各种对象的一个唯一整数标识。根据《Microsoft Windows 3 Developer's Workshop》一书中的定义,句柄可以用于标识包括但不限于模块、任务、实例、文件...
在Windows操作系统中,"对象...总的来说,理解并使用对象句柄是Windows API编程中的基础技能,能够帮助开发者实现对系统的深度交互和控制。通过句柄,开发者可以实现诸如自动化测试、系统监控、桌面工具等多种功能。
句柄和 API 是 WINDOWS 编程中两个非常重要的概念,它们都是WINDOWS 编程中不可或缺的一部分。句柄用于标识项目,而 API 则提供了一组标准的接口,供开发者调用,以便与WINDOWS 操作系统进行交互。
总之,Windows编程基础涵盖了从理论到实践的多个方面,包括理解操作系统的特性和机制、掌握面向对象和事件驱动编程的技巧、熟悉窗口和句柄的使用、以及学会构建和管理进程。对于希望在Windows平台上开发软件的程序员...
删除对象时,会释放表格中的相应条目和对象数据。 在MFC和GDI(Graphics Device Interface)编程中,句柄通常用于表示GDI对象,如画刷(HBRUSH)、画笔(HPEN)、字体(HFONT)和设备上下文(HDC)。GDI对象的句柄...
查看句柄,获取HANDLE,用于windows编程获取某窗口句柄