DbgUiDebugActiveProcess одноразовый?

Тема в разделе "WASM.BEGINNERS", создана пользователем Rihter, 8 мар 2006.

  1. Rihter

    Rihter New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2006
    Сообщения:
    76
    Почему не знаю,но эта ф-ция убивает любой процесс один раз





    Function DebugKillProcess(ProcessId: dword): boolean;

    var

    pHandle: dword;

    myPID: dword;

    HandlesInfo: PSYSTEM_HANDLE_INFORMATION_EX;

    r: dword;

    begin

    Result := false;

    myPID := GetCurrentProcessId();

    if not EnableDebugPrivilege() then Exit;

    //Подключаемся к системе отладки.

    if DbgUiConnectToDbg() <> STATUS_SUCCESS then Exit;

    pHandle := OpenProcessEx(ProcessId);

    //Включаем отладку процесса

    if DbgUiDebugActiveProcess(pHandle) <> STATUS_SUCCESS then Exit;

    //Надо найти полученый DebugObject

    HandlesInfo := GetInfoTable(SystemHandleInformation);

    if HandlesInfo = nil then Exit;

    for r := 0 to HandlesInfo^.NumberOfHandles do

    if (HandlesInfo^.Information[r].ProcessId = myPID) and

    (HandlesInfo^.Information[r].ObjectTypeNumber = $8) //DebugObject

    then begin

    //Зкрываем DebugObject, что приводит к уничтоженю процесса

    CloseHandle(HandlesInfo^.Information[r].Handle);

    Result := true;

    break;

    end;

    VirtualFree(HandlesInfo, 0, MEM_RELEASE);

    end;



    Код (Text):
    1.