Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.11;
Скачать: CL | DM;

Вниз

Как получить права отладчика?   Найти похожие ветки 

 
GrayFace ©   (2005-05-10 16:01) [0]

Как получить права на применение OpenProcess к системным процессам (типа WinLogon)?


 
VMcL ©   (2005-05-10 16:10) [1]

Как-то так, если не ошибаюсь:

function EnableTokenPrivilege(const ATokenHandle: THandle; const APrivilege: String;
 const AEnable: Boolean): DWORD;

 function InternalEnableTokenPrivilege: DWORD;
 var
   Luid: TLargeInteger;
   Priv: TTokenPrivileges;
 begin
   if not LookupPrivilegeValue(nil, PChar(APrivilege), Luid) then
   begin
     Result := GetLastError;
     Exit;
   end;

   FillChar(Priv, SizeOf(Priv), 0);
   Priv.PrivilegeCount := 1;
   if AEnable then
     Priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
   Priv.Privileges[0].Luid := Luid;

   if not AdjustTokenPrivileges(ATokenHandle, False, Priv, 0, TTokenPrivileges(nil^),
     DWORD(nil^)) then
   begin
     Result := GetLastError;
     Exit;
   end;

   Result := ERROR_SUCCESS;
 end;

begin
 Result := InternalEnableTokenPrivilege;
 SetLastError(Result);
end;

function EnableTokenDebugPrivilege(const ATokenHandle: THandle; const AEnable: Boolean): DWORD;
const
 DebugPrivilege = "SeDebugPrivilege";
begin
 Result := EnableTokenPrivilege(ATokenHandle, DebugPrivilege, AEnable);
end;

function EnableProcessDebugPrivilege(const AProcessId: DWORD; const AEnable: Boolean): DWORD;
const
 ProcessDesiredAccess = PROCESS_QUERY_INFORMATION;
 TokenDesiredAccess = TOKEN_ADJUST_PRIVILEGES;
var
 ProcessHandle, TokenHandle: THandle;
begin
 ProcessHandle := OpenProcess(ProcessDesiredAccess, False, AProcessId);
 if ProcessHandle = 0 then
 begin
   Result := GetLastError;
   Exit;
 end;
 try
   if not OpenProcessToken(ProcessHandle, TokenDesiredAccess, TokenHandle) then
   begin
     Result := GetLastError;
     Exit;
   end;
   try
     Result := EnableTokenDebugPrivilege(TokenHandle, AEnable);
   finally
     CloseHandle(TokenHandle);
   end;
 finally
   CloseHandle(ProcessHandle);
 end;
end;


 
VMcL ©   (2005-05-10 16:11) [2]

P.S. Юзать например так:

EnableProcessDebugPrivilege(GetCurrentProcessId);


 
VMcL ©   (2005-05-10 16:11) [3]

>>VMcL ©   (10.05.05 16:11) [2]

Сорри, вот так:
EnableProcessDebugPrivilege(GetCurrentProcessId, True);


 
GrayFace ©   (2005-05-12 20:01) [4]

Спасибо. Попробую.



Страницы: 1 вся ветка

Текущий архив: 2005.07.11;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.027 c
1-1118870859
marri2005
2005-06-16 01:27
2005.07.11
Delphi и Word


3-1117694188
andrey123
2005-06-02 10:36
2005.07.11
Копирование БД


3-1116433390
Делфенок
2005-05-18 20:23
2005.07.11
Чтение информации из dbf


14-1118331206
Андрей Жук
2005-06-09 19:33
2005.07.11
Разрешается ли вам распивать спиртные напитки на рабочем месте?


3-1117358511
Nikitian
2005-05-29 13:21
2005.07.11
Проблемы со шрифтами в Tquery vs TQreport