#include <iostream>
#include <memory>

#include <windows.h>

template <typename T, typename Del = std::default_delete<T>>
inline auto scoped(T *t, Del&& del = std::default_delete<T>)
{
	return std::unique_ptr<T, Del>{t, del};
}

HANDLE openfile(char* filename)
{
	HANDLE hFile = CreateFileA(filename,
		GENERIC_READ,
		FILE_SHARE_READ,
		nullptr,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		nullptr);
	return hFile;
}

struct closefile
{
	void operator()(HANDLE h) { CloseHandle(h); }
};

void* load_from_disk(char* filename)
{
	auto file = scoped(openfile(filename), closefile());
	auto size = GetFileSize(file.get(), nullptr);
	auto buff = scoped(new char[size], std::default_delete<char[]>());

	return nullptr;
}

int main()
{
	load_from_disk("main.exe");
}