Показать сообщение отдельно

  #12  
Старый 13.11.2006, 14:24
TaNkist
Участник форума
Регистрация: 06.04.2006
Сообщений: 257
Провел на форуме:
367179

Репутация: 76
По умолчанию

Цитата:
Сообщение от EST a1ien  
Дак а смогу ли я использовать
ReadProcessMemory/WriteProcessMemory к так созданому процессу?
Если ты не владелец его и у тебя нет debuge привелегий то скорее всего нет
Получение debugePrivelege
Код:
function EnableDebugPrivilege(const Value: Boolean): Boolean;
const
  SE_DEBUG_NAME = 'SeDebugPrivilege';
var
  hToken: THandle;
  tp: TOKEN_PRIVILEGES;
  d: DWORD;
begin
  Result := False;
  if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken) then
  begin
    tp.PrivilegeCount := 1;
    LookupPrivilegeValue(nil, SE_DEBUG_NAME, tp.Privileges[0].Luid);
    if Value then
      tp.Privileges[0].Attributes := $00000002
    else
      tp.Privileges[0].Attributes := $80000000;
    AdjustTokenPrivileges(hToken, False, tp, SizeOf(TOKEN_PRIVILEGES), nil, d);
    if GetLastError = ERROR_SUCCESS then
    begin
      Result := True;
    end;
    CloseHandle(hToken);
  end;
end;
Разнеснения по поводу работы функции:
Функция включает/выключает SeDebugPrivilege. Зачем эти привилегии нужны? На досуге попробуй записать что-нибудь в память системных процессов, например, в lsass.exe, без таких привилегий ты ничего сделать не сможешь.
Насчет самой функции:
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken) - получаем токен нашего процесса.
LookupPrivilegeValue(nil, SE_DEBUG_NAME, tp.Privileges[0].Luid); - Получаем LUID привилегии
AdjustTokenPrivileges(hToken, False, tp, SizeOf(TOKEN_PRIVILEGES), nil, d); - добавляем (точнее включаем) привилегию к нашему процессу

Последний раз редактировалось TaNkist; 13.11.2006 в 16:46..
 
Ответить с цитированием