windows内核对象主要有进程对象,作业对象,线程对象等。由于内核对象的数据结构只能被内核访问,因此应用程序无法在内存中找到这些数据结构并直接改变它们的内容。MS规定了这个限制条件,目的是为了确保内核对象结构保持状态的一致。这个限制也使MS能够在不破坏任何应用程序的情况下在这些结构中添加、删除和修改数据成员。
1.内核对象
在创建内核对象成功的时候会生成一个内核对象句柄
HANDLE CreateFile(
LPCTSTR lpFileName, // pointer to name of the file
DWORD dwDesiredAccess, // access (read-write) mode
DWORD dwShareMode, // share mode
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
// pointer to security attributes
DWORD dwCreationDisposition, // how to create
DWORD dwFlagsAndAttributes, // file attributes
HANDLE hTemplateFile // handle to file with attributes to
// copy
);
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to security attributes
DWORD dwStackSize, // initial thread stack size
LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
LPVOID lpParameter, // argument for new thread
DWORD dwCreationFlags, // creation flags
LPDWORD lpThreadId // pointer to receive thread ID
);
2.进程与内核对象
任何的一个内核对象都是管理一对进程的,但是内核对象的句柄只属于内核并不属于进程,因为任何内核对象的句柄可能被多个进程引用。当存在一个进程引用内核对象的时候,内核对象的计数器就会+1。当一个内核对象没有进程引用的时候,那么系统将要回收这个内核对象。如果我们多个进程引用了一个内核对象,其中一个进程不引用内核对象的时候必须关闭,使这个内核对象的计数器-1,否则这个将有可能出现内存泄漏,这样时候会导致系统崩溃呢?一般是不会的,因为当我们在结束进程的时候,这个进程会结束掉这个进程管理的所有内核对象,以及这个进程用到的所以资源。
2.进程管理内核对象
每一个进程都维护着一个索引表,这个索引表就是用来保存与之关联的内核对象,索引表的结构如下:
每当创建一个内核对象的时候就会在此进程的索引表里添加一条内核对象关联记录
3.共享内核对象
3.1 继承共享
子进程继承父进程的内核对象。首先我们得必须了解一下CreateProcess API,
BOOL CreateProcess(
LPCTSTR lpApplicationName,
// pointer to name of executable module
LPTSTR lpCommandLine, // pointer to command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // process security attributes
LPSECURITY_ATTRIBUTES lpThreadAttributes, // thread security attributes
BOOL bInheritHandles, // handle inheritance flag
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // pointer to new environment block
LPCTSTR lpCurrentDirectory, // pointer to current directory name
LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO
LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION
);
:1.在创建父进程的时候,设置创建进程
3.2 命名共享
3.3 服务器端的共享
3.4 复制共享
分享到:
相关推荐
通过深入学习和理解这份《Windows-VC-MFC函数大全》,开发者能够熟练掌握MFC类库,编写出高效、稳定且易于维护的Windows应用程序。无论是初学者还是有经验的开发者,这份资料都能成为他们在Windows编程旅程中的宝贵...
Ruby奇幻旅程-markdown介绍
MFC是微软构建在SDK之上的类库,它封装了许多复杂的SDK函数,使得开发者可以使用面向对象的方式来编写Windows程序。MFC提供了诸如CWnd、CButton、CEdit等类,对应于Windows窗口、按钮、编辑框等控件,大大简化了UI...
《Linux内核精髓-精通Linux内核必会的75个绝技》是一本专为Linux爱好者和专业人员设计的深度学习指南。本书的核心目标是帮助读者深入...无论是为了个人兴趣还是职业发展,深入学习Linux内核都将是一次富有价值的旅程。
在“逐梦旅程:Windows游戏编程之从零开始”这个主题中,我们将深入探讨如何使用Direct3D在Windows平台上开发游戏。...在这个“逐梦旅程”中,不断探索,持续学习,你终将成为一名出色的Windows游戏开发者。
《Windows API - 函数、接口与编程实例》是深入理解Windows操作系统编程的重要参考资料。Windows API,全称为Windows应用程序接口,是一系列预定义的函数、...这本书提供的详细讲解和实例将是你学习旅程中的宝贵资源。
从汇编语言到Windows内核编程的旅程充满了挑战,但也极具成就感。通过逐步学习并实践这些关键技术点,你可以成为一名精通底层技术和操作系统原理的专业人士。无论是在开发高性能软件还是进行系统安全研究等领域,...
《天书夜读——从汇编语言到Windows内核编程》是...无论是为了职业发展,还是出于个人兴趣,学习汇编语言和Windows内核编程都将是一次富有成果的旅程,能够极大地拓宽读者的视野,并提升其在计算机科学领域的专业素养。
根据给定的信息,本文将对“内网渗透之讲述一次图书馆泡妹的心酸旅程”这一主题进行深入解析,重点在于信息安全、内网渗透等技术层面的内容。文章将围绕标题及描述中的关键信息展开,旨在提炼出相关的技术知识点。 ...
本 Markdown 材料《毕业设计论文:从灵感到实现的奇妙旅程》旨在为即将完成学业的学生提供一份宝贵的指南,帮助他们顺利完成毕业设计论文。从最初的创意萌芽到最终成果的呈现,每一步都充满了挑战与机遇。这份材料...
总的来说,"jdk-14.0.2_windows-x64_bin.rar"这个压缩包提供了在Windows 64位环境下进行Java开发的基础,而下载和安装这个JDK版本是开始Java编程旅程的第一步。随着对JDK的深入理解和实践,开发者将能够利用Java的...
本文将深入探讨"android-sdk_r24.4.1-windows.zip"这一版本的SDK,它是Android开发旅程中的重要里程碑。 首先,"android-sdk_r24.4.1-windows.zip"是一个针对Windows平台的特定版本的Android SDK。这里的“r24.4.1...
学习内核的进阶方法可以借鉴笛卡尔的“复杂问题简单化”思想,将内核学习分解成四个层次:了解基本结构、掌握核心概念、熟悉关键模块和深入细节。每个阶段都有明确的目标,逐步深入,使学习过程更为有序。 此外,...
《逐梦之旅:Windows游戏编程之从零开始》源码
在Matlab的学习旅程中,掌握基础与进阶技巧至关重要,特别是在深入研究和应用阶段。"Matlab精品学习资源-Matlab101-master"这个压缩包提供了全面且系统的Matlab学习资料,旨在帮助用户从入门到精通。让我们逐一探讨...
"Linux内核学习起步.pdf"文档可能包含了关于这些主题的详细教程,从基础概念到实践操作,逐步引导读者了解并掌握Linux内核的相关知识。深入理解这些内容不仅有助于提升系统管理能力,也是成为高级Linux开发者的基础...
Linux内核源码是计算机操作系统领域中的重要学习资源,尤其是对于想要深入了解操作系统工作原理和Linux系统开发的工程师来说。Linux 0.11是Linux历史上的一个早期版本,由林纳斯·托瓦兹(Linus Torvalds)在1992年...
《Trilium Windows x64 0.43.4:深入探索高效笔记与知识管理》 Trilium是一款专为Windows平台设计...在解压并安装“trilium-windows-x64”后,用户可以立即开始自己的知识旅程,享受高效且有序的信息管理带来的便利。