Keme132.dll 包括了系统基本服务中最基本的 API 函数,如文件系统、进程与线程、内
存管理等。
Windows XPSP2 系统中,Keme132.d11 有 949 个导出函数,例如,CreateFileA、
CreateProcessA、OpenThread、SetFileTime 等。
User32.dll 是 Windows 图形用户界面的主要支持。一些重要的图形用户界面函数由
User32.dll 函数导出。Windows XP SP2 系统中,User32.dll 有 732 个导出函数,例如
CreateWindowExW、RegisterClassA 等
Gd132.dll 是 Windows GDI 应用程序设计接口,Gdi32.dll 导出了与此相关的若干函数,
如 GetTextColor、LineTo、TextOutA 等
1.文件系统
对文件的基本操作包括文件的创建、打开、读写、关闭、删除,文件属性的设置与获取,
目录操作,以及磁盘分卷的操作,还包括镜像文件、加密文件系统等。
2.内存管理
主要是内在的分配、共享、释放等内容,包括虚拟内存管理、分页机制、堆管理等。
3.进程、线程和模块
包括进程主程序( exe)、模块、动态链接库(dll)的编写;线程的基本概念,线程创建、
遍历、同步等操作;进程与权限;线程与纤程等内容。
4.设备 I/O、驱动程序控制
包括设备对象等基本概念。加载与卸载驱动程序,控制驱动程序,与驱动程序通信等。
5.调试与错误处理
包括如何开发调试器,程序运行错误的处理,日志的记录、Windows 可执行文件的结构
等。
6.Windows 系统信息
包括注册表的操作,如打开注册表,读取、写入键值,创建、删除键;还包括系统基本
信息的获取和设置,如系统目录、系统版本、计算机名等。
7.进程间通信
包括使用共享文件进行进程间通信的方法,使用消息进行进程间通信的方法,使用邮槽、
管道等进行进程间通信的方法,使用网络共享进行进程间通信的方法。
8.定时器与消息机制
消息机制是 Windows 系统中很重要的一种机制。 几乎所有的 Windows 应用程序都在与消
息打交道,而 Windows 的消息机制又是依赖于定时器的。所以了解 Windows 消息机制是学习
Windows 应用程序开发的重要内容。
9.其他
Windows 的系统基本服务还包括性能监视、电源管理、索引与数据存储等,也将在本书
中有所涉及。
变量名:通常采用所谓的“匈牙利命名法”,变量名由“类型缩写(小写)”+“变量
描述(单词首字母大写)”构成,如字符串类型的变量可以命名为 szFileName,DWORD 类型
的数据可以命名为 dwFileSize,指针类型可以命名为 lpBuffer,句柄类型的变量可以命名
为 hLogFile 等。
函数名:各单词的首字母大写,如 EnumerateFilesInDrectory、Show FileSize 等。
类型名:全大写,各单词以下划线分隔,如 WIN32_FILE_ ATTRIBUTE_DATA、DWORD、
HANDLE 等。
常量:同类型名的命名方式。
宏:多与类型名命名方式相同,有的也与函数名命名方式相同。
大括号与代码段:一般大括号独立占一行,大括号内的代码段缩进。如果代码段仅一行
(如 if-else 后的语句),也建议使用大括号。
在调用或定义函数时,如果函数太长,可以分行写,将每个参数写一行。一般多于 3
个参数的函数需要分行写,以美观和方便阅读为原则。
Windows 内存管理原理
地址空间、物理内存、虚拟地址空间、用户内存空间与内核内存空间
◇分段与分页内存管理。
◇物理地址与虚拟地址、虚拟地址空间。
◇虚拟内存布局,内存的分工,堆与栈。
◇ 内存的存取权限。
◇标准 C 内存管理函数与 Windows 内存管理 API 的关系。
(1)虚拟地址空间中的数据是分页管理的。
(2)应用程序不用考虑系统中其他应用程序的内存使用情况,如占用了多少内存、占用
了哪些内存等。
(3)虚拟地址并不是物理地址空间中的地址,不是数据在内存中真实存在的地址,操作
系统会将进程的虚拟地址映射到真实的物理内存的地址。
(4)进程也不用考虑真实的物理内存有多大,只需要了解可以使用 2GB(一般情况下)
的内存,操作系统负责转换。
(5)如果系统中没有足够的物理内存供使用,那么操作系统会将当前没有使用的内存分
页“调度”到硬盘上保存起来。页面调度不会造成内存中的数据在虚拟地址空间中地址的改
变,所以进程不需要知道内存分页是如何调度的,不需要知道内存中保存的数据是在内存中
还是在硬盘上,只需要知道其虚拟地址就可以了。
栈和堆是两种重要的内在管理形式。
进程的每个线程都有自己的栈,栈与函数的调用、执行和返回及局部变量的保存相关,
一般情况下,栈中保存着函数的参数、返回地址和局部变量,调用函数将参数入栈,调用指
令将函数返回地址入栈,被调用函数负责保存调用函数的相关栈指针,为局部变量分配空间
等,而堆是一种可以动态分配和释放的内存,由堆管理器进行管理,用户在程序中使用的内
存分配函数都是通过堆进行分配的。