Merwürdiges Problem mit handle



  • Hi leutz!

    Wie der Titel schon sagt, habe ich ein Problem an ein handle zu kommen.
    Hier ein bisschen Code von meiner CProcess Klasse:

    CProcess.H

    class CProcess
    {
    public:
    void SetProcessData(LPCTSTR ProzessKlassenName, LPCTSTR ProzessFensterName);
    
    private:
    HWND GetHwnd(LPCTSTR lpClassName, LPCTSTR lpWindowName);
    DWORD GetPID(HWND hWnd);
    HANDLE GetHANDLE();
    
    HWND hWnd;
    DWORD PID;
    HANDLE hProc;
    };
    

    CProcess.cpp

    void CProcess::SetProcessData(LPCTSTR ProzessKlassenName, LPCTSTR ProzessFensterName)
    {
    	hWnd  = GetHwnd(ProzessKlassenName, ProzessFensterName);
    	PID   = GetPID(hWnd);
    	hProc = GetHANDLE();
    }
    
    HWND CProcess::GetHwnd(LPCTSTR lpClassName, LPCTSTR lpWindowName)
    {
    	return FindWindow(lpClassName, lpWindowName);
    }
    
    DWORD CProcess::GetPID(HWND hWnd)
    {
         DWORD Temp;
         GetWindowThreadProcessId(hWnd, &Temp);
         return Temp;
    }
    
    HANDLE CProcess::GetHANDLE()
    {
         return OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
    }
    

    In der Funktion GetHANDLE bekomme ich aber kein richtiges Handle zurück!
    Ich bekommt zwar eins, aber es scheint ungültig zu sein, das es auch beim Neustarten der Zielanwendung immer gleich ist.
    Ich bekomme nichtmal eine fehlermeldung, außer wenn ich mit WriteProcessMemory darauf zugreifen will, weil das handle ja anscheind ungültig ist.

    Ich kann mir einfach nicht erklären, was ich falsch gemacht habe.
    Wisst ihr einen rat? Danke im Vorraus



  • a) der handle-WEert ist nicht zufällig INVALID_HANDLE_VALUE (== -1)?
    b) GetLastError() nach GetHandle() ?
    c) GetlastError() nach writeprocessmemory?
    d) Hast du genügend rechte, um den prozeß mit allen rechten zu öffnen?



  • - Der Handlewert ist jedesmal 0x000007b0.
    - GetLastError nach handle ergab 0.
    - GetLastError nach WriteProcessMemory ergab 229
    "Nur ein Teil der ReadProcessMemory- oder WriteProcessMemory-Anforderung
    wurde abgeschlossen." (Die meldung wird wahrscheinlich wegen des
    ungültigen handles kommen.)
    - Ich habe Windows XP und keinerlei Rechte eingeschränkt.



  • Das Handle sieht gut aus (sonst würdest du auch einen anderen Fehler bekommen). Windows recyclethandle-Werte, ist also nicht verwunderlich.

    Ist der Zielspeicher schreibbar? (kannst du mit VirtualQueryEx rausfinden)

    Gib mal bei WriteprocessMemory den "lpNumberOfBytesWritten" an - was kommt da zurück?



  • gar nix, er scheint die funktion abzubrechen.


Log in to reply