Убийство процесса из Dll'ки.
Как убить определённый процесс из DLL'ки? Пробовал ТerminateProcess, но ему, насколько я понял, нужен HANDLE процесса, да ещё и с привилегиями, и ExitCode. Из того что я знаю про данную ф-цию - её нежелательно вызывать из Dll'ок. Ничего другого я не смог найти. Вообщем если кто знает - подскажите.
Конечно нежелательно. ТerminateProcess - тупо убивает процесс, все твои очереди просто убьются, у экземплров классов невызовуться деструкторы, ресурсы системы могут тоже неосвободиться. И неважно где ты вызываешь ТerminateProcess - собственно из кода проги, или из DLL.
Но раз нужно вызывать TerminateProcess из DLL, а это, насколько я понимаю, означает, что DLL уже загружена в адресное пространство нужного процесса (того которое надо убить), то в качестве HANDLE передавай ::GetCurrentProcess(). Ну а для убийства собственного процесса и прав никаких ненужно...
Насчёт ExitCode. Он как правило никем не анализируется. Но он может анализироваться родительским процессом для результата последующих действий. Например, среда разработки VC++ при запуске проекта из-под отладчика сначала запускает дочерний процесс - компилятор, если он отработался без ошибок - запустится линковщих, если и сборка прошла без ошибок - запустится собственно сам проект.
Ещё раз замечу, испольовать TerminateProcess - это неправильно!