ReadProcessMemory() - Probleme unter WOW64 ???



  • Hallo,
    ich habe ein Problem mit "verstaubten" Code unter einem W7-Pro (64 Bit). Der Code holt sich via native-API (Nebbett) die Kommandozeile eines anderen Prozesses, sieht ungefähr so aus (Fehlerprüfung hab ich hier ausgespart):

    status = m_pNtQueryInformationProcess(	hProcess,
    						ProcessBasicInformation,
                     				(PVOID)pbi,
    						sizeof(PROCESS_BASIC_INFORMATION),
    						&dwNeeded
    					);
    

    Danach sollte pbi.pebBaseAdress einen Pointer auf einen Environment-Block enthalten, der per ReadProcessMemory() gelesen werden kann.

    Als status kommt 0, also OK zurück, aber der pbi enthält als PebBaseAddress ein 0x00000000.
    Ein Kollege meinte, dass das vielleicht damit zusammenhängen könnte, dass das Programm mit 32-Bit unter einem 64-Bit Betriebssystem läuft.

    Ganz abwegig scheint mir das nicht zu sein, unter einem 32-Bit OS läuft das Prog OK.

    Hat von Euch jemand einen Tipp?



  • Der Grund ist dass dein Programm 32 bittig ist, und das andere dessen Daten ausgelesen werden sollen 64 bittig.
    Dadurch sind die Zeiger in den diversen structs bzw. auch die Zeiger-Parameter bei dir 32 Bit, für den anderen Prozess müssten sie aber 64 Bit sein. Kann also so direkt erstmal nicht gehen.

    Hier gibt es ein Beispiel wie man NtQueryInformationProcess bzw. NtWow64QueryInformationProcess64 in so einer Situation verwenden kann:
    http://stackoverflow.com/questions/7446887/get-command-line-string-of-64-bit-process-from-32-bit-process
    Dort wird ebenfalls der PEB ausgelesen, schätze das sollte man ohne all zu grossen Aufwand für deine Zwecke anpassen können.

    ps:
    Hier nochwas zu dem Thema
    http://www.drdobbs.com/embracing-64-bit-windows/184401966



  • Hallo & Danke hustbaer!

    Die Hintergrundinfo ist interessant!

    Ich hatte das Progrämmchen "gegen" eine Chrome-Instanz getestet, die in "Program Files (86)" zu Hause ist. Allerdings war das ein 64-Bit Instanz: da hat's nicht funktioniert. Jetzt ist auch klar, warum.

    Grüße!!


Log in to reply