Пытаюсь следующим способом:
(Слеплено из различных примеров, собранных в инете.)
Есть 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()?