使用GetEnvironmentStrings函数很简单,函数没有参数,返回值是一个字符串指针(PTSTR),指向环境变量的内存块。注意个这个内存块是只读的,如果需要改变环境变量需要使用SetEnvironment函数。而且是在使用完GetEnvironmentStrings之后,需要使用FreeEnvironmentStrings来释放。
这里需要注意的问题有,首先是一个经常犯到的错误,就是在读取内存中的字符串的时候总是直接显示指针指向内容,例如在用delphi读取PE文件的相关内容的时候。这样做是不安全的,容易奔溃。正确的作法如同在使用createprocess()时一样,把要显示的内容复制到一个缓冲区中。
其次是这里面的很多又涉及到几个字符串处理函数,如StringCbCopyN()和StringCchCopyN() 这两个是strncopy()的替代函数。MSDN中说使用完这两个函数后要使用FAILED和SUCCEEDED这两个宏来检测一下函数的返回状态。 _tcschr()这个函数的作用就相当于delphi里的copy函数,不过这里函数的的作用是返回一个函数指针,指向源字符串中子字符串的位置。_tcslen()函数返回一个字符串指针指向的字符串的字符数。
总的来说这个代码主要涉及到的问题还是字符窜的处理。环境变量字符串的格式如下:
=::=::\ =
VarName1=VarValue1\0
VarName2= VarValue2\0
VarName3=VarValue3\0
\0
第一个字符串肯定是=::=::
然后后面可能有几个以=开头的,但是这种字符串不作为环境变量
后面的字符串就很有规