Module Handle



  • hey ich will auf die memory address von einer dll eines Processes kommen habe dazu 2 Funktionen gefunden:

    DWORD GetModuleBase(LPSTR lpModuleName, DWORD dwProcessId)
    {
       MODULEENTRY32 lpModuleEntry = {0};
       HANDLE hSnapShot = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwProcessId );
    
       if(!hSnapShot)
          return NULL;
       lpModuleEntry.dwSize = sizeof(lpModuleEntry);
       BOOL bModule = Module32First( hSnapShot, &lpModuleEntry );
       while(bModule)
       {
          if(!strcmp( lpModuleEntry.szModule, lpModuleName ) )
          {
             CloseHandle( hSnapShot );
             return (DWORD)lpModuleEntry.modBaseAddr;
          }
          bModule = Module32Next( hSnapShot, &lpModuleEntry );
       }
       CloseHandle( hSnapShot );
       return NULL;
    }
    
    int GetProcessID(char ProcessExe)
    {
    	HANDLE hSnap, hTemp;
    	PROCESSENTRY32 pe;
    	pe.dwSize = sizeof(PROCESSENTRY32);
    
    	//EnableDebugPrivilege();
    	hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    
    	if(Process32First(hSnap, &pe))
    	{
    		do
    		{
    			hTemp = OpenProcess(PROCESS_ALL_ACCESS, 0, pe.th32ProcessID);
    			if(hTemp)
    			{
    				if (pe.szExeFile == ProcessExe)
    				{
    					return ;
    				}
    			}
    		}
    		while(Process32Next(hSnap, &pe));
    	}
    	return 0;
    }
    

    jedoch erhalte ich Fehler:
    1. ´strcmp( lpModuleEntry.szModule, lpModuleName ) wchar ist mit dem Typ const char inkompatibel
    2. pe.szExeFile == ProcessExe Operandentypen sind inkompatibel ("WCHAR *" und "char")

    ich benutze Microsoft Visual C++ 2010 Express



  • Geh in die Projekteinstellungen (Menü -> Projekt -> ...-Eigenschaften)
    und dort auf die Seite "Allgemein"

    Stell dort den Zeichensatz von "Unicode" auf "Multibyte" um.



  • omg wasn scheiß!!!
    DANKE



  • Besser:

    include <TCHAR.h>
    

    Und alle char s nach TCHAR umstellen und die entsprechenden Funktinen aus der Headerdatei nehmen:
    Aus strcmp wird _tcscmp etc. Damit kann man für beide Konfigurationen kompilieren.



  • und am Allerbesten: demnächst im richtigen Forum fragen. Das hat mit Standard-C++ garnichts zu tun 😉



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten