Struggler
asked on
Why SetWindowsHookEx call failure with a S_OK?
// Returns the HMODULE that contains the specified memory address
static HMODULE ModuleFromAddress(PVOID pv) {
MEMORY_BASIC_INFORMATION mbi;
return((VirtualQuery(pv, &mbi, sizeof(mbi)) != 0)
? (HMODULE) mbi.AllocationBase : NULL);
}
IHOOKAPI bool InstallHook(DWORD dwThreadId, LPCSTR pszSection, LPCSTR pszTaskFile, bool fInstall)
{
if (fInstall)
{
...
g_hHook = SetWindowsHookEx(WH_CALLWN DPROC, CallWndProc, ModuleFromAddress(CallWndP roc), dwThreadId);
ASSERT(g_hHook);
}
else
{
UnhookWindowsHookEx(g_hHoo k);
}
return g_hHook != NULL;
}
these codes resides in a dll, and i call installhook from main exe. It fails at ASSERT(g_hHook), and @err,hr shows S_ok
static HMODULE ModuleFromAddress(PVOID pv) {
MEMORY_BASIC_INFORMATION mbi;
return((VirtualQuery(pv, &mbi, sizeof(mbi)) != 0)
? (HMODULE) mbi.AllocationBase : NULL);
}
IHOOKAPI bool InstallHook(DWORD dwThreadId, LPCSTR pszSection, LPCSTR pszTaskFile, bool fInstall)
{
if (fInstall)
{
...
g_hHook = SetWindowsHookEx(WH_CALLWN
ASSERT(g_hHook);
}
else
{
UnhookWindowsHookEx(g_hHoo
}
return g_hHook != NULL;
}
these codes resides in a dll, and i call installhook from main exe. It fails at ASSERT(g_hHook), and @err,hr shows S_ok
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.