вторник, 22 февраля 2011 г.

Запуск процесса с повышенным уровнем привилегий

Это, наверное, и так все знают, но я забываю, поэтому запишу тут. Если нужно запустить процесс с повышением уровня привилегий (run elevated process), то можно применить следующий подход: берем структуру SHELLEXECUTEINFO, заполняем как обычно, потом добавляем опцию lpVerb как показано в примере:
SHELLEXECUTEINFO shExecInfo;
shExecInfo.cbSize = sizeof(shExecInfo);
shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
shExecInfo.hwnd = NULL;
shExecInfo.lpVerb = L"runas"; // start with elevated privileges
shExecInfo.lpFile = filename.c_str();
shExecInfo.lpParameters = args.c_str();
shExecInfo.lpDirectory = NULL;
shExecInfo.nShow = SW_SHOW;
shExecInfo.hInstApp = NULL;
Затем запускаем через ShellExecuteEx:
if ( TRUE == ShellExecuteEx(&shExecInfo) ) {
  WaitForSingleObject( shExecInfo.hProcess, PROPER_TIMEOUT );
  CloseHandle( shExecInfo.hProcess );
}
Это все. Если на компьютере включен UAC, то появится диалог с вопросом пользователю — можно ли. Если пользователь одобрит, то ваш процесс запустится в God mode.

Комментировать в ВКонтакте