16,472
社区成员
发帖
与我相关
我的任务
分享
HANDLE ProcessHandle = NULL;
HANDLE CurrentToken = NULL;
HANDLE TokenDup = NULL;
ProcessHandle = GetCurrentProcess();
if (!OpenProcessToken(ProcessHandle,TOKEN_ALL_ACCESS,¤tToken))
{
int d = GetLastError();
WriteLogString(L"OpenProcessToken failed.Last Error is:%d",d);
return;
}
if (!DuplicateTokenEx(CurrentToken,MAXIMUM_ALLOWED,NULL,SecurityIdentification,TokenPrimary,&TokenDup))
{
int dd = GetLastError();
WriteLogString(L"DuplicateTokenEx failed.Last error is:%d",dd);
return;
}
DWORD dwSessionID = WTSGetActiveConsoleSessionId();
WriteLogString(L"WTSGetActiveConsoleSessionId:%d",dwSessionID);
if (!SetTokenInformation(TokenDup,TokenSessionId,&dwSessionID,sizeof(DWORD)))
{
int ddd = GetLastError();
WriteLogString(L"SetTokenInformation failed.Last error is:%d",ddd);
return;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si,sizeof(STARTUPINFO));
ZeroMemory(&pi,sizeof(PROCESS_INFORMATION));
si.cb = sizeof(STARTUPINFO);
si.lpDesktop = L"WinSta0\\Default";
LPVOID pEnv = NULL;
DWORD dwCreationFlags = NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE | CREATE_UNICODE_ENVIRONMENT;
if (!CreateEnvironmentBlock(&pEnv,TokenDup,FALSE))
{
int error1 = GetLastError();
WriteLogString(L"CreateEnvironmentBlock failed.Last error is:%d",error1);
return;
}
if (!CreateProcessAsUser(TokenDup,L"C:\\log.exe",NULL,NULL,NULL,FALSE,dwCreationFlags,pEnv,NULL,&si,&pi))
{
int error2 = GetLastError();
WriteLogString(L"CreateProcessAsUser failed.Last error is:%d",error2);
return;
}