CreateProcessAsUser 함수에 오류가 발생했습니다. "요청 된 작업은 고도가 필요합니다."라고 나는 그것을 내가 할 수있는 가장 높은 권한을 부여했다고 생각했다. 누구 한테 도움이 되니?CreateProecssAsUser 승격 된 권한?
activeSessionId = WTSGetActiveConsoleSessionId();//get the currently logged on user's active session id
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//take snapshot of all processes in The system
pe32.dwSize = sizeof(PROCESSENTRY32);
Process32First(hProcessSnap, &pe32)
do//iterate through all processes
{
if(_wcsicmp(pe32.szExeFile, L"winlogon.exe") == 0)//narrow down to process called "winlogon.exe"
{
if (ProcessIdToSessionId(pe32.th32ProcessID, &peSessionID)
&& peSessionID == activeSessionId)//compare the sessionID of each winlog process to the active console session id
{
winlogonPID = pe32.th32ProcessID;
break;
}
}
}while(Process32Next(hProcessSnap, &pe32));
dwCreationFlags = (NORMAL_PRIORITY_CLASS|CREATE_NEW_CONSOLE);
hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,winlogonPID);//return handle to winlogon process
OpenProcessToken(hProcess,TOKEN_ALL_ACCESS,&hPToken)//opens the access token
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&luid)//get the locally unique identifier(luid)
//creates a new access token and duplicates winlogon token of the active user
DuplicateTokenEx(hPToken,MAXIMUM_ALLOWED,NULL,SecurityIdentification,TokenPrimary,&hUserTokenDup)
}
SetTokenInformation(hUserTokenDup,TokenSessionId,(void*)&activeSessionId,sizeof(DWORD))//sets info for duplicated token
//adjust the privileges of the duplicated token
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hUserTokenDup, FALSE, &tp, sizeof(TOKEN_PRIVILEGES),(PTOKEN_PRIVILEGES)NULL,NULL)
pEnv = NULL;
if(CreateEnvironmentBlock(&pEnv,hUserTokenDup,TRUE))//retrieve environment variables for the user
{
dwCreationFlags|=CREATE_UNICODE_ENVIRONMENT;
}
else pEnv = NULL;
ZeroMemory(&si, sizeof(si));//set parameters to 0
si.cb = sizeof(si);//the size of si
si.lpDesktop = L"WinSta0\\Default";//window station and desktop of interactive user
ZeroMemory(&pi, sizeof(pi));//set parameters to 0
//launch the process in active logged in user's session
CreateProcessAsUser
(
hUserTokenDup,
NULL,
Path,
NULL,
NULL,
FALSE,
dwCreationFlags,
pEnv,
NULL,
&si,
&pi
)
)
//Destroy the Environment block
(DestroyEnvironmentBlock(pEnv)
CloseHandle(hProcess)
CloseHandle(hUserToken)
CloseHandle(hUserTokenDup)
CloseHandle(hPToken)
}
"요청 된 작업에 고도가 필요합니다." 그게 정확히 뭐라고하던가요? –
내 프로그램에 GetLastError() 파일에 기록합니다. 죄송합니다. – user966890
여기에 약 20 가지 API 함수가 있습니다. 어느 것이 실패합니까? –