devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
阅读:10908回复:45

IRP文件操作接口的终极实现(代码+例子)

楼主#
更多 发布于:2008-03-29 11:13

     前段时间和驱网某个高人交流时都谈到了直接IRP操作文件的实现问题,其实对于大部分接口(诸如:
ZwReadFile、ZwWriteFile、ZwSetInformationFile、ZwDeleteFile等)在OSR上的“ Rolling Your Own - Building IRPs to Perform I/O ”一文中已经实现,但是那里面的实现还不够全。所以,我就翻出了前段时间在网上淘到的资料,特与大家共享!尤其值得注意的是,这里面还实现了ZwCreateFile接口!
 
    大家都知道使用IRP的好处就是:效率提高了,对中断级要求更宽了,还解决了常见的重入问题等等。 附件中一个是接口的实现代码,另外一个是应用实例。
附件名称/大小 下载次数 最后更新
Irp-Files.rar (144KB)  1311 2008-03-29 11:13

最新喜欢:

znsoftznsoft
人总在矛盾中徘徊。。。
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
沙发#
发布于:2008-03-29 11:18
不过从这里面也可以感悟出几点:
1。我们费了九牛二虎之力所想要的,其实大部分都在Minifilter框架中实现;
2。从稳定性和兼容性方面来讲,Legacy型过滤驱动远远比Minifilter过滤驱动要做的事情多的多;
3。不过从灵活性方面来对比的话,Legacy型过滤驱动确实有它的优势;
人总在矛盾中徘徊。。。
looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-03-29 11:44
devia在网上淘东西的能力超强,当然这要有自身相当强的功力才行。

又学了点东西,原来DeviceObject也自己创建,哈哈

框架,就好象VC和VB一样,VB封装了很多东西,用起来很舒服也不会崩溃,但是有些事情VB很难做而VC可以完成,但VC直接操作内存不当会崩溃

经常看到有说Minifilter多么多么好的,好像比没有用这个的好到天上去了,其实只要达到目的就行了,何必那么在意是白猫还是黑猫呢,而且有些难题和框架的关系应该不大,你在一个框架里无法解决,在另一个框架里未必就能解决
提问归提问,还是只能靠自己
hongfu830202
驱动牛犊
驱动牛犊
  • 注册日期2007-10-22
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分17分
  • 威望200点
  • 贡献值0点
  • 好评度57点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-03-29 12:45
    P := Trim(FPathToWatch) + Trim(P);
powerboot
驱动牛犊
驱动牛犊
  • 注册日期2007-12-15
  • 最后登录2009-12-26
  • 粉丝0
  • 关注0
  • 积分92分
  • 威望46点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-03-30 13:02
"new"到哪里去了?而且一按键就自动退出了...
lovehhy
驱动小牛
驱动小牛
  • 注册日期2007-09-17
  • 最后登录2010-09-17
  • 粉丝0
  • 关注0
  • 积分1028分
  • 威望244点
  • 贡献值0点
  • 好评度146点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-03-30 15:15
Great, let me have a try
wengzuhong
驱动小牛
驱动小牛
  • 注册日期2004-07-16
  • 最后登录2014-10-22
  • 粉丝3
  • 关注1
  • 积分9分
  • 威望262点
  • 贡献值0点
  • 好评度219点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-03-30 21:45
看你老的贴子总能学到东西
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2008-03-31 08:38
bu
使用IRP的好处主要就是防止重入,不过既然XP 以后提供了iocreatefilespecifyobjectbyhint这个函数的话,自己发IRP的意义都不大了,因为通过这个获得的FILEHANDLE,可以用其他任何调用,都不会发生重入,所以以上代码在2K下可以考虑作为替代,其他OS的话,还是走原路即可.不过在VISTA下也不能保证,建议在VISTA以后用MS的建议用IOCREATEFILEEX走ECP LIST.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2008-03-31 08:50
这个接口还是不能直接用到重入。
用的人自己改改即可
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
9楼#
发布于:2008-03-31 10:51
IoCreateFileSpecifyDeviceObjectHint对网络FS的支持还是有问题的。
并且对OS版本也有要求
http://support.microsoft.com/kb/322726
人总在矛盾中徘徊。。。
yandong_8212
驱动小牛
驱动小牛
  • 注册日期2006-07-28
  • 最后登录2011-02-11
  • 粉丝0
  • 关注0
  • 积分1046分
  • 威望464点
  • 贡献值1点
  • 好评度173点
  • 原创分0分
  • 专家分1分
10楼#
发布于:2008-04-03 11:19
引用第9楼devia于2008-03-31 10:51发表的  :
IoCreateFileSpecifyDeviceObjectHint对网络FS的支持还是有问题的。
并且对OS版本也有要求
http://support.microsoft.com/kb/322726

是有很多局限,这个HANDLE还跟进程有关系,有时候系统进程好象还要出问题。
商务MSN:YanDong_8212@163.com
dreamsity
驱动小牛
驱动小牛
  • 注册日期2006-09-01
  • 最后登录2013-07-04
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望821点
  • 贡献值1点
  • 好评度68点
  • 原创分1分
  • 专家分0分
11楼#
发布于:2008-04-03 19:22
非常感谢!!!!又学到了一些东西,特别是CreateFile的实现。
一切都是时间问题!
eleqi
驱动小牛
驱动小牛
  • 注册日期2005-12-20
  • 最后登录2014-01-03
  • 粉丝4
  • 关注2
  • 积分172分
  • 威望1475点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2008-04-04 17:20
支持,学习!
CyberEagle
驱动牛犊
驱动牛犊
  • 注册日期2008-03-28
  • 最后登录2008-04-06
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2008-04-06 10:10
非常感谢,小弟刚急需这个。学习学习
qianjunhua
驱动小牛
驱动小牛
  • 注册日期2003-12-08
  • 最后登录2013-02-27
  • 粉丝11
  • 关注0
  • 积分712分
  • 威望1052点
  • 贡献值1点
  • 好评度57点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2008-04-10 14:37
是不是从nt source code里面 借了点代码啊?
iceburning
驱动牛犊
驱动牛犊
  • 注册日期2006-08-18
  • 最后登录2010-02-28
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望170点
  • 贡献值0点
  • 好评度39点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2008-04-10 15:36
请教devia 老大:
irp_mj_create 测试为啥不成功啊?

http://bbs.driverdevelop.com/htm_data/39/0804/110309.html
I Believe I Can Fly,I Believe I Can Touch The sky!
boywhp
驱动中牛
驱动中牛
  • 注册日期2007-08-09
  • 最后登录2015-04-24
  • 粉丝2
  • 关注0
  • 积分1105分
  • 威望515点
  • 贡献值0点
  • 好评度254点
  • 原创分1分
  • 专家分0分
16楼#
发布于:2008-04-11 10:46
感谢老大,拜读中
forward8467
驱动牛犊
驱动牛犊
  • 注册日期2008-04-09
  • 最后登录2008-07-26
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2008-04-12 12:55
新手学习中....................
驱网无线,快乐无限
greatman311
驱动牛犊
驱动牛犊
  • 注册日期2008-04-12
  • 最后登录2008-06-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望8点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2008-04-12 14:03
新手学习学习
fresharplite
驱动牛犊
驱动牛犊
  • 注册日期2005-08-23
  • 最后登录2013-09-06
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2008-04-12 23:02
初学者研究学习
上一页
游客

返回顶部