1. Windows 应用程序的运行模式是基于消息驱动的,任何线程只要注册了窗口类都会有一个消息队列用来接受用户的输入消息和系统消息,为了获取特定的线程接受或发送的消息,就需要使用钩子。
2. 钩子就是windows消息处理中的一个监视点,它是一个处理消息的程序段,通过调用相关的API函数,把它挂入系统,关于消息我们需要知道以下几点:
1.hook是用来截获系统中的消息流的。
2. 消息被截获后,用来处理消息的子程序叫做钩子函数。
3. 系统中同一时间可能有多个进程安装了钩子,多个钩子函数在一起组成钩子链。
4. 钩子加重了系统的负担,尽量少安装,早移除。
3.在调用SetWindowsHookEx函数时,如果dwThreadId = 0,或者指定一个由其他进程创建的线程id.lpfn参数指定的子函数必须位于一个dll中,这种被称为远程钩子。
4. MEMORY_BASIC_INFORMATION 结构,他包含了一个进程的虚拟地址空间中的某个页面区间的信息。
5. 函数VirutalQuery, 返回调用进程的虚拟地址空间的某个页面区间的信息,为了返回非调用进程的对应信息使用ex版本。
6. 共享数据段中的数据在所有进程中共享一块内在,如果在a进程设置了它中的数据,其他进程中相应的数据会随之发生改变。
7. 通过使用#pragma data_seg()命令,可以添加额外数据段,放在共享数据段中的数据必须被初始化,否则会被安排到默认数据段,指定将不会起作用。同时需要在定义dll的.def中添加相应的指定。 如下:
#pragma data_seg( “YCIShared” )
HWND g_hWndCaller = NULL;
HOOk g_hHook = NULL;
#pragma data_seg()
// .def
...
SECTIONS
YCIShared Read Write Shared