小编Emm*_*NAT的帖子

从服务加载用户配置文件

在服务中,我尝试使用以下代码来启动程序:

HANDLE hPipe;
HANDLE hToken;
PROFILEINFO stProfileInfo;
char szUserName[64];
DWORD dwUserNameSize = 64;

// Take the identity of the client
ImpersonateNamedPipeClient(hPipe);

// Retrieve the user name (DOMAIN\USER)
GetUserNameEx(NameSamCompatible,szUserName,&dwUserNameSize);

// Get the impersonation token
OpenThreadToken(GetCurrentThread(),TOKEN_ALL_ACCESS,TRUE,&hToken);

// Load the user's profile
ZeroMemory(&stProfileInfo,sizeof(PROFILEINFO));
stProfileInfo.dwSize = sizeof(PROFILEINFO);
stProfileInfo.dwFlags = PI_NOUI;
stProfileInfo.lpUserName = szUserName;
LoadUserProfile(hToken,&stProfileInfo);
Run Code Online (Sandbox Code Playgroud)

不幸的是,电话LoadUserProfile失败了GetLastError=5 (access denied).在userenv.log中,我可以找到:

USERENV LoadUserProfile: Yes, we can impersonate the user. Running as self
USERENV LoadUserProfile: Entering, hToken = <0xc8>, lpProfileInfo = 0xb30aa4
USERENV LoadUserProfile: lpProfileInfo->dwFlags …
Run Code Online (Sandbox Code Playgroud)

c++ windows createprocessasuser

5
推荐指数
0
解决办法
2156
查看次数

标签 统计

c++ ×1

createprocessasuser ×1

windows ×1