Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Структура TOKEN_PRIVILEGES

21K
16 апреля 2007 года
Gais
23 / / 28.03.2007
Помогите плиз не могу разобраться как переделать переменную типа
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);


}
334
16 апреля 2007 года
HexEdit
809 / / 27.07.2006
PLUID - это указатель на LUID, и все
21K
16 апреля 2007 года
Gais
23 / / 28.03.2007
Цитата: HexEdit
PLUID - это указатель на LUID, и все



Это я знаю, разобрался, но с помощью функции LookupPrivilegeValue я получаю указатель на этот самый LUID! А в структуре TOKEN_PRIVILEGES требуется просто LUID, а не указатель. А если я пишу в строке:
tkp.Privileges[0].Luid = *SeDebugNameValue;
прога компилируется, но вылетает при запуске данной функции!:confused:

3.3K
16 апреля 2007 года
ShadyMan
191 / / 15.07.2006
Подожди, получается у тебя в программе отведена память под указатель на LUID, но на сам LUID память не отведена, хотя функция LookupPrivilegeValue, очевидно, на это расчитывает. В справке же чётко написано, что третьим параметром должен быть адрес переменной, в которую она и запишет LUID. А в твоей программе такой переменной вообще нет. Так что давай объявляй не PLUID, а LUID, а в функцию передавай его адрес и всё будет ОК.
(Или я брежу? Вообще-то о чём здесь идёт речь я не знаю и для чего эти функции нужны понятия не имею ;-) ).
534
17 апреля 2007 года
HarryAxe
448 / / 19.01.2006
 
Код:
TOKEN_PRIVILEGES tp;
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
    AdjustTokenPrivileges(...)

Всё элементарно
21K
17 апреля 2007 года
Gais
23 / / 28.03.2007
Нашел решение на microsoft.com Там с объяснением функции был пример:

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;

Спасибо за всем за помощь!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог