1. windows进程启动过程wWinMainCRTStartup()->__tmainCRTStartup()->wWinMain(),注意:wWinMainCRTStartup作用:
<1>检索指向新进程的完整命令行的指针
<2> 检索指向新进程的环境变量的指针
<3>对C / C + +运行期的全局变量进行初始化。如果包含了S t d L i b . h 文件,代码就能访问这些变量
<4>对C 运行期内存单元分配函数(ma l l o c 和ca l l o c )和其他低层输入/输出例程使用的堆进行初始化
<5>为所有全局和静态C + +类对象调用构造函数
2. 进程命令行: __argc表示命令行参数个数,__wargv指向命令行字符串指针数组。对于_tWinMain函数来说,wWinMainCRTStartup已经解析好命令行,把exe文件路径已经去解析,lpCmdLine 指向剩于部分的命令行, 命令行字符串以 空格作为分割符
3. 进程4GB地址空间,低2GB用户空间,高2GB内核空间。
4. 进程环境变量,形式如下
Var1=Value1\0
Var2=Value2\0
Var3=Value3\0
...
VarN=ValueN\0\0
解析环境变量
5. 进程终止时候会干什么?
6. UAC权限控制(vista,win7上面大量存在, 项目中应该把uac问题放在比较重要的地位)
<1>应用程序提权包括手动提权和自动提权。
<2>用户界面权限隔离(UIPI),在vista和win7上面低权限的应用程序无法给高权限的应用程序发送消息,解决方案:ChangeWindowMessageFilter。
7. IPC通信机制:
<1>命令行、环境变量.适用场合:CreateProcess、ShellExecute、ShellExecuteEx来启动其余进程来传递信息,一般是进程初始化时候。
<2>mutex、Semaphore、Event。通过创建时以名字创建来进行进程间通信。
<3>WM_COPYDATA:小数据量且对通信效率要求不高。优点:简单易用。缺点:
通信效率不够,只能用SendMessage,不能用PostMessage或者PostThreadMessage,任何使用SendMessage将造成的问题在这里可能都会出现。
<4>Socket:主要用于网络通讯套接字开发。
<5> 管道,邮件槽:网络服务器开发。
<6>剪贴板,常用的复制,粘贴功能的实现。
<7>FileMapping(共享内存):最高效的通信方式,适用处理大数据量的通信。Windows上所有的IPC通信机制都是基于FileMapping来实现的。
参考资料:windows 核心编程第四章进程
Windows 核心编程第13章widnows内存体系结构
Windows核心编程第9章线程与内核对象的同步
Windows多线程程序设计第13章进程之间的通讯