C++ 当应用程序未在Windows 10的提升模式下运行时,SetwindowsHookEX不工作
我有用于设置windows钩子的本机dll,我正在我的一个windows应用程序中调用它以将其设置为目标应用程序。当目标应用程序在管理(提升)模式下运行并触发CallWndProcHook回调时,它工作得非常好C++ 当应用程序未在Windows 10的提升模式下运行时,SetwindowsHookEX不工作,c++,visual-c++,windows-10,setwindowshookex,C++,Visual C++,Windows 10,Setwindowshookex,我有用于设置windows钩子的本机dll,我正在我的一个windows应用程序中调用它以将其设置为目标应用程序。当目标应用程序在管理(提升)模式下运行并触发CallWndProcHook回调时,它工作得非常好 static LRESULT WINAPI CallWndProcHook(int nHookCode, WPARAM wParam, LPARAM lParam) { std::ofstream DEBUG_STRM; DEBUG_STRM.open (FILE, st
static LRESULT WINAPI CallWndProcHook(int nHookCode, WPARAM wParam, LPARAM lParam)
{
std::ofstream DEBUG_STRM;
DEBUG_STRM.open (FILE, std::fstream::app);
DEBUG_STRM << "\n CallWndProcHook entered";
return CallNextHookEx(g_hHook, nHookCode, wParam, lParam);
}
extern "C" __declspec( dllexport ) int _stdcall Start(long handle)
{
HWND objectHWND = (HWND)handle;
DWORD processId;
DWORD threadId;
std::ofstream DEBUG_STRM;
DEBUG_STRM.open (FILE, std::fstream::app);
DEBUG_STRM << "\n Start hooking";
threadId = GetWindowThreadProcessId(objectHWND, &processId);
HINSTANCE hInst = GetModuleHandle("textlocator.dll");
g_hHook = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProcHook, hInst, threadId);
if(g_hHook == NULL){
DEBUG_STRM << "\n Hook unsuccessful";
}else{
DEBUG_STRM << "\n Hook successful";
}
if (g_hHook == 0) {
return 0;
} else {
return 1;
}
DEBUG_STRM.close();
}
但是,当我在非管理(非提升)模式下运行目标应用程序时,SetWindowsHookEx成功,但CallWndProcHook回调不会被触发
static LRESULT WINAPI CallWndProcHook(int nHookCode, WPARAM wParam, LPARAM lParam)
{
std::ofstream DEBUG_STRM;
DEBUG_STRM.open (FILE, std::fstream::app);
DEBUG_STRM << "\n CallWndProcHook entered";
return CallNextHookEx(g_hHook, nHookCode, wParam, lParam);
}
extern "C" __declspec( dllexport ) int _stdcall Start(long handle)
{
HWND objectHWND = (HWND)handle;
DWORD processId;
DWORD threadId;
std::ofstream DEBUG_STRM;
DEBUG_STRM.open (FILE, std::fstream::app);
DEBUG_STRM << "\n Start hooking";
threadId = GetWindowThreadProcessId(objectHWND, &processId);
HINSTANCE hInst = GetModuleHandle("textlocator.dll");
g_hHook = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProcHook, hInst, threadId);
if(g_hHook == NULL){
DEBUG_STRM << "\n Hook unsuccessful";
}else{
DEBUG_STRM << "\n Hook successful";
}
if (g_hHook == 0) {
return 0;
} else {
return 1;
}
DEBUG_STRM.close();
}
静态LRESULT WINAPI CallWndProcHook(int-nHookCode、WPARAM-WPARAM、LPARAM-LPARAM)
{
std::ofstreamdebug\u STRM;
DEBUG_STRM.open(文件,std::fstream::app);
DEBUG_STRM是否objectHWND是提升进程中的窗口?objectHWND是非提升进程中的窗口大多数难以诊断的问题都是从错误的假设开始的。这里有一个假设,您假设钩子没有被调用,但无法与无法打开文件的进程区分开来。或者您可以找到文件返回,这是一个非常传统的问题,因为没有使用完整的路径名。我们无法判断文件是什么样子。