Поиск на сайте
Главная Журнал Форум Wiki DRKB Страны мира

Borland C++ Builder FAQ
Составлен по материалам форума на Исходниках.Ru
Содержание Последнее обновление: 14.02.2004

Почему, когда я использую функцию KillProcByPid из вопроса "Как "убить" процесс, зная его pid?", некотрые процессы не "помирают"?

Автор: OlegGG
Исходная ссылка: - - -

Да, такое может случиться, если попробовать "грохнуть", например, winlogon.exe.
Всё решается выполнением этой функции перед вызовом KillProcByPid:
bool SetDebugStatusForCurentProc()
{
HANDLE hToken;
LUID DebugValue;
TOKEN_PRIVILEGES tkp;

if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES |
TOKEN_QUERY,&hToken))
        {
        return false;
        }

if (!LookupPrivilegeValue((LPSTR) NULL,SE_DEBUG_NAME,&DebugValue))
        {
        return false;
        }

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

AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(TOKEN_PRIVILEGES),(PTOKEN_PRIVILEGES)
NULL,(PDWORD) NULL);

if (GetLastError() != ERROR_SUCCESS)
        {
        return false;
        }

return true;
}
PS перед тем как убивать винлогон сохраните ваши файлы
PPS если убить винлогон, будет ребут :D
PPPS за последствия я ответственности не несу!!!!!!!! :P

Основные разделы сайта


 

Реклама Мы предлагаем купить бумажные браслеты, невысокая цена, отменное качество.
Продажа цемента в мешках оптом http://ptps36.ru/tsementnyj-meshkovoj.html в Воронеже.