《Windows核心编程》读书笔记——进程篇
来源:互联网 发布:js设置单选框选中的值 编辑:程序博客网 时间:2024/06/05 18:17
第4章 进程:
1. 一般将进程定义成一个正在运行的程序的一个实例,它由以下两部分构成。
一个内核对象,操作系统用它来管理进程。内核对象也是系统保存进程统计信息的地方。
一个地址空间,其中包含所有可执行文件或DLL模块的代码和数据。
2. 每个进程至少要有一个线程来执行进程地址空间包含的代码。如果没有线程要执行进程地址空间包含的代码,进程就失去了继续存在的理由,系统会自动销毁进程及其地址空间。
3. 在VS开发过程中通过链接器开关/SUBSYSTEM:CONSOLE或/SUBSYSTEM:WINDOWS设置是加载应用台程序还是窗口。
4. windows应用程序的入口点函数有四种(是否加载应用台程序,是否使用Unicode,两个2维选项组成四种组合)。分别是:
_tWinMain(WinMain),嵌入可执行文件的启动函数是 WinMainCRTStartup
_tWinMain(wWinMain),嵌入可执行文件的启动函数是 wWinMainCRTStartup
_tmain(Main),嵌入可执行文件的启动函数是 mainCRTStartup
_tmain(Wmain),嵌入可执行文件的启动函数是 wmainCRTStartup
链接时根据上面链接器开关选择应的入口函数来做链接。
5. 上述启动函数的源码在crtexe.c文件中,主要的用途总结如下:
获取指向新进程的完整命令行的一个指针。
获取指向新进程的环境变量的一个指针。
初始化C/C++运行库的合璧变量。如果包含了StdLib.h,我们的代码就可以访问这些变量。
初始化C运行库内存分配函数(malloc,alloc)和其他底层I/O例程使用的堆(heap)。
调用所有全局和静态C++类对象的构造函数。
完成以上的初始化工作以后就调用应用程序的入口点函数。
6. 提到内存泄露的检测方法,已经转载文章在本博客中。
7. 进程实例句柄的获取和使用:GetModuleHandle, GetModuleHandlerEx,GetModuleFileName
8. 进程命令行的获取:GetCommandLine,CommandLineToArgvW
9. 进程环境变量:GetEnvironmentStrings,FreeEnvironmentStrings,GetEnvironmentVariable,SetEnvironmentVariable
10. 进程相关路径的函数:GetCurrentDirectory, GetFullPathName
11. 创建进程函数CreateProcess,本章最重要的函数。它的运行机理:
a. 系统创建一个进程内核对象;
b. 系统为进程创建一个虚拟地址空间,加载可执行文件的代码及数据到这个虚拟地址空间;
c. 系统为新进程的主线程创建一个线程内核对象;
d. 主线程执行C/C++运行时的启动例程,执行应用程序入口;
e. 如果创建新进程和主线程成功,返回TRUE。
参数及说明请参考:http://social.msdn.microsoft.com/search/en-us/windows/desktop?query=CreateProcess&Refinement=181
参数的使用是本章的关键。
12. 终止进程函数 ExitProcess,是不安全的函数,不要在程序中调用。其过程可以使用构造函数和析构函数打印是否调用来证明。
13. 终止进程函数 TerminateProcess,是安全函数,可以使用。
14. 子进程在创建时拥有父进程的ID,但如果父进程终止了,此ID就没意义了,所以如果没有同步信号表明父进程没有结束,不要使用这个ID来做事情。
15. 管理员以标准用户权限运行时:这些内容是windows vista及win7的新增内容,也是相对独立而重要的,另开一篇总结。
书上得来终觉浅,缘知此事要躬行。
- 《Windows核心编程》读书笔记——进程篇
- 《Windows核心编程》读书笔记四 进程
- 《Windows核心编程》读书笔记——作业
- 《Windows核心编程》笔记——进程
- windows 核心编程——进程
- 《Windows核心编程》——四 进程
- windows核心编程—进程初步
- WINDOWS的内核对象——《windows核心编程》读书笔记
- 《Windows核心编程》读书笔记——Windows线程池
- Windows核心编程读书笔记
- Windows 核心编程读书笔记
- Windows核心编程读书笔记
- Windows 核心编程 -- 读书笔记
- windows核心编程读书笔记
- 《Windows核心编程》读书笔记
- 《Windows核心编程》读书笔记
- 【读书笔记】Windows核心编程
- 【读书笔记】windows核心编程
- 有关java环境配置的 JAVA_HOME path classpath 问题
- js正则表达式语法
- 遇到 'for_each' is not a member of 'std' 的问题
- Ubuntu无法打开22端口
- 99精美Login(signup)登陆表单设计PSD资源
- 《Windows核心编程》读书笔记——进程篇
- Python2.6及后期版本的新特性——接口和抽象类
- android 动态改变屏幕方向
- 拥有超过20万用户的亚洲最畅销.NET报表控件ActiveReports发布v7.0版本
- 我国第一个有可能获得的诺贝尔科学奖
- log4j日志等级
- 七步搞定Subversion服务器在Ubuntu下的配置
- 分手快乐,祝你快乐,你找不到比我更好的。
- 编译运行xmind3.2源码