首页 > 代码库 > Windows核心编程读书笔记-第四章进程

Windows核心编程读书笔记-第四章进程

1.进程组成

  • 一个内核对象,操作系统用它来管理进程。
  • 一个地址空间,其中包含所有可执行文件或DLL模块的代码和数据。此外,它还包含动态内存分配,比如线程堆栈和堆的分配。

2.一个进程可以有多个线程,所有线程都在进程的地址空间中“同时”执行代码。每个进程至少要有一个线程来执行进程地址空间包含的代码。

3.用Microsoft Visual Studio来创建一个应用程序项目时,集开发环境会设置各种链接器开关,使链接器将子系统的正确类型嵌入最终生成的可执行文件。对于CUI程序,这个链接器开关是/SUBSYSTEM:CONSOLE,对于GUI程序,则是/SUBSYSTEM:WINDOWS

4.应用程序类型和相应的入口点函数

应用程序类型 入口点函数(入口) 嵌入可执行文件的启动函数
处理ANSI字符和字符串的GUI应用程序 _tWinMain(WinMain) WinMainCRTStartup
处理Unicode字符和字符串的GUI应用程序 _tWinMain(wWinMain) wWinMainCRTStartup
处理ANSI字符和字符串的CUI应用程序 _tmain(Main) mainCRTStartup
处理Unicode字符和字符串的CUI应用程序 _tmain(Wmain) wmainCRTStartup

5.启动函数的用途

  • 获取指向新进程的完整命令行的一个指针
  • 获取指向新进程的环境变量的一个指针
  • 初始化C/C++运行库的全局变量。如果包含了StdLib.h,我们的代码就可以访问这些变量
  • 初始化C运行库内存分配函数(malloc和calloc)和其他底层I/O例程使用的堆(heap)
  • 调用所有全局和静态C++类对象的构造函数

6.加载到进程地址空间的每一个可执行文件或者DLL文件都赋予了一个独一无二的实例句柄。可执行文件的实例被当作(w)WinMain函数的第一个参数hInstanceExe传入。(w)WinMain的hInstanceExe参数的实际值是一个内存基地址:系统将可执行文件的映像加载到进城地址空间的这个位置。

7.HMODULE和HINSTANCE完全是一回事。

8.

Windows核心编程读书笔记-第四章进程