c++ modulebase finden

striker159

Lt. Junior Grade
Registriert
Dez. 2008
Beiträge
332
hallo,
erstmal vorweg, c++ programmiere ich noch nicht so lange. dazu benutze ich ms visual studio 2010.

ich möchte mir von einem prozess, dessen processID ich habe, die basisadresse eines moduls holen.
dazu benutze ich diesen code

Code:
DWORD GetModuleBase(wchar_t* lpModuleName, DWORD dwProcessId) {
        MODULEENTRY32 lpModuleEntry = {0};
        HANDLE hSnapShot = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwProcessId );
        if(!hSnapShot)
        return NULL;
        lpModuleEntry.dwSize = sizeof(lpModuleEntry);
		cout<<GetLastError()<<endl;
        BOOL bModule = Module32First( hSnapShot, &lpModuleEntry );
		cout<<GetLastError()<<endl;
        while(bModule)
        {
            if(!wcscmp(lpModuleEntry.szModule, lpModuleName ) )
            {
                CloseHandle( hSnapShot );
                return (DWORD)lpModuleEntry.modBaseAddr;
            }
            bModule = Module32Next( hSnapShot, &lpModuleEntry );
        }
        CloseHandle( hSnapShot );
        return NULL;

    };

das problem ist jetzt, dass Module32First false zurück gibt und deshalb garnicht erst die schleife durchlaufen wird.
error code ist 6 , also invalid handle. die processID ist auf jeden fall korrekt, sowohl mein programm als auch der taskmanager geben sie richtig an.

woran kann es dann scheitern?
Ergänzung ()

nunja, das war ein ziemlich doofes rechteproblem.
ich muss mein programm als admin ausführen, dann klappt alles :)
 
Zurück
Oben