程序创建进程时钩子注入成功 直接打开注入成功但是不执行,该怎么解决

程序创建进程时钩子注入成功 直接打开注入成功但是不执行
STARTUPINFOA si={0};
LPSTARTUPINFOA lpStartupInfo =&si;

PROCESS_INFORMATION pi={0} ;
LPPROCESS_INFORMATION stProcInfo = π
BOOL bCreate;  

LPTHREAD_START_ROUTINE lda;
char path[MAX_PATH] = {'\0'};
lda = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(_T("Kernel32.dll")),"LoadLibraryA");
#if 1
GetStartupInfo(lpStartupInfo);
  bCreate = CreateProcess(NULL,"TmForever.exe",NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,"",lpStartupInfo,stProcInfo);


if(bCreate)
{
BOOL bWrite;
HANDLE hProcess = stProcInfo->hProcess;
LPVOID pMem = VirtualAllocEx(hProcess,NULL,MAX_PATH,MEM_COMMIT,PAGE_READWRITE);
bWrite = WriteProcessMemory(hProcess,pMem,"HookDx.dll",MAX_PATH,NULL);
if(bWrite)
{
HANDLE h = CreateRemoteThread(hProcess,NULL,0,(DWORD (__stdcall *)(void *))lda,pMem,NULL,NULL);
Sleep(200);
CloseHandle(h);
}
CloseHandle(hProcess);
ResumeThread(stProcInfo->hThread);
CloseHandle(stProcInfo->hThread);


}
else  
printf("CreateProcess() fail!\n");
#else
HWND hProcess0 = ::FindWindow(NULL,"TrackMania Nations Forever");
HANDLE hProcess;
HANDLE hThread;
int tmp;
DWORD dwNumberOfBytesRead;
DWORD dwProcessId = 0;  
DWORD dwThreadId = 0;  

dwThreadId = GetWindowThreadProcessId(hProcess0,&dwProcessId);  
DWORD dwCurrThreadId = ::GetCurrentThreadId ();



hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessId);  

hThread = OpenThread(THREAD_ALL_ACCESS,FALSE,dwThreadId);

...
#endif

执行if分支 创建目标进程 注入钩子成功 执行没有问题
但是else分支 我先打开要注入的目标 然后注入钩子 注入成功但是执行不了
请问哪里出了问题

------解决方案--------------------
难道是权限问题,用CreateProcess是子进程的缘故?OpenXX,FindXX等函数的返回值都判断过了吗
------解决方案--------------------
HookDx.dll路径对不对
------解决方案--------------------
C/C++ code

LPVOID pMem = VirtualAllocEx(hProcess,NULL,MAX_PATH,MEM_COMMIT,PAGE_EXECUTE_READWRITE);