热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WindowsKernelObjects

kernel对象句柄是进程相关的。就是说,一个进程要么创建一个对象,要么打开一个已经存在的对象去获得kernel对象句柄。每个进程的kernel句柄数限

kernel对象句柄是进程相关的。就是说,一个进程要么创建一个对象,要么打开一个已经存在的对象去获得kernel对象句柄。每个进程的kernel句柄数限制为2^24。但是,句柄是存储在paged pool里的,所以真实的可以创建的句柄数是基于可用内存。在32位windows上可以创建的句柄数是要少于2^24的。


任何进程都可以创建一个新的句柄,来指向一个已经存在的kernel对象,即使这个kernel对象是被另外一个进程创建的。创建新句柄只需要这个进程知道kernel对象的名称,并且有访问这个对象的权限。kernel对象句柄可以表明一个动作能否授予给某个进程。应用可以在创建kernel对象时明确它的访问权利,或者在获得一个已经存在的对象句柄时明确访问权利。每种类型的kernel对象都支持它自身的访问权利的集合。例如,每个句柄都有set或者wait权限,文件句柄有读或者写权限,等等。更多信息,看securable object。


接下来将通过示例证明一个application创建一个event object。CreateEvent 函数创建event对象并返回一个对象句柄。



在event object创建完成之后,应用可以使用event句柄对event使用set或者wait权限。句柄会一直保持有效,直到应用关闭句柄或者应用停止。


大多数kernel对象支持一个对象上有多个句柄。例如,在下面的示例中,应用通过OpenEvent函数获得另外一个event对象句柄。



这个方法允许一个应用在不同的句柄上有不同的权限。例如,Handle 1可以有set和wait权限,而Handle 2只有wait权限。


如果另一个进程知道event对象的名字并且有访问这个event对象的权利,它可以通过OpenEvent函数创建它自己的event对象句柄。应用也可以使用Duplicate方法把一个进程的句柄复制到另外一个进程。


只要有至少一个的kernel对象句柄存活,这个kernel对象就可以继续保存在内存中。在下面的示例中,每个应用都使用CloseHandle函数关闭它的event对象句柄。当没有对象句柄存在时,系统会把这个kernel对象从内存中移除掉。




系统管理文件对象的方式与其它kernel对象不同。文件对象包含文件指针——指针指向文件中下一个将被读或者将被写的字节。当应用创建一个新的文件句柄时,系统总会创建一个新的文件对象。因此,至少超过一个的文件对象可以同时指向磁盘中的一个文件,如下面的示例所示。



只有通过复制或者继承,才能使两个或者两个以上的文件句柄指向同一个文件对象,如下面的示例所示。



下表列出了每一个kernel对象,以及每个对象的创建函数和销毁函数。创建函数要么创建一个新的kernel对象和它的对象句柄,要么创建一个已经存在的对象的对象句柄。销毁函数关闭对象句柄。当一个应用关闭了一个kernel对象上的最后一个对象句柄时,系统会把这个kernel对象从内存中移除掉。


Kernel objectCreator functionDestroyer function
Access tokenCreateRestrictedTokenDuplicateTokenDuplicateTokenEx,OpenProcessTokenOpenThreadTokenCloseHandle
Change notificationFindFirstChangeNotificationFindCloseChangeNotification
Communications deviceCreateFileCloseHandle
Console inputCreateFile, with CONIN$CloseHandle
Console screen bufferCreateFile, with CONOUT$CloseHandle
DesktopGetThreadDesktopApplications cannot delete this object.
EventCreateEventCreateEventExOpenEventCloseHandle
Event logOpenEventLogRegisterEventSourceOpenBackupEventLogCloseEventLog
FileCreateFileCloseHandleDeleteFile
File mappingCreateFileMappingOpenFileMappingCloseHandle
Find fileFindFirstFileFindClose
HeapHeapCreateHeapDestroy
I/O completion portCreateIoCompletionPortCloseHandle
JobCreateJobObjectCloseHandle
MailslotCreateMailslotCloseHandle
Memory resource notificationCreateMemoryResourceNotificationCloseHandle
ModuleLoadLibraryGetModuleHandleFreeLibrary
MutexCreateMutexCreateMutexExOpenMutexCloseHandle
PipeCreateNamedPipeCreatePipeCloseHandle,DisconnectNamedPipe
ProcessCreateProcessOpenProcessGetCurrentProcessCloseHandle,TerminateProcess
SemaphoreCreateSemaphoreCreateSemaphoreExOpenSemaphoreCloseHandle
Socketsocketacceptclosesocket
ThreadCreateThreadCreateRemoteThreadGetCurrentThreadCloseHandle,TerminateThread
TimerCreateWaitableTimerCreateWaitableTimerExOpenWaitableTimerCloseHandle
Update resourceBeginUpdateResourceEndUpdateResource
Window stationGetProcessWindowStationApplications cannot delete this object.

翻译自:windows 官网 kernel Objects






推荐阅读
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 该问题可能由守护进程配置不当引起,例如未识别的JVM选项或内存分配不足。建议检查并调整JVM参数,确保为对象堆预留足够的内存空间(至少1572864KB)。此外,还可以优化应用程序的内存使用,减少不必要的内存消耗。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 在Django中提交表单时遇到值错误问题如何解决?
    在Django项目中,当用户提交包含多个选择目标的表单时,可能会遇到值错误问题。本文将探讨如何通过优化表单处理逻辑和验证机制来有效解决这一问题,确保表单数据的准确性和完整性。 ... [详细]
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 通过优化模板消息机制,本研究提出了一种高效的信息化推送方案。该方案利用获取的访问令牌(access token)和指定的模板ID,实现了精准且快速的信息推送,显著提升了用户体验和信息传递效率。具体实现中,通过调用相关API接口,确保了消息的准确性和及时性,为用户提供更加便捷的服务。 ... [详细]
  • 本项目通过Python编程实现了一个简单的汇率转换器v1.02。主要内容包括:1. Python的基本语法元素:(1)缩进:用于表示代码的层次结构,是Python中定义程序框架的唯一方式;(2)注释:提供开发者说明信息,不参与实际运行,通常每个代码块添加一个注释;(3)常量和变量:用于存储和操作数据,是程序执行过程中的重要组成部分。此外,项目还涉及了函数定义、用户输入处理和异常捕获等高级特性,以确保程序的健壮性和易用性。 ... [详细]
  • QT框架中事件循环机制及事件分发类详解
    在QT框架中,QCoreApplication类作为事件循环的核心组件,为应用程序提供了基础的事件处理机制。该类继承自QObject,负责管理和调度各种事件,确保程序能够响应用户操作和其他系统事件。通过事件循环,QCoreApplication实现了高效的事件分发和处理,使得应用程序能够保持流畅的运行状态。此外,QCoreApplication还提供了多种方法和信号槽机制,方便开发者进行事件的定制和扩展。 ... [详细]
author-avatar
小老特
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有