Problem - dllexport/hook

0

Witam, mam problem z plikiem DLL, zacznijmy od tego ze chciałem zrobić aby program .exe startował wraz z moim plikiem .dll

w pliku.dll dodałem:

 
extern "C" __declspec(dllexport) int StartWithDll()
{

	return 0;
}

oraz dodałem ją do .exe za pomocą iidking, dll startuje bez problemu ale nie wiem jak to okreslic po prostu dll startuje za szybko..

plik dll:


extern "C" __declspec(dllexport) int StartWithDll()
{

	return 0;
}

extern "C" BOOL APIENTRY DllMain (HINSTANCE hInst,
                       DWORD reason,
                       LPVOID reserved)
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
           {

            HWND hWnd = FindWindow("VirtualGame", NULL);
                if(hWnd)
	               MessageBoxA(NULL, "Window", "Find!", MB_OK);



           }
        break;
    }
 
    return TRUE;
}
 

VirtualGame - to class tego programu .exe
Chce zrobić tak aby ten dll załadował sie po włączeniu tego .exe a nie przed bo nie znajduje mi tego okna z programem albo jakoś opóźnić FindWindow. Jakieś pomysły ?

1

wątek + GetTickCount

0

Dzieki, QwertyX.

zrobiłem tak:

 


DWORD WINAPI FunctionCheck(PVOID pvParam)
{

Sleep(1000);

            HWND hWnd = FindWindow("VirtualGame", NULL);
                if(hWnd)
                       MessageBoxA(NULL, "Window", "Find!", MB_OK);


  return 0;
}


extern "C" BOOL APIENTRY DllMain (HINSTANCE hInst,
                       DWORD reason,
                       LPVOID reserved)
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
           {
 
   DWORD IdCheck;
   int x = GetTickCount();

  CreateThread(NULL, 0, FunctionCheck, (PVOID)x, 0, &IdCheck);

  getch();

 
           }
        break;
    }
 
    return TRUE;
}

Sleep zatrzymuje działanie sprawdzania ale nie zawsze to zadziała bo jak program się włączy z opóźnieniem to jest problem bo nie wykrywa mi przez FindWindow.
Nie wiem może pokombinować coś żeby skanowało ten FindWindow i jak załapie to skończy skanować.

0

ehhh tak się nie robi z wielu przyczyn, o których nawet nie chce mi się pisać, wątek odpalony w DLL_PROCESS_ATTACH nie jest odpalany dopóki biblioteka nie zostanie do końca załadowana (czyli dopóki nie wyjdziesz z DllMain), a twoja biblioteka nie jest do końca załadowana bo blokujesz ja swoim getch()!!! Wątek uruchamiaj w jakiejś eksportowanej funkcji, a nie w DllMain

0
Bartosz Wójcik napisał(a)

ehhh tak się nie robi z wielu przyczyn, o których nawet nie chce mi się pisać, wątek odpalony w DLL_PROCESS_ATTACH nie jest odpalany dopóki biblioteka nie zostanie do końca załadowana (czyli dopóki nie wyjdziesz z DllMain), a twoja biblioteka nie jest do końca załadowana bo blokujesz ja swoim getch()!!! Wątek uruchamiaj w jakiejś eksportowanej funkcji, a nie w DllMain

W sumie to działa mi to więc czemu tak nie może zostać?
Nie wiem o co chodzi z tym odpalaniem w eksportowanej funkcji tak po prostu no odpalWatekSprawdzania(); ??

Nie znam sie na tym więc pewnie jest to prymitywne rozwiązanie ale zrobiłem coś takiego:

 DWORD WINAPI FunctionCheck(PVOID pvParam)
{
	bool hookInstall = false; //check hook install

	while(!hookInstall) 
	{
	   hWnd = FindWindow("VirtualGame", NULL);

	   if (hWnd)
	   {

		DWORD dwPides;
		GetWindowThreadProcessId(hWnd, &dwPides);

			if (GetCurrentProcessId() == dwPides)
			{
				MessageBoxA(NULL,"Hook","Installed",NULL);
				hookInstall = true; //check hook install
			}
	   }
	}
  return 0;
}

tyle ze jak dopalę .exe to mi żre 100% procka aż nie znajdzie FindWindow siedze juz nad tym ... pare dni i dzis mi sie dopiero udało w ogóle zrobić to że mi po czasie znajduje ten FindWindow.

1 użytkowników online, w tym zalogowanych: 0, gości: 1