The usual reason for system-wide hooks not operating systemically is that an essential piece of data (usually, but not always retricted to, the HHOOK) is not stored in a shared section, so each loaded instance of the DLL has a different value for the variable, and only one (in the address space of the initial loader app) has the right value and behaves as expected.
So, to create a shared section :
1. Use a pragma in your DLL code to specify the shared variables :
#pragma data_seg(".SHRDATA")
HWND hWndMain = 0;
HHOOK hKeybdHook = NULL ;
BOOL bSomeFlagOrOther = FALSE;
#pragma data_seg()
Note that shared variables *MUST* be initialised.
2. Create a DEF file with the following in it :
SECTIONS
.SHRDATA READ WRITE SHARED
Where the section name matches that in your pragma above. If having a
DEF file offends you, you can specify the section in a linker command
parameter (see the docs for the linker).
Author : Bob Moore
0 nhận xét:
Post a Comment