Пробую этот пример. Срабатывает только 1 раз потом DbgUiDebugActiveProcess начинвет выдавать ошибки. Кто сталкивался? Я по форуму вижу что такая проблема есть, но как ее решить никто пока не написал. 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;
iramoscow Даже если бы знал этот язык, не стал бы смотреть код! Потому что не красиво оформлен, юзай теги кода!
EvilsInterrupt а по делу можно ? Итак 2 новости: одна хорошая и одна плохая. На 1 DebugObject можно повесить множество процессов при помощи DbgUiDebugActiveProcess и потом их всех прибить. Плохая: невозможно создать DebugObject после его завершения. Т.е. объект создать можно ZwCreateDebugObject, но вот подключить его нельзя (( Кто-нибудь по теме сталкивался ?