Исходные условия: Windows XP, известные логин и пароль админа.
Цель: Научить программу поднимать себе привилегии.
Все оказалось достаточно просто:
#include "windows.h"
//Поднять права до админских
bool logonAsAdmin()
{
LPTSTR lpszUsername = L"Admin"; // логин админа
LPTSTR lpszDomain = NULL; // домен
LPTSTR lpszPassword = L"passw"; // пароль админа
HANDLE hToken; //маркер доступа (токен)
//Получаем токен админа
if (!LogonUser(lpszUsername, lpszDomain, lpszPassword, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, &hToken))
return false;
//Прикидываемся админом
if (!ImpersonateLoggedOnUser(hToken))
return false;
return true;
}
* This source code was highlighted with Source Code Highlighter.
Но тут надо помнить о дыре, которую дает данный код. Дело в том, что в программе может быть код, дающий пользователю доступ к файловой системе с правами админа. Например, если в вашей программе есть диалог открытия файла и вы дали своей программе админский доступ, то такой доступ получит и пользователь программы.Поэтому, перед тем как вызвать диалог открытия/сохранения файла - верните программе юзерский уровень и поднимите его обратно после работы с диалогом.
Или давайте админский уровень своей программе только на очень короткий срок и немедленно возвращайте его обратно, как только надобность в нем отпадет.
Комментариев нет:
Отправить комментарий