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 复制共享
分享到:
相关推荐
《winNT文件系统内核开发指导》是一本深入探讨Windows NT操作系统下文件系统设计与...《winNT文件系统内核开发指导》一书将带领读者逐步探索这个复杂的领域,从理论到实践,为Windows内核开发的旅程奠定坚实的基础。
Direct3D提供了类似于OpenGL的接口,但其性能通常更高,因为它是针对Windows内核优化的。在Visual C++环境下,开发者可以使用Direct3D的类库,构建3D场景、管理设备状态、处理输入以及实现复杂的动画效果。 学习...
《知其所以然驱动开发教程 :1.2.2_VS2003环境编译驱动》是一个专门针对驱动程序开发的学习资源,旨在帮助初学者和有经验的开发者理解驱动程序的工作原理,并在Visual Studio 2003环境下进行驱动的编译与调试。...
驱动开发是操作系统级别上的一项高级编程活动,它允许开发者创建能在硬件和操作系统之间进行高效通讯的程序,通常涉及到底层硬件或操作...通过本文的学习,开发者可以快速地进入驱动开发的世界,开始自己的开发旅程。
内核模式驱动程序参考部分包括设备和驱动程序安装、USB驱动程序、显示设备、人机接口设备以及打印DDI(设备驱动接口),这使得开发者能够为Windows开发各种硬件设备驱动程序。 网络和Internet参考部分覆盖了从蓝牙...
CVE是识别和跟踪安全漏洞的国际标准,学习分析Windows系统中的CVE,意味着我们要理解操作系统的工作原理,熟悉内存管理、权限控制等关键概念。通过对 CVE 的研究,我们能学习如何发现和修复安全漏洞,这对于构建更...
1. **WebView对象**:Awesomium的核心是WebView对象,它充当了一个独立的浏览器窗口,能够加载和显示任何有效的Web页面。开发者可以像操作本地控件一样操作WebView,进行加载、导航、执行JavaScript等操作。 2. **...
本书以“动手写”为指导思想,只要是跟“动手写”操作系统有关的知识,都作为介绍对象加以讨论,所以,从开发环境的搭建,到保护模式,再到IBMPC中有关芯片的知识,最后到操作系统本身的设计实现,都能在本文中...
本书以“动手写”为指导思想,只要是跟“动手写”操作系统有关的知识,都作为介绍对象加以讨论,所以,从开发环境的搭建,到保护模式,再到IBMPC中有关芯片的知识,最后到操作系统本身的设计实现,都能在本文中...