调用CreateEnvironmentBlock()时出错203(ERROR_ENVVAR_NOT_FOUND)

时间:2011-04-25 20:47:50

标签: windows winapi

env.c:

#include <windows.h>
#include <stdio.h>
#include <Userenv.h>
#include <Wtsapi32.h>
int main() {
    DWORD err;
    HANDLE hTokenThis = NULL;
    HANDLE hTokenDup = NULL;
    HANDLE hThisProcess = GetCurrentProcess();
    OpenProcessToken(hThisProcess, TOKEN_ALL_ACCESS, &hTokenThis);

    err=GetLastError();
    printf( "err002:%d\n",err);

    LPVOID pEnv = NULL;
    CreateEnvironmentBlock(&pEnv, hTokenThis, TRUE);

    err=GetLastError();
    printf( "err003:%d\n",err);
    return 0;
}

在当前本地桌面的cmd.exe中编译并运行:

gcc -o env.exe env.c -lUserenv
env.exe
err002:126
err003:203

操作系统是win7,gcc是4.5.2来自mingw。

我很困惑,为什么会出现错误203.

1 个答案:

答案 0 :(得分:3)

注意winapi函数的返回值。只有在返回失败代码时才调用GetLastError()。

传递给CreateEnvironmentBlock()的令牌必须是用户令牌,您可以通过调用LogonUser()获得该令牌。