0 votes

Crochetage avec EasyHook

J'accroche la fonction CreateWindowExW en utilisant la lib EasyHook .

Quand il revient à la ligne return CreateWindowExW(dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam); c'est le cas :

  • Retourner le original fonction 'interceptée' avec les paramètres modifiés par moi X, Y, nWidth, nHeight ?

o

  • Il s'agit d'appeler la fonction originale plus une nouvelle CreateWindowExW avec les mêmes paramètres ?

Si dans le cas de 2 comment puis-je renvoyer le original appel de fonction avec des valeurs modifiées ?

Mon doute est que je doive définir CreateWindowExW quelque part, et comment l'"appeler" avec la fonction de crochet "interceptée" actuelle ?

C'est le ensemble du site code, je n'ai pas CreateWindowExW définis ailleurs :

HWND __stdcall CreateWindowExW_Hook(
    DWORD     dwExStyle,
    LPCWSTR   lpClassName,
    LPCWSTR   lpWindowName,
    DWORD     dwStyle,
    int       X,
    int       Y,
    int       nWidth,
    int       nHeight,
    HWND      hWndParent,
    HMENU     hMenu,
    HINSTANCE hInstance,
    LPVOID    lpParam
)
{
    X = 50; Y = 50; nWidth = 400; nHeight = 300;
    return CreateWindowExW(dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
}

extern "C" void __declspec(dllexport) __stdcall NativeInjectionEntryPoint(REMOTE_ENTRY_INFO* inRemoteInfo);

void __stdcall NativeInjectionEntryPoint(REMOTE_ENTRY_INFO* inRemoteInfo)
{
    HOOK_TRACE_INFO hHook = { NULL };
    NTSTATUS result = LhInstallHook(
    GetProcAddress(GetModuleHandle(TEXT("User32")), "CreateWindowExW"),
    CreateWindowExW_Hook,
    NULL,
    &hHook);

    ULONG ACLEntries[1] = { 0 };
    LhSetExclusiveACL(ACLEntries, 1, &hHook);
}

0voto

Votre CreateWindowExW_Hook est une redirection d'une fonction CreateWindowExW qui fait partie de la fonction user32.dll .

La ligne :

NTSTATUS result = LhInstallHook(
  GetProcAddress(GetModuleHandle(TEXT("User32")), "CreateWindowExW"),
    CreateWindowExW_Hook,
    NULL,
    &hHook)

Définit cette redirection et quand CreateWindowExW est appelée, elle atterrira sur votre fonction CreateWindowExW_Hook qui modifiera les paramètres et appellera l'originale CreateWindowExW de la fonction user32.dll .

J'ai réécrit votre fonction pour une meilleure compréhension.

HWND __stdcall CreateWindowExW_Hook(
    DWORD     dwExStyle,
    LPCWSTR   lpClassName,
    LPCWSTR   lpWindowName,
    DWORD     dwStyle,
    int       X,
    int       Y,
    int       nWidth,
    int       nHeight,
    HWND      hWndParent,
    HMENU     hMenu,
    HINSTANCE hInstance,
    LPVOID    lpParam
)
{
    int new_X = 50; 
    int new_Y = 50; 
    int new_nWidth = 400; 
    int new_nHeight = 300;

    HWND retVal = CreateWindowExW(dwExStyle, lpClassName, lpWindowName, dwStyle, new_X, new_Y, new_nWidth, new_nHeight, hWndParent, hMenu, hInstance, lpParam);
    return retVal;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X