热门标签 | 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






推荐阅读
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • vue使用
    关键词: ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • 从批量eml文件中提取附件的Python代码实现方法
    本文介绍了使用Python代码从批量eml文件中提取附件的实现方法,包括获取eml附件信息、递归文件夹下所有文件、创建目的文件夹等步骤。通过该方法可以方便地提取eml文件中的附件,并保存到指定的文件夹中。 ... [详细]
  • C语言自带的快排和二分查找
    Author🚹:CofCaiEmail✉️:cai.dongjunnexuslink.cnQQ😙:1664866311personalPage&#x ... [详细]
  • Python中的PyInputPlus模块原文:https ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
  • 我尝试使用Vue.js在Laravel中实现imageupload吗?但是,我不知道为什么图像 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
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社区 版权所有