Description

The main purpose of the WH_DEBUG hook, as its name implies, is for debugging other hooks. When you install this hook, it intercepts the call to an installed hook’s filter function before the call is actually made. For the sake of simplicity, I will refer to the hook that is being debugged as the target hook. Figure 21-1 illustrates the relationship of the WH_DEBUG hook to the operating system and the target hook.

The WH_DEBUG hook is called before the target hook

Figure 21-1. The WH_DEBUG hook is called before the target hook

You can install this hook as a thread-specific hook in a Visual Basic (VB) application, or you can install it as a system-wide hook in a Win32 dynamic link library (DLL). When you install it as a thread-specific hook, the system will call it before calling any installed hook filter functions within that specific thread. As a note, the WH_DEBUG hook will not intercept messages sent to the WH_MOUSE_LL and WH_KEYBOARD_LL hook filter functions, since these low-level hook filter functions are called earlier in the messaging system. When you install the WH_DEBUG hook as a system-wide hook, the system will call it before calling any installed hook filter functions within the system, once again excluding all WH_MOUSE_LL and WH_KEYBOARD_LL hooks.

As you can see, any installed filter functions for the WH_DEBUG hook are always called before calling any other hook’s filter function. If several hooks are installed ...

Get Subclassing and Hooking with Visual Basic now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.