如何从CreateEnvironmentBlock()获取打印lpEnvironment

时间:2016-07-25 15:35:13

标签: windows visual-studio

请参阅用C ++编写的CreateEnvironmentBlock

BOOL WINAPI CreateEnvironmentBlock(
  _Out_    LPVOID *lpEnvironment,
  _In_opt_ HANDLE hToken,
  _In_     BOOL   bInherit
);


lpEnvironment [out]
Type: LPVOID*

当最后一个函数返回时,它会收到指向新环境块的指针。环境块是一个以null结尾的Unicode字符串数组。该列表以两个空值结尾(\ 0 \ 0)。

我能够成功调用CreateEnvironmentBlock(),但我需要知道如何打印lpEnvironment的内容(我的意思是我想打印环境变量)。

1 个答案:

答案 0 :(得分:1)

这是一个字符串列表,以空字符串结尾。使用VS中的Win32控制台应用程序项目模板创建的示例代码:

#include "stdafx.h"
#include <Windows.h>
#include <UserEnv.h>
#include <assert.h>
#pragma comment(lib, "userenv.lib")

int main()
{
    HANDLE hToken = NULL;
    BOOL ok = OpenProcessToken(GetCurrentProcess(), TOKEN_READ, &hToken);
    assert(ok);

    wchar_t* penv = L"";
    ok = CreateEnvironmentBlock((void**)&penv, hToken, TRUE);
    assert(ok);

    while (*penv) {
        printf("%ls\n", penv);
        penv += wcslen(penv) + 1;
    }
    return 0;
}