文章如下:http://gtogo.myetang.com/po/biancheng/2.htm[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
"AppInit_DLLs"="backdoor.dll"
wantjob就是用这个法子。微软知识库Q134655和Q125680里介绍过,大家不妨弄来看看。
写一个backdoor.dll,再加上这个键值,系统启动后就会加载这个模块。因为没有自己
的进程,所以也是看不见的系统启动后就会加载的dll与一般的供其他程序调用的dll有何区别?
这两种dll在写法上有何不同。
"AppInit_DLLs"="backdoor.dll"
wantjob就是用这个法子。微软知识库Q134655和Q125680里介绍过,大家不妨弄来看看。
写一个backdoor.dll,再加上这个键值,系统启动后就会加载这个模块。因为没有自己
的进程,所以也是看不见的系统启动后就会加载的dll与一般的供其他程序调用的dll有何区别?
这两种dll在写法上有何不同。
解决方案 »
- 关于e_mail服务器的问题
- 请问可不可以VC ODBC一个记录集处理多个表的数据,如果可以怎么实现?
- 使用CFileDialog时,有没有什么办法控制可进入的路径
- vc中ASSERT()和VERIFY()有什么区别?谢谢了.急用!
- 再次请问对话框Domodal失败问题?
- 我在view中画图,但窗口最大化后就不见了,如何重画?
- 学习的问题
- 请教
- 请提供密码编码学与网络安全:原理与实践(第二版) William Stallings的电子版下载地址
- 如何获取窗体上的Button的句柄
- 如何实现OpenGL双缓冲
- @@@@@@@@@@@@@字符串查找@@@@@@@@@@@@@@@@@@@@@@@@@@@
猜测而已 :)
如果你曾经多少使用过Wi n d o w s操作系统,你肯定熟悉注册表的情况。整个系统的配置都
是在注册表中维护的,可以通过调整它的设置来改变系统的行为特性。将要介绍的项目是在下
面的关键字中:
Windows 98 Windows 98将忽略注册表的这个关键字。在Windows 98下,无法使用
该方法插入D L L。
图2 2 - 2显示了使用Registry Editor(注册表编辑器)时该关键字中的各个项目的形式。该关
键字的值包含一个D L L文件名或者一组D L L文件名(用空格或逗号隔开)。由于空格用来将文
件名隔开,因此必须避免使用包含空格的文件名。列出的第一个D L L文件名可以包含一个路径,
但是包含路径的其他D L L均被忽略。由于这个原因,最好将你的D L L放入Wi n d o w s的系统目录
中,这样就不必设定路径。在窗口中,我将该值设置为单个D L L路径名C : \ M y L i b . d l l。
图22-2 注册表窗口
当重新启动计算机及Wi n d o w s进行初始化时,系统将保存这个关键字的值。然后,当
U s e r 3 2 . d l l库被映射到进程中时,它将接收到一个D L L _ P R O C E S S _ AT TA C H通知。当这个通知
被处理时,U s e r 3 2 . d l l便检索保存的这个关键字中的值,并且为字符串中指定的每个D L L调用
L o a d L i b r a r y函数。当每个库被加载时,便调用与该库相关的D l l M a i n函数,其f d w R e a s o n的值是
D L L _ P R O C E S S _ AT TA C H,这样,每个库就能够对自己进行初始化。由于插入的D L L在进程
的寿命期中早早地就进行了加载,因此在调用函数时应该格外小心。调用k e r n e l 3 2 . d l l中的函数
时应该不会出现什么问题,不过调用其他D L L中的函数时就可能产生一些问题。U s e r 3 2 . d l l并
不检查每个库是否已经加载成功,或者初始化是否取得成功。
在插入D L L时所用的所有方法中,这是最容易的一种方法。要做的工作只是将一个值添加
到一个已经存在的注册表关键字中。不过这种方法也有它的某些不足:
• 由于系统在初始化时要读取这个关键字的值,因此在修改这个值后必须重新启动你的计
算机—即使退出后再登录,也不行。当然,如果从这个关键字的值中删除D L L,那么
在计算机重新启动之前,系统不会停止对库的映射操作。
• 你的D L L只会映射到使用U s e r 3 2 . d l l的进程中。所有基于G U I的应用程序均使用U s e r 3 2 . d l l,
不过大多数基于C U I的应用程序并不使用它。因此,如果需要将D L L插入编译器或链接
程序,这种方法将不起作用。
• 你的D L L将被映射到每个基于G U I的应用程序中,但是必须将你的库插入一个或几个进
程中。你的D L L映射到的进程越多,“容器”进程崩溃的可能性就越大。毕竟在这些进程
中运行的线程是在执行你的代码。如果你的代码进入一个无限循环,或者访问的内存不
正确,就会影响代码运行时所在进程的行为特性和健壮性。因此,最好将你的库插入尽
可能少的进程中。
• 你的D L L将被映射到每个基于G U I的应用程序中。这与上面的问题相类似。在理想的情
况下,你的D L L只应该映射到需要的进程中,同时,它应该以尽可能少的时间映射到这
些进程中。假设在用户调用你的应用程序时你想要建立Wo r d P a d的主窗口的子类。在用
户调用你的应用程序之前,你的D L L不必映射到Wo r d P a d的地址空间中。如果用户后来
决定终止你的应用程序的运行,那么你必须撤消Wo r d P a d的主窗口。在这种情况下,你
的D L L将不再需要被插入Wo r d P a d的地址空间。最好是仅在必要时保持D L L的插入状态。