<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ForTopLevel的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ForTopLevel</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ForTopLevel]]></copyright><item><title><![CDATA[经典驱动程序结构]]></title><link>https://blog.youkuaiyun.com/ForTopLevel/article/details/481268</link><guid>https://blog.youkuaiyun.com/ForTopLevel/article/details/481268</guid><author>ForTopLevel</author><pubDate>Thu, 15 Sep 2005 10:59:00 +0800</pubDate><description><![CDATA[关于驱动程序的结构：1.       应用层：通过调用交互层的函数得到驱动程序对应的文件路径，名称和DOS名称，并将这个驱动程序注册为服务程序，然后在交互层用函数CreateFile并传入驱程的DOS名称打开驱程，现在就可以调用交互层的WriteIo(自定义)函数对驱动程序发出指令。2.     交互层：它的WriteIo函数其实只是对系统函数DeviceIoControl的封装。并且它通过该函数]]></description><category></category></item><item><title><![CDATA[关于RIT]]></title><link>https://blog.youkuaiyun.com/ForTopLevel/article/details/481258</link><guid>https://blog.youkuaiyun.com/ForTopLevel/article/details/481258</guid><author>ForTopLevel</author><pubDate>Thu, 15 Sep 2005 10:48:00 +0800</pubDate><description><![CDATA[根据27章:"RIT将键盘事件放入线程的虚拟输入队列时不用涉及具体的窗口。当这个线程调用GetMessage时..."说明消息结构是在RIT里组装的。也就是说钩子只有在RIT里才能得到处理所有消息(暂时是硬件消息如键盘，鼠标)的机会。可以猜测的是全局钩子在RIT里实现而局部钩子在线程的虚拟输入队列里实现。"那么RIT怎么才能知道要向哪一个线程的虚拟输入队列里增加硬件输入消息？对鼠标消息，RIT只是]]></description><category></category></item><item><title><![CDATA[**一分钟感言**]]></title><link>https://blog.youkuaiyun.com/ForTopLevel/article/details/436408</link><guid>https://blog.youkuaiyun.com/ForTopLevel/article/details/436408</guid><author>ForTopLevel</author><pubDate>Wed, 27 Jul 2005 17:48:00 +0800</pubDate><description><![CDATA[2005.07.27. 今天又看了下利用钩子拦截API函数的代码，发现它拦截的其实是函数的调转代码，因为API在编译的时候会形如： CALL  XXXX                             XXXX:  JMP  YYYY这个时候我们其实是将JMP YYYY都换成自己的JMP MYFUNC.这里有个疑问，如果真是这样，那我们完全可以只修改XXXX地址下的后四个字节，而不是五个；]]></description><category></category></item><item><title><![CDATA[读Net Programming on WIN2K 2nd 后记---关于I/O Model]]></title><link>https://blog.youkuaiyun.com/ForTopLevel/article/details/430043</link><guid>https://blog.youkuaiyun.com/ForTopLevel/article/details/430043</guid><author>ForTopLevel</author><pubDate>Wed, 20 Jul 2005 20:06:00 +0800</pubDate><description><![CDATA[ 以下代码均摘自原版，文字部分是我的体会。//--------------------------------------------------------------//select情况下： SOCKET  s;fd_set  fdread;int     ret; // Create a socket, and accept a connection // Manage I/O on the]]></description><category></category></item><item><title><![CDATA[汇编取得函数地址]]></title><link>https://blog.youkuaiyun.com/ForTopLevel/article/details/430039</link><guid>https://blog.youkuaiyun.com/ForTopLevel/article/details/430039</guid><author>ForTopLevel</author><pubDate>Wed, 20 Jul 2005 19:55:00 +0800</pubDate><description><![CDATA[// 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[]){    ]]></description><category></category></item></channel></rss>