#pragma once
/*
	Bliblioteka threads protection
	Autor: Regz.pl
 
	Przykład:
		threads_protection::add(CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)test_thread, NULL, 0, 0));
 
		while(true)
		{
			if(threads_protection::check())
				MessageBox(NULL, "Wykryto modyfikację kodu", "Błąd", MB_OK);
 
			Sleep(25);
		}
 
	Test:
		Uruchom Process Explorer i znajdź proces, wejdź w jego szczegóły i zatrzymaj/zakończ wątek test_thread a funkcja check zwróci prawdę.
*/
 
#include <windows.h>
#include <vector>
 
namespace threads_protection
{
	std::vector<HANDLE> threads;
 
	void add(HANDLE thread)
	{
		threads.push_back(thread);
	}
 
	int check()
	{
		if (threads.size() > 0)
		{
			for (int i = 0; i < (int)threads.size(); i++)
			{
				if (WaitForSingleObject(threads[i], 0) != WAIT_TIMEOUT || ResumeThread(threads[i]) == 1)
				{
					return 1;
				}
			}
		}
		return 0;
	}
}