I have tryed to use the GetModuleInformation, but every time I used it, the application crash.
My code:
#include <windows.h>
#include <tlhelp32.h>
#include <psapi.h>
using namespace std;
HMODULE GetRemoteModuleHandle(DWORD lpProcessId, LPCSTR lpModule);
int main() {
HWND hWnd = FindWindow(0, "Counter-Strike Source");
if(hWnd == 0){
MessageBox(0, "Error cannot find window.", "Error", MB_OK|MB_ICONERROR);
}
else {
DWORD proccess_ID;
GetWindowThreadProcessId(hWnd, &proccess_ID);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proccess_ID);
HMODULE hModule = GetRemoteModuleHandle(proccess_ID, "engine.dll");
MODULEINFO mi;
GetModuleInformation(hProcess, hModule, &mi, sizeof(mi));
}
return 0;
}
HMODULE GetRemoteModuleHandle(DWORD lpProcessId, LPCSTR lpModule)
{
HMODULE hResult = NULL;
HANDLE hSnapshot;
MODULEENTRY32 me32;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, lpProcessId);
if (hSnapshot != INVALID_HANDLE_VALUE)
{
me32.dwSize = sizeof(MODULEENTRY32);
if (Module32First(hSnapshot, &me32))
{
do
{
if (!stricmp(me32.szModule, lpModule))
{
hResult = me32.hModule;
break;
}
}
while (Module32Next(hSnapshot, &me32));
}
CloseHandle(hSnapshot);
}
return hResult;
}
The Handle to the Module isn't NULL so I think it is created! :O
I hope you can help me :)