driver12345
驱动牛犊
驱动牛犊
  • 注册日期2005-11-15
  • 最后登录2007-10-28
  • 粉丝0
  • 关注0
  • 积分814分
  • 威望84点
  • 贡献值0点
  • 好评度82点
  • 原创分0分
  • 专家分0分
阅读:1846回复:17

驱动里能装载资源?

楼主#
更多 发布于:2007-02-06 18:28
  我想在我的驱动里装载资源?
在驱动启动后再把资源释放出来?
就向应用程序装载和释放一样!
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2007-02-07 00:42
理论上可以,实际上需要自己动点手脚,这个问题,老v比较熟悉.
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
binjo
论坛版主
论坛版主
  • 注册日期2003-04-23
  • 最后登录2012-06-25
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望142点
  • 贡献值0点
  • 好评度140点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-02-07 19:48
http://forum.sysinternals.com/forum_posts.asp?TID=9870&PN=1

这里有个样本,刚好是驱动释放资源的,粗看了下,ms是比较复杂
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
地板#
发布于:2007-02-07 20:24
bin2hex
然后静态数组存储,哈哈~
没有战争就没有进步 X3工作组 为您提供最好的军火
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2007-02-07 20:38
CNNIC 的XX里就有个xx的dll.
驱动开发者 呵呵
linestyle
驱动小牛
驱动小牛
  • 注册日期2004-01-28
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望139点
  • 贡献值0点
  • 好评度135点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-02-08 09:41
引用第3楼killvxk2007-02-07 20:24发表的“”:
bin2hex
然后静态数组存储,哈哈~


一个500k的文件,放入静态数组,编译的时候估计需要5个小时以上把??
我以前试过一回,时间太长放弃过啊
loading is waiting ...
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-02-08 09:59
Walter Oney的书自带的源码,当中有一个sample,可以在driver中取得它自己的version information,使用的原理就是PE格式的处理。可以以它为基础,扩展到处理任何资源
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
driver12345
驱动牛犊
驱动牛犊
  • 注册日期2005-11-15
  • 最后登录2007-10-28
  • 粉丝0
  • 关注0
  • 积分814分
  • 威望84点
  • 贡献值0点
  • 好评度82点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-02-08 10:13
谢谢大家的回复!
感觉用数组比较简单点
但如何把一个文件的内容弄到数组里面去呢?
用手一个一个的敲进出吗?
还是有比较快的方法?
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
8楼#
发布于:2007-02-08 13:28
引用第5楼linestyle2007-02-08 09:41发表的“”:


一个500k的文件,放入静态数组,编译的时候估计需要5个小时以上把??
我以前试过一回,时间太长放弃过啊

我选择把文件放在驱动文件尾部~~就跟最原始的文件合并一样,哈哈~~
没有战争就没有进步 X3工作组 为您提供最好的军火
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
9楼#
发布于:2007-02-08 13:29
嘿嘿
没有战争就没有进步 X3工作组 为您提供最好的军火
guaiguaiguan
驱动中牛
驱动中牛
  • 注册日期2003-10-11
  • 最后登录2011-01-12
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望556点
  • 贡献值0点
  • 好评度490点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-02-08 17:30
我也是放到数组中,编码的方法可以自己写个小程序,如果懒得写,可以使用ultraedit使用16进制拷贝方式,粘贴到一个新文件中,然后采用列块模式编辑,以插入逗号和引号。最好把这个数组单独放到一个文件中。和其他文件分开。另外最好对文件进行简单编码,否则别人使用ultraedit打开sys文件搜索4d5a 很容易找到这个嵌入的exe文件。
  也可以使用资源的方法嵌入二进制数据类型,使用rc进行编译,和开发win32应用态应用程序一样,只是资源的引用比较麻烦,我想通过搜索当前模块所在的内存应该可以找到资源数据的入口,至于数据的长度可能需要自己想办法。
  可以设想如果存在一套成熟的内核资源存取方法,在内核里面判断一个文件是否是微软出品,将会容易的多。事实上在驱动中判断一个文件是否是操作系统的一部分,要走很多弯路。
driver12345
驱动牛犊
驱动牛犊
  • 注册日期2005-11-15
  • 最后登录2007-10-28
  • 粉丝0
  • 关注0
  • 积分814分
  • 威望84点
  • 贡献值0点
  • 好评度82点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-02-09 10:05
谢谢guaiguaiguan老兄的方法!
我现在也用装入资源的方法
但发现我用strstr去找4d5a90 能找到第一个
但找下一个4d5a90就找不到了,不知道为何,文件里明明是有的!
文件结尾我是用.pdb来区分的,可用strstr也找不到!
不行的话只能用数组的方法了!
guaiguaiguan
驱动中牛
驱动中牛
  • 注册日期2003-10-11
  • 最后登录2011-01-12
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望556点
  • 贡献值0点
  • 好评度490点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-02-09 19:51
居然用strstr去找4d5a90 还能找到第一个,你的运气实在太好了,那么多0字符都没有阻止找到这个MZ。不过如果你把这块内存以16进制dump到一个字符串数组中,肯定还能找到第2个,可惜效率太低。
起始可以使用
mov ax,5a4dh
mov di,offset begin
mov cx,len
cld
rep scasw
稍作变化很容易找到第二个。
xikug
驱动小牛
驱动小牛
  • 注册日期2001-09-25
  • 最后登录2013-09-27
  • 粉丝1
  • 关注0
  • 积分1001分
  • 威望169点
  • 贡献值0点
  • 好评度168点
  • 原创分1分
  • 专家分0分
13楼#
发布于:2007-02-09 20:37
010 Editor可以直接导出数据为C语言格式的数组
http://www.debugman.com
zzzevazzz
驱动小牛
驱动小牛
  • 注册日期2002-12-27
  • 最后登录2020-06-29
  • 粉丝0
  • 关注0
  • 积分1008分
  • 威望242点
  • 贡献值0点
  • 好评度170点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2007-02-10 22:00
XP的ntoskrnl导出下面这些函数:
LdrAccessResource
LdrEnumResources
LdrFindResourceDirectory_U
LdrFindResource_U

手头没2000,不知道2000是不是也导出。
就算没有导出,直接用ntdll的应该也可以。
[b][url]http://hi.baidu.com/zzzevazzz[/url][/b]
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
15楼#
发布于:2007-02-10 23:08
引用第14楼zzzevazzz2007-02-10 22:00发表的“”:
XP的ntoskrnl导出下面这些函数:
LdrAccessResource
LdrEnumResources
LdrFindResourceDirectory_U
LdrFindResource_U
.......

导出了,不过用起来不如静态数组方便~
没有战争就没有进步 X3工作组 为您提供最好的军火
zzzevazzz
驱动小牛
驱动小牛
  • 注册日期2002-12-27
  • 最后登录2020-06-29
  • 粉丝0
  • 关注0
  • 积分1008分
  • 威望242点
  • 贡献值0点
  • 好评度170点
  • 原创分0分
  • 专家分0分
  • 社区居民
16楼#
发布于:2007-02-11 19:27
晕。静态数组只是自己的,LdrXxx可以访问别的模块啊。
[b][url]http://hi.baidu.com/zzzevazzz[/url][/b]
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
17楼#
发布于:2007-02-12 00:00
引用第16楼zzzevazzz2007-02-11 19:27发表的“”:
晕。静态数组只是自己的,LdrXxx可以访问别的模块啊。

恩~没错~
没有战争就没有进步 X3工作组 为您提供最好的军火
游客

返回顶部