Получение списка привелегий пользователя
От: Аноним  
Дата: 13.05.03 10:23
Оценка:
Пытаюсь следующим способом:

(Слеплено из различных примеров, собранных в инете.)

Есть buffer, заполненный функцией GetTokenInformation();
Заполнен, вроде, правильно: buffer.PrivilegesCount = 17, есть какие-то атрибуты. Дальше:



buffer:=nil;
length:=0;
OpenProcessToken(GetCurrentProcess(),
   TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token)
b:=GetTokenInformation(token, TokenPrivileges, buffer, length, length);
 while (not b) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) do
     begin
        ReallocMem(buffer, length);
        b:=GetTokenInformation(token, InformationClass, buffer, length, length);
 end;


for i:=0 to buffer.PrivilegeCount-1 do
  begin
   if not  LookupPrivilegeName( nil, buffer.Privileges[i].Luid, ucPrivilegeName, PrivilegeName) then
        raise Exception.Create(SysErrorMessage(GetLastError));
// Здесь выскакивает рантайм ошибка 

   if not LookupPrivilegeDisplayName( nil, ucPrivilegeName,
                  ucDisplayName, dwDisplayName, dwLangId ) then
        raise Exception.Create(SysErrorMessage(GetLastError));
   
   Тут идет вывод названий привелегий (там, в TMemo.Lines.Add() например)
.....................................
end;

Код вылетает на функции LookupPrivilegeName с ошибкой A specified privilege does not exist. То-есть, неверный buffer.Privileges[i].Luid??? Если ошибка да, то скажите как правильно пользоваться функцией GetTokenInformation()?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.