一个Hook API的小程序,在用WriteProcessMemory把Hook代码写到远程进程的时候出错,GetLastError返回代码87(参数错误),求解决方法! 
WriteProcessMemory(hTargetProcess, (LPVOID)dwFuncAddr, (LPCVOID)HookSend, 8192, NULL); 《=====就是这句错误
HANDLE hTargetProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwHookProcId);《=====打开进程
dwFuncAddr = (DWORD)VirtualAllocEx(hTargetProcess, NULL, 8192, 
  MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE);
           《===========申请远程线程内存ps:这个程序参考另一个程序写的,那个程序运行在命令行模式下,正常运行,我想加个界面就不行了

解决方案 »

  1.   

    ERROR_INVALID_PARAMETER
    87 The parameter is incorrect. 调试查看你的参数是否传递正确。另外WriteProcessMemory的那个进程要有PROCESS_VM_WRITE、PROCESS_VM_OPERATION权限
      

  2.   

    同意楼上
    BOOL WriteProcessMemory( 
      HANDLE hProcess, 
      LPVOID lpBaseAddress, 
      LPVOID lpBuffer, 
      DWORD nSize, 
      LPDWORD lpNumberOfBytesWritten 
      );
      

  3.   

    楼主你仔细看看MSDN上关于WriteProcessMemory的说明,第3个参数dwFuncAddr要求是一个LPVOID,而你传递的是一个LPCVOID,一个常量VOID指针是不能被cast成LPVOID的,你把(LPCVOID)HookSend改成(LPVOID)HookSend看看? 
      

  4.   

    是WriteProcessMemory返回FALSE吗?OpenProcess和VirtualAllocEx都成功了吗?把这段代码完整贴出来(附件资源不存在)。
      

  5.   


    我是用过LPVOID的,但是不行,才改LPCVOID的,以为我看到一个能调试通的程序用LPCVOID没问题。而OpenProcess我是设置了all access 的权限的。
    不会弄附件,只好上传到纳米盘,麻烦帮看看!
    hookSocket.rar
      

  6.   

    为了对比,我把命令行模式下调试成功的程序也放上来。
    hookWs32.rar
      

  7.   

    struct RemoteParam结构定义中的WCHAR szFileName[24]太短了,很容易就被wcscpy(RParam.szFileName, szSaveFileName);这句代码写越界,导致dwFuncAddr的值被修改。字符串复制前要检查源buffer和目标串的长度。建议把WCHAR szFileName[24]改为WCHAR szFileName[MAX_PATH]