Вам понадобится подключение API для защиты вашего процесса от прекращения. Захват API нелегкий, поскольку для него требуется либо встраивание инсталляции DLL, либо редактирование памяти, либо драйвер устройства. Прочитайте this, чтобы получить представление об этом.
К счастью, существуют существующие библиотеки, такие как this, к сожалению, я считаю это shareware. Я также нашел this, и вы, вероятно, можете найти более бесплатные материалы в Google.
Чтобы ответить на ваш первый вопрос, завершение системных процессов довольно просто. В C#, используя метод Process.Kill, вы можете завершить системные процессы и вызвать синий экран , если сделать это с помощью системной службы Windows, по крайней мере, на Windows 7 (я узнал это нелегко ...). Выполнение этой функции с помощью функции TerminateProcess() извне службы будет работать только при включении определенных разрешений: http://www.codase.com/search/call?name=AdjustTokenPrivileges - если я не ошибаюсь, вам нужно включить SE_DEBUG_NAME.
Чтобы отключить антивирус, у них обычно есть меню для этого :). Чтобы принудительно их закончить, вам придется использовать метод завершения, который они не подключают. This page описывает много.
Вот пример, который может привести к прекращению процессов, которые вы хотите, предполагая, что используемые функции API не подключены. НЕ ИСПОЛЬЗУЙТЕ ЭТО, ЕСЛИ ВЫ НЕ ЗНАЕТЕ, ЧТО ВЫ ДЕЛАЕТЕ, ЧТО ВЫ МОЖЕТЕ ПРИВЕСТИ К СИНИЙ ЭКРАН!
#include <stdio.h>
#include <windows.h>
#include <process.h>
#include <iostream>
using namespace std;
int EnablePrivilege(const char * lpPrivilegeName, BOOL bEnable)
{
TOKEN_PRIVILEGES Privileges;
ZeroMemory(&Privileges, sizeof(Privileges));
HANDLE hToken;
BOOL bResult;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return 1;
Privileges.PrivilegeCount = 1;
Privileges.Privileges[0].Attributes = (bEnable) ? SE_PRIVILEGE_ENABLED : 0;
if (!LookupPrivilegeValue(NULL, lpPrivilegeName,
&Privileges.Privileges[0].Luid))
{
CloseHandle(hToken);
return 2;
}
bResult = AdjustTokenPrivileges(hToken, FALSE, &Privileges, sizeof(Privileges), NULL, NULL);
CloseHandle(hToken);
return bResult;
}
int main()
{
cout << EnablePrivilege(SE_DEBUG_NAME, TRUE);
HANDLE procHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 500); // replace 500 with the PID of the process you want to terminate - can be taken from taskmanager.
TerminateProcess(procHandle, 0);
CloseHandle(procHandle);
}
Я думаю, что никто не собирается отвечать на этот вопрос. :) Может быть, хакер будет ... О, я имею в виду антивирусную часть ... –
Для меня это кажется очень важной вещью, которую нужно знать каждому программисту, связанному с Windows API, - почему только хакеры могут) ответьте на это? – jemper
Leniel: Ах, я вижу :) – jemper