Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как запустить в отладочном режиме? [D6, Win2k]


ers ©   (2003-01-17 09:28:00) 

Народ!
Как можно запустить какуюнибудь прогу с отладочными привелегиями, а ещё лучше если саму себя запустить с этими привелегиями.....
И вопрос ещё один! Если мы запустили прогу с отладочными привелегиями, то родитель должен постоянно висеть или нет?


Nick_N_A   (2003-01-18 05:26:00) [1]

Допустим нашли мы прогу, стартовали, подготовили,
но у меня получается ее только запускать и останавливать,
Suspend/Resume, а как просмотреть переменные/память, и т д ?
GetAce вроде тепло, но неработает . . .


SeF   (2003-01-18 00:38:00) [2]

опс.. :)

var
hToken:THandle;
SeDebugNameValue:Int64;
tkp:TOKEN_PRIVILEGES;
ReturnLength:Cardinal;
hProcess:THandle;
pfnExitProcess: Pointer;
hInstance: Integer;
hThread: DWORD;

begin
if not OpenProcessToken( GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken )
then exit;
...



SeF   (2003-01-18 00:36:00) [3]

Установка/снятие debug привилегии:

if not OpenProcessToken( GetCurrentProcess(),
var
hToken:THandle;
SeDebugNameValue:Int64;
tkp:TOKEN_PRIVILEGES;
ReturnLength:Cardinal;
hProcess:THandle;
pfnExitProcess: Pointer;
hInstance: Integer;
hThread: DWORD;

begin
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken )
then exit;

// Получаем LUID привилегии
if not LookupPrivilegeValue( nil, "SeDebugPrivilege", SeDebugNameValue )
then begin
CloseHandle(hToken);
exit;
end;

tkp.PrivilegeCount:= 1;
tkp.Privileges[0].Luid := SeDebugNameValue;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

// Добавляем привилегию к нашему процессу
AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength);
if GetLastError()<>ERROR_SUCCESS then exit;

// делаем что хотим

// Удаляем привилегию
tkp.Privileges[0].Attributes := 0;
AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength);
if GetLastError() <> ERROR_SUCCESS
then exit;
end;


ers   (2003-01-17 16:26:00) [4]

А как конкретно это осуществить?


SeF   (2003-01-17 11:17:00) [5]

если себя то "включи" себе debug привилегию (если запускается под админом)


Digitman   (2003-01-17 09:30:00) [6]

см. CreateProcess[Ex] c флагом DEBUG_PROCESS


Наверх

Титульная страница Поиск, карта сайта Написать письмо