Пытаюсь внедрить библиотеку в процесс, но вылетает окно системной ошибки с предложением отправить отчет. Исходник взял с 
www.rsdn.ru, немного поправил но несущественно:
BOOL InjectDll (HANDLE hProcess, char* lpszDllName)
{
	BYTE* p_code;
	INJECTORCODE cmds;
	DWORD wr, id;
	//зарезервировать память в процессе
	p_code = (BYTE*)VirtualAllocEx(hProcess, 0, sizeof(INJECTORCODE), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    if(p_code==NULL)
    {
		MessageBox(NULL, "Unable to alloc memory in remote process", "Error!", 0);
		return FALSE;
    }
	//инициализировать  машинный код
	cmds.instr_push_loadlibrary_arg = 0x68; //машинный код инструкции push
	cmds.loadlibrary_arg = (DWORD)(p_code + offsetof(INJECTORCODE, libraryname));
	cmds.instr_call_loadlibrary = 0x15ff; //машинный код инструкции call
	cmds.adr_from_call_loadlibrary = (DWORD)(p_code + offsetof(INJECTORCODE, addr_loadlibrary));
	cmds.instr_push_exitthread_arg  = 0x68;
	cmds.exitthread_arg = 0;
	cmds.instr_call_exitthread = 0x15ff; 
	cmds.adr_from_call_exitthread = (DWORD)(p_code + offsetof(INJECTORCODE, addr_exitthread));
	cmds.addr_loadlibrary = (DWORD)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
	cmds.addr_exitthread  = (DWORD)GetProcAddress(GetModuleHandle("kernel32.dll"),"ExitThread");
	if(strlen(lpszDllName)>99)
	{
		MessageBox(NULL, "Dll Name too long", "Error!", 0);
		return FALSE;
	}
	strcpy((char*)cmds.libraryname, lpszDllName );
	//записать машинный код по зарезервированному адресу
	WriteProcessMemory(hProcess, p_code, &cmds, sizeof(cmds), &wr);
	//выполнить машинный код
	HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (unsigned long (__stdcall *)(void *))p_code, NULL, 0, &id);
	//HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (DWORD (__stdcall *)(void*))p_code, NULL, 0, &id);
	//ожидать завершения удаленного потока
	WaitForSingleObject(hThread, INFINITE);
	//освободить память
	if (hThread == NULL)
	{
		return FALSE;
	}
	VirtualFreeEx(hProcess, (void*)p_code, sizeof(cmds), MEM_RELEASE);
	CloseHandle(hThread);
	return TRUE;
}
ну а вызывается функция:
STARTUPINFO StartInfo;
PROCESS_INFORMATION ProcInfo;
int main ( int argc, char* argv[] )
{
	ZeroMemory(&StartInfo, sizeof(STARTUPINFO));
	StartInfo.cb = sizeof(STARTUPINFO);
	CreateProcess (NULL, "notepad.exe", NULL, NULL, FALSE, 0, NULL, NULL, &StartInfo, &ProcInfo);
	Sleep(2000);
	InjectDll(ProcInfo.hProcess, "TestDll.dll");
	return 0;
}