windows2000下如何根据进程ID号获取该进程内存地址?
随后用哪种方式释放该内存地址??

解决方案 »

  1.   

    DWORD GetWindowThreadProcessId(
      HWND hWnd,             // handle to window
      LPDWORD lpdwProcessId  // process identifier
    );  //idHANDLE OpenProcess(
      DWORD dwDesiredAccess,  // access flag
      BOOL bInheritHandle,    // handle inheritance option
      DWORD dwProcessId       // process identifier
    );  //id-〉handleBOOL ReadProcessMemory(
      HANDLE hProcess,             // handle to the process
      LPCVOID lpBaseAddress,       // base of memory area
      LPVOID lpBuffer,             // data buffer
      DWORD nSize,                 // number of bytes to read
      LPDWORD lpNumberOfBytesRead  // number of bytes read
    );
      

  2.   

    HANDLE hWnd = ::OpenProcess (PROCESS_ALL_ACCESS,FALSE,545);//545是id号
    if(!hWnd){
    void *addr =::VirtualAllocEx(hWnd,0,THREADSIZE,MEM_COMMIT| MEM_RESERVE,PAGE_EXECUTE_READWRITE);//保留并提交一段内存。
    }
    if(!pRemoteThread){
    WriteProcessMemory(hWnd,pRemoteThread,&ThreadProc,THREADSIZE,0)//把数据写入进程
    }
      

  3.   

    上面的有点问题,看这个。HANDLE hWnd = ::OpenProcess (PROCESS_ALL_ACCESS,FALSE,545);//545是id号
    if(!hWnd){
    void *addr =::VirtualAllocEx(hWnd,0,THREADSIZE,MEM_COMMIT| MEM_RESERVE,PAGE_EXECUTE_READWRITE);//保留并提交一段内存。
    }
    if(!addr){
    WriteProcessMemory(hWnd,pRemoteThread,&ThreadProc,THREADSIZE,0)//把数据写入进程
    }
      

  4.   

    楼上两位的代码也许都是好用的,但是代码风格可能不太好。
    if(!hWnd) 应改为 if(hWnd != NULL)
    if(!addr) 应改为 if(addr != NULL)