我并没有调试你的程序,不过根据你的代码猜你hook CreateProcessA也是不成功的,只是此程序并没用调用CreateProcessA而程序没有崩溃而已。
你new出来的代码没有设置可运行权限,这个在win7上会出问题(不可执行错误,xp是没问题的)。
再者VirtualProtect最后一个参数的问题,
If this parameter is NULL or does not point to a valid variable, the function fails.
MSDN上明确的说了,最后一个参数不能为NULL,否者程序直接错误返回。最后调用应该是
::VirtualProtect((LPVOID)TargetProc, bytescopy, dwOldProtect, &dwOldProtect); // 随便给他一个变量的地址