- 博客(5)
- 收藏
- 关注
原创 经典驱动程序结构
关于驱动程序的结构:1. 应用层:通过调用交互层的函数得到驱动程序对应的文件路径,名称和DOS名称,并将这个驱动程序注册为服务程序,然后在交互层用函数CreateFile并传入驱程的DOS名称打开驱程,现在就可以调用交互层的WriteIo(自定义)函数对驱动程序发出指令。2. 交互层:它的WriteIo函数其实只是对系统函数DeviceIoControl的封装。并且它通过该函数
2005-09-15 10:59:00
1304
原创 关于RIT
根据27章:"RIT将键盘事件放入线程的虚拟输入队列时不用涉及具体的窗口。当这个线程调用GetMessage时..."说明消息结构是在RIT里组装的。也就是说钩子只有在RIT里才能得到处理所有消息(暂时是硬件消息如键盘,鼠标)的机会。可以猜测的是全局钩子在RIT里实现而局部钩子在线程的虚拟输入队列里实现。"那么RIT怎么才能知道要向哪一个线程的虚拟输入队列里增加硬件输入消息?对鼠标消息,RIT只是
2005-09-15 10:48:00
1082
原创 **一分钟感言**
2005.07.27. 今天又看了下利用钩子拦截API函数的代码,发现它拦截的其实是函数的调转代码,因为API在编译的时候会形如: CALL XXXX XXXX: JMP YYYY这个时候我们其实是将JMP YYYY都换成自己的JMP MYFUNC.这里有个疑问,如果真是这样,那我们完全可以只修改XXXX地址下的后四个字节,而不是五个;
2005-07-27 17:48:00
1433
原创 读Net Programming on WIN2K 2nd 后记---关于I/O Model
以下代码均摘自原版,文字部分是我的体会。//--------------------------------------------------------------//select情况下: SOCKET s;fd_set fdread;int ret; // Create a socket, and accept a connection // Manage I/O on the
2005-07-20 20:06:00
1493
原创 汇编取得函数地址
// 1.cpp : 定义控制台应用程序的入口点。// #include "stdafx.h"#include using namespace std;#define array_size 10int a[array_size]={42, 73, 65, 97, 23, 59, 18, 84, 36, 6};int _tmain(int argc, _TCHAR* argv[]){
2005-07-20 19:55:00
2974
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人