ты handle процесса не проверяешь? а то вдруг он нулевой.
плюс, этот процесс должен иметь PROCESS_VM_OPERATION статус, иначе VirtualAllocEx неизвестно что вернет
плюс у меня сомнения по поводу что функцию записать в процесс можно только простым копированием памяти. процесс имеет свой контекст, в котором определены контексты потоков и для каждого потока также есть своя таблица контекста. Если прога падает при вызове функции, то, скорее всего, создалась какая-то путаница с адресами (адреса в контексте твоего потока не соответствуют адресам в потоке, в который пытаешься писать).
можешь стоит попробовать скопировать память всего потока?