1
1
基于您的代码示例,似乎您只是在绕开自己的过程。因此,迂回的drawtext不会输出任何内容。也许,您需要将代码注入到所需目标的进程内存中,并从中绕开API调用。例如,您可以创建系统范围的CBT钩子,其工作方式类似于。启动点,满足您的迂回需求。像这样,给你指出一个方向: LRESULT CALLBACK CBTProcedure(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode < 0) return CallNextHookEx(g_hHook, nCode, wParam, lParam); else if (!g_pClient) return 0; HWND hWnd = (HWND)wParam; if (!hWnd) return 0; switch (nCode) { case HCBT_ACTIVATE: /** Here, you can check up against the handle to see, * if the target window is the one you're looking for... * */ if (!g_pClient->IsRegisteredWindow(hWnd)) if (g_pClient->RegisterWindow(hWnd)) { } break; case HCBT_DESTROYWND: if (g_pClient->IsRegisteredWindow(hWnd)) g_pClient->UnregisterWindow(hWnd); break; } return 0; } bool __0XYOUROWN_API InstallHook() { // Call this one from your main process; set's up the system-wide hook. g_hHook = SetWindowsHookEx(WH_CBT, (HOOKPROC)CBTProcedure, g_hInstance, 0); /** #pragma data_seg("Shared") * HHOOK g_hHook = NULL; * #pragma data_seg() */ return g_hHook != NULL; } /** The actual DLL... * * */ BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: g_hInstance = (HINSTANCE)hModule; if (::GetModuleHandle(_T("THEDESIREDMODULE.EXE")) != NULL) { g_pClient = new Client(); if (g_pClient) { InitializeCriticalSection(&g_CriticalSection); // You can setup a critic. sec. for later synchronization... DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach(&(PVOID&)Real_DrawTextW, Mine_DrawTextW); DetourTransactionCommit(); } } break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: if (::GetModuleHandle(_T("THEDESIREDMODULE.EXE")) != NULL) { if (g_pClient) { DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourDetach(&(PVOID&)Real_DrawTextW, Mine_DrawTextW); DetourTransactionCommit(); delete g_pClient; g_pClient = NULL; } } break; } } |
2
1
似乎您假定printf()将调用drawtext()。不会的。drawtext()是一个gdi函数。printf()转到writeconsole()。它们不会混合在一起。”控制台窗口”与其他窗口完全不同。这种区别是一种基本的体系结构区别;它们甚至由单独的内核组件管理。 |
3
1
只有旁注: EasyHook - The reinvention of Windows API Hooking 是开放源代码( LGPL )项目开发继承人 Detours .它已经相当成熟了。 |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |