//进程句柄的获得
HANDLE   hProc   =   OpenProcess(PROCESS_VM_READ,FALSE,nPID);//(HANDLE)0x88fd45b0; DWORD   dwRet    =   -1;  
DWORD*   dwAddr   =   (DWORD*)((DWORD)GetCommandLine + 1);//第2个字节开始才是我们要读的地址
TCHAR   tcBuf[BUFFER_LEN]   =   {0};  
DWORD   dwRead   =   0;  

BYTE   szCmdLine[BUFFER_LEN];
ZeroMemory(szCmdLine,   sizeof(szCmdLine));
        ReadProcessMemory(hProc,(LPVOID)dwAddr,&dwAddr,4,&dwRead);//hProc是已经获取到的进程句柄
        DWORD errorId1 = GetLastError();获得的错误为:299,查看错误说明:仅完成部分的 ReadProcessMemoty 或 WriteProcessMemory 请求。 我是想读取notepad的进程的内存,然后读取命令行参数。请大家帮我瞧瞧,万分感谢。

解决方案 »

  1.   

    (hProc,(LPVOID)dwAddr,&dwAddr,4,&dwRead);你确定第三个参数没问题么?
      

  2.   

    BYTE    tmpBuf[MAX_PATH];
    ZeroMemory(tmpBuf,MAX_PATH);
    我声明一个byte数组,然后作为第三个参数,也是错误。我这是照着别人代码写的。
    求兄弟们给我答疑解惑,万分感谢
      

  3.   

    改为:DWORD   dwAddr   =   *(DWORD*)((DWORD)GetCommandLine + 1);
    会提示998的错误:错误说明:内存分配访问无效。 
    这是看的别人的帖子写的,原先是这么写的,呵呵,感觉我修改后更贴切。
    http://topic.csdn.net/u/20070309/10/e6010155-54fd-4d3c-96e4-129014838710.html?686083532这是帖子的链接。请大虾们帮帮我吧。困扰!
      

  4.   

    你确定2个进程的GetCommandLine返回的地址是一致的?如果不一样,那么你在一个进程取到的地址在另一个可能就悲剧了。