Borland C++ Builder FAQ
составлен по материалам форума на sources.ru

Составители: OlegGG, KAV, kenai



Почему, когда я использую функцию 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

Содержание
City 3D - Карта Ангарска со справочником организаций
Hosted by uCoz