Форум: "Система";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];
Внизкак дать привелегии на перегрузку или отключение? Найти похожие ветки
← →
truntaev (2003-10-10 21:52) [0]попытался из С взять пример но не заладилось с функцией
AdjustTokenPrivileges
Заранее признателен за помощь!
procedure TForm1.Button1Click(Sender: TObject);
var
hToken : THANDLE;
NewState: PTokenPrivileges;
prevs: PTokenPrivileges;
p: Pointer;
s: PChar;
t: TTokenPrivileges;
begin
s:="EWX_SHUTDOWN";
OpenProcessToken (GetCurrentProcess (), TOKEN_ADJUST_PRIVILEGES,hToken);
p:=AllocMem (sizeof(TOKEN_PRIVILEGES) + sizeof (LUID_AND_ATTRIBUTES));
NewState := PTokenPrivileges(p);
prevs:=NewState;
NewState.PrivilegeCount:=1;
LookupPrivilegeValue(#0,s,
NewState^.Privileges[0].Luid);
NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
t:=TTokenPrivileges(NewState^);
{выдается синтаксическая ошибка на этой функции}
{как с этим бороться?}
AdjustTokenPrivileges (hToken, LongBool(FALSE), t, 0, prevs, 0);
free (NewState);
CloseHandle (hToken);
ExitWindowsEx (EWX_REBOOT, 0);
end;
← →
Burmistroff (2003-10-11 23:07) [1]EnablePrivilege("SeShutdownPrivilege");
procedure EnablePrivilege(lpszPrivilege:LPCTSTR);// получение привилегий в Win NT
{
Enable privilege for Windows NT
}
var
hToken: THANDLE;
tp : TOKEN_PRIVILEGES;
luid: Int64;
tpPrevious: TOKEN_PRIVILEGES;
cbPrevious : DWORD;
begin
cbPrevious := sizeof(TOKEN_PRIVILEGES);
if LookupPrivilegeValue( Nil, lpszPrivilege, luid )=false then exit;
if( not OpenProcessToken( GetCurrentProcess(),
TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES,
hToken ) ) then exit;
tp.PrivilegeCount:= 1;
tp.Privileges[0].Luid := luid;
tp.Privileges[0].Attributes := (SE_PRIVILEGE_ENABLED);//0;
AdjustTokenPrivileges( hToken, FALSE, tp, sizeof(TOKEN_PRIVILEGES),
tpPrevious, cbPrevious );
if( GetLastError <> ERROR_SUCCESS ) then
else
CloseHandle( hToken );
end;
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c