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.
答案 0 :(得分:3)
注意winapi函数的返回值。只有在返回失败代码时才调用GetLastError()。
传递给CreateEnvironmentBlock()的令牌必须是用户令牌,您可以通过调用LogonUser()获得该令牌。