TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
AdjustTokenPrivileges(...)
Структура TOKEN_PRIVILEGES
PLUID в LUID? (и вобще возможно ли это?)
PLUID SeDebugNameValue;
TOKEN_PRIVILEGES tkp;
PTOKEN_PRIVILEGES ptkp;
PDWORD ReturnLength;
BOOL Result;
static char DebugPrivilege[] = "SeDebugPrivilege";
//Добавляем привилегию SeDebugPrivilege
//Получаем токен нашего процесса
OpenProcessToken(h, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, hToken);
//Получаем LUID привилегии
if (LookupPrivilegeValue(NULL,DebugPrivilege, SeDebugNameValue) !=0)
{
CloseHandle(hToken);
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = SeDebugNameValue; //на эту строчку компилятор ругается
// Вот что выдает компилятор: binary '=' : no operator defined which takes a right-hand operand of type 'struct _LUID *' (or there is no acceptable conversion)
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//Добавляем привилегию к процессу
ptkp=&tkp;
AdjustTokenPrivileges(hToken, NULL, ptkp, sizeof(TOKEN_PRIVILEGES),ptkp, ReturnLength);
}
PLUID - это указатель на LUID, и все
Цитата: HexEdit
PLUID - это указатель на LUID, и все
Это я знаю, разобрался, но с помощью функции LookupPrivilegeValue я получаю указатель на этот самый LUID! А в структуре TOKEN_PRIVILEGES требуется просто LUID, а не указатель. А если я пишу в строке:
tkp.Privileges[0].Luid = *SeDebugNameValue;
прога компилируется, но вылетает при запуске данной функции!:confused:
(Или я брежу? Вообще-то о чём здесь идёт речь я не знаю и для чего эти функции нужны понятия не имею ;-) ).
Код:
Всё элементарно
if(!LookupPrivilegeValue( NULL, Privilege, &luid )) return FALSE;
//
// first pass. get current privilege setting
//
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = 0;
Спасибо за всем за помощь!