1. 进程可以…
- 进程可以通过设置错误模式SetErrorMode让系统知道进程如何响应严重错误。
- 进程可以通过对应的句柄管理
- 进程可以通过提供一个地址空间,给多个dll或可执行文件存放代码或数据
2. 关于创建进程
使用CreateProcess函数创建一个进程,函数原型为:
BOOL CreateProcess
(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
该函数在进程完全初始化好之前就返回TRUE,若其中一个DLL不能正确初始化,进程就会终止。所以返回TRUE也并不意味着进程就可以成功运行了。
2.1关于CreateProcess函数的参数
具体详细的查阅MSDN,这里提及我觉得要注意的点~
- lpCommandLine参数:是一个非“常量字符串地址”,所以不能直接传入字符常量,因为内部CreateProcess会修改这个命令行,虽然返回时会还愿为原来形式。
- lpApplicationName参数:传递为NULL,则按照1)主调进程.exe文件所在目录;2)主调进程的当前目录;3)Windows系统目录;4)Windows目录;5)PATH环境变量中列出的目录
- dwCreationFlags参数:可以通过它设置1)父进程是否可以知道紫禁城的调试信息;2)挂起进程;3)可以组织子进程访问父进程的控制台窗口;4)可以创建一个新控制台窗口或不创建新的控制台窗口;5)子进程是否集成父进程所用的错误模式;6)告诉子进程环境块应包含Unicode字符(进程的环境块默认包含的是ANSI字符串)7)指定优先级
- lpEnvironment参数:NULL表明子进程继承父进程使用的环境字符串
- lpCurrentDirectory参数:NULL表明新进程工作目录和生成新进程的应用程序一样;非NULL表明指定工作目录。
3. 进程通信
Windows提供不同进程之间传递数据方式有:DDE(动态数据交换)、OLE、管邮件槽和内存映射文件等。
| 进程通信方式 | 文件映射 | 共享内存 | 匿名管道 | 命令管道 | 邮件槽 | 剪贴板 | 动态数据交换 |
|---|---|---|---|---|---|---|---|
| 定义 | 进程把文件内容当做进程地址区间一块内存,并通过指针操作 | 文件映射的一种特殊情况,文件映射对象是从OS页面文件访问内存 | 父进程创建管道,由要通信的子进程集成通道的读/写端点句柄 | 给管道制定了名字 | 可以实现给制定网络区域内的所有计算机广播消息的能力 | 可以共享任何数据格式 | 使用共享内存在应用程序之间进行数据交换 |
| 是否支持跨进程通信 | 是 | 是 | 仅支持父子进程或“亲兄弟”进程 | 是 | 是 | 是 | 是 |
PS:具体实例见另一文章
4. windows session的一些理解

Windows session的较详细理解:

PS:上图理解来自https://bbs.pediy.com/thread-173271.htm
用户登陆到windows系统之后,不管该用户是本地登陆的,还是远程登陆,系统都会为这个用户分配一个新的会话ID(SID)。也就是说会话与用户的登录是相关连的,没有用户登录就不存在会话。因此,会话的含义是指用户登录之后的一种运行的环境。
进程是为了内部的执行的线程提供一个空间和环境,而会话则是为内部所有的进程提供一个执行的空间和环境。
当用户登陆到系统中之后,用户下所有的进程都属于这个会话空间。在每个进程的PEB当中就有SessionID。
同一台机器上面分别属于不同会话空间下的进程之间如何通讯呢?微软的MSDN里面的一些API就说的很清楚了。
如CreateFileMapping在MSDN的描述在http://msdn.microsoft.com/en-us/library/aa366537(VS.85).aspx
lpName 如果使用"Global" or “Local” 作用范围是全局的。
原文链接:https://blog.youkuaiyun.com/zacklin/article/details/7579217
Q: 不同会话的进程通信可以运用的场景有哪些?
本文深入探讨Windows环境下进程管理的细节,包括进程如何通过设置错误模式、管理句柄及地址空间来运作,以及如何使用CreateProcess函数创建进程。此外,还介绍了进程间通信的各种方式,如文件映射、共享内存、匿名管道等,并解析了windowssession的概念及其对进程的影响。
804

被折叠的 条评论
为什么被折叠?



