2016-07-25 38 views
1

請參閱用C++編寫的CreateEnvironmentBlock如何打印從CreateEnvironmentBlock()獲得的lpEnvironment

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


lpEnvironment [out] 
Type: LPVOID* 

當最後一個函數返回時,它會收到一個指向新環境塊的指針。環境塊是一個以null結尾的Unicode字符串數組。該列表以兩個空值(\ 0 \ 0)結尾。

我可以成功地調用CreateEnvironmentBlock(),但我需要的是知道如何打印lpEnvironment(我的意思是我想打印環境變量)的內容。

回答

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; 
} 
相關問題