第四章 进程(3)进程的命令行&环境变量

 

2、进程的命令行

创建一个新进程时,要传递一个命令行(几乎永远不会为空)用于创建新进程的可执行文件的名字时命令行上的第一个标记。

A: C运行期的启动代码开始运行的时候,要检索进程的命令行,跳过可执行文件的名字,并将指向命令行其余部分的指针传递给WinMainpszCmdLine参数。(pszCmdLine参数总是指向一个A N S I字符串。将WinMain改为wWinMain,就能够访问进程的Unicode版本命令行)

B: 如果我想修改命令行,首先我要将命令行拷贝到应用程序的本地缓存中,然后再修改本地缓存。

C:可以调用GetCommandLine函数来获得一个指向进程的完整命令行的指针。

PTSTR GetCommandLine();

该函数返回一个指向包含完整命令行的缓存的指针,该命令行包括执行文件的完整路径名。

D: CommaneLineToArgvW负责在内部分配内存。大多数应用程序不释放该内存,它们在进程运行终止时依靠操作系统来释放内存。这是完全可行的。

3、进程的环境变量

每个进程都有一个与它相关的环境块。环境块是进程的地址空间中分配的一个内存块。每个环境块都包含一组字符串。每个字符串的第一部分是环境变量的名字,后跟一个等号,等号后面是要赋予变量的值。变量中的空格是有意义的。

应用程序也可以使用各种注册表函数来修改这些注册表项目。

子进程可以继承一组与父进程相同的环境变量。但是,父进程能够控制子进程继承什么环境变量,指的是子进程获得父进程的环境块拷贝,子进程与父进程并不共享相同的环境块。即子进程能够添加、删除或修改它的环境块中的变量,而这个变化在父进程的环境块中却得不到反映。

A: GetEnvironmentVariable函数可以确定某个环境变量是否存在以及它的值

DWORD GetEnvironmentVariable(PCTSTR pszName, PTSTR pszValue,

DWORD cchvalue);

pszName为变量名,pszValue指向用于存放变量值的缓存,cchValue用于指明缓存的大小(用户字符来表示)。该函数可以返回拷贝到缓存的字符数,如果在环境中找不到该变量名,也可以返回0

B: SetEnvironmentVariable函数来添加、删除、修改变量的值。

BOOL SetEnvironmentVariable(PCTSTR pszName, PCTSTR pszValue)

pszName参数标识的变量设置为pszValue参数标识的值。如果变量已经存在就修改该值。如果指定的变量不存在,便添加该变量,如果pszValueNULL,便从环境块中删除该变量。

原文地址:https://www.cnblogs.com/dyufei/p/2574009.html