BOOL Inject(DWORD pid)
{
	if (0 == pid)
		return FALSE;

	HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
	if (NULL == hProcess)
		return FALSE;

	PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryA");
	if (NULL == pfnThreadRtn)
		return FALSE;

	LPVOID libname = VirtualAllocEx(hProcess, NULL, lstrlen(dllName),  MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
	if (NULL == libname)
		return FALSE;

	BOOL written = WriteProcessMemory(hProcess, libname, dllName, lstrlen(dllName), NULL);
	if (FALSE == written)
		return FALSE;
	TCHAR buffer[128];
	ZeroMemory(buffer, 128);
	ReadProcessMemory(hProcess, libname, buffer, 128, NULL);
	MessageBox(NULL, buffer, TEXT("Info"), MB_OK);

	HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pfnThreadRtn, libname, 0, NULL);
	if (NULL == hThread)
		return FALSE;

	CloseHandle(hProcess);
	return TRUE;
}
