Исправь все ошибки в main 


#include <Windows.h>
#include <iostream>
#include <string>

// Функция для внедрения DLL в процесс
void InjectDLL(HANDLE hProcess, const std::wstring& dllPath)
{
	// Получаем адрес функции LoadLibraryW для загрузки DLL
	FARPROC pLoadLibraryW = GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryW");
	if (pLoadLibraryW == nullptr)
	{
		std::wcerr << L"Не удалось получить адрес функции LoadLibraryW" << std::endl;
		return;
	}

	// Выделяем память для пути к DLL в адресном пространстве процесса
	LPVOID dllPathBuffer = VirtualAllocEx(hProcess, nullptr, dllPath.size() * sizeof(wchar_t), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
	if (dllPathBuffer == nullptr)
	{
		std::wcerr << L"Не удалось выделить память в процессе" << std::endl;
		return;
	}

	// Записываем путь к DLL в память процесса
	SIZE_T bytesWritten;
	if (!WriteProcessMemory(hProcess, dllPathBuffer, dllPath.c_str(), dllPath.size() * sizeof(wchar_t), &bytesWritten) || bytesWritten != dllPath.size() * sizeof(wchar_t))
	{
		std::wcerr << L"Не удалось записать путь к DLL в память процесса" << std::endl;
		VirtualFreeEx(hProcess, dllPathBuffer, 0, MEM_RELEASE);
		return;
	}

	// Создаем удаленный поток для вызова функции LoadLibraryW с путем к DLL в качестве аргумента
	HANDLE hThread = CreateRemoteThread(hProcess, nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(pLoadLibraryW), dllPathBuffer, 0, nullptr);
	if (hThread == nullptr)
	{
		std::wcerr << L"Не удалось создать удаленный поток" << std::endl;
		VirtualFreeEx(hProcess, dllPathBuffer, 0, MEM_RELEASE);
		return;
	}

	// Ожидаем завершения удаленного потока
	WaitForSingleObject(hThread, INFINITE);

	// Получаем код завершения потока
	DWORD exitCode = 0;
	GetExitCodeThread(hThread, &exitCode);
	std::wcout << L"Удаленный поток завершился с кодом: " << exitCode << std::endl;

	// Освобождаем выделенную память и закрываем дескриптор удаленного потока
	VirtualFreeEx(hProcess, dllPathBuffer, 0, MEM_RELEASE);
	CloseHandle(hThread);
}

int main()
{
	// Запрашиваем у пользователя название процесса
	std::wstring processName;
	std::wcout << L"Введите название процесса: ";
		std::getline(std::wcin, processName);

	// Получаем идентификатор процесса
	DWORD pid = 0;
	HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	PROCESSENTRY32W processEntry;
	processEntry.dwSize = sizeof(PROCESSENTRY32W);
	if (Process32FirstW(hSnapshot, &processEntry))
	{
		do
		{
			if (processName == processEntry.szExeFile)
			{
				pid = processEntry.th32ProcessID;
				break;
			}
		} while (Process32NextW(hSnapshot, &processEntry));
	}
	CloseHandle(hSnapshot);

	if (pid == 0)
	{
		std::wcerr << L"Процесс с указанным названием не найден" << std::endl;
			return 1;
	}

	// Запрашиваем путь к DLL
	std::wstring dllPath;
	std::wcout << L"Введите путь к DLL: ";
	std::getline(std::wcin, dllPath);

	// Проверяем, существует ли DLL-файл
	if (GetFileAttributesW(dllPath.c_str()) == INVALID_FILE_ATTRIBUTES)
	{
		DWORD error = GetLastError();
		std::wcerr << L"Ошибка при проверке DLL-файла: " << error << std::endl;
		return 1;
	}

	// Открываем процесс с указанным идентификатором
	HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
	if (hProcess == nullptr)
	{
		std::wcerr << L"Не удалось открыть процесс: " << GetLastError() << std::endl;
		return 1;
	}

	// Внедряем DLL в процесс
	InjectDLL(hProcess, dllPath);

	// Закрываем дескриптор процесса
	CloseHandle(hProcess);

	return 0;
}