Avatar billede krismort Nybegynder
17. maj 2006 - 23:31 Der er 3 kommentarer

open process virker ikke

Er det ikke muligt at bruge openprocess på denne måde ?
Jeg vil bare læse i med process api'en i windows.

    long i =1234;

    // resolve dette process id
    DWORD*    m_pids= NULL;;   
    DWORD        m_count;       
    DWORD        m_current;   
    m_current = (DWORD)-1;
    m_count = 0;
    DWORD nalloc = 1024;
    do {
        delete [] m_pids;
        m_pids = new DWORD [nalloc];
        if ( EnumProcesses(m_pids, nalloc*sizeof(DWORD), &m_count) ) {
            m_count /= sizeof(DWORD);
            m_current = 1; // important: skip IDLE process with pid=0.
        }
    } while (nalloc <= m_count);
    DWORD pid= m_pids && m_current < m_count ? m_pids[m_current++] : 0;

   
    HANDLE hProc = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pid );
    cout << "hProc = " << hProc << endl;

    long a_addr=1;
    SIZE_T bytesread =0;
    ReadProcessMemory( hProc, 0, &i, 4, &bytesread );
    cout << bytesread << endl;
Avatar billede bertelbrander Novice
17. maj 2006 - 23:45 #1
Ja og nej.

Det er ikke alle processer der lader sig åbne.
Den første process er på min PC idag "System" og den vil ikke lade sig åbne (Windows XP).

Andre processer kan godt åbnes, og har man en gyldig adresse kan man sikkert også læse.
Avatar billede bertelbrander Novice
18. maj 2006 - 00:00 #2
Dette giver success for flere af mine processer:

#include <iostream>
#include <windows.h>
#include <psapi.h>

using namespace std;

int main()
{
  // resolve dette process id
  DWORD*    m_pids= NULL;;
  DWORD        m_count;
  DWORD        m_current;
  m_count = 0;
  DWORD nalloc = 1024;
  do
  {
      delete [] m_pids;
      m_pids = new DWORD [nalloc];
      if( EnumProcesses(m_pids, nalloc*sizeof(DWORD), &m_count))
      {
        m_count /= sizeof(DWORD);
      }
  }
  while (nalloc <= m_count);

  DWORD pid;

  for(m_current = 0; m_current < m_count; m_current++)
  {
      pid = m_pids[m_current];

      HANDLE hProc = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pid );
      if(hProc)
      {
        long a_addr= 0x40000;
        long i = 0;
        SIZE_T bytesread = 0;
        if(ReadProcessMemory( hProc, &a_addr, &i, 4, &bytesread))
        {
            cout << "Success: " << bytesread << ", " << pid << ", " << i << endl;
        }
      }
  }
}
Avatar billede krismort Nybegynder
18. maj 2006 - 13:57 #3
Fandt kom op med denne løsning

    long i =1234;

    long a_addr=1;
    SIZE_T bytesread=0;
    long buffer;
    ReadProcessMemory( GetCurrentProcess(), &i, &buffer , 4, &bytesread );
    cout << "buffer : " << buffer << endl;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester