FredLiu
驱动牛犊
驱动牛犊
  • 注册日期2004-01-07
  • 最后登录2004-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2284回复:12

老生常谈:关于miniport 虚拟光驱

楼主#
更多 发布于:2004-02-17 00:35
用scsiminiport 来实现虚拟光驱确实应该是个“尽人皆知”的事情了吧~~,但是可怜我还是有些不明白~~
sigh~~我下载了高人kanhai的例子,但是他的例子能运行么??我用的是xp pro, 编译了例子之后,用inf文件装上了生成的虚拟scsi adapter驱动,但是系统提示说是设备无法启动~~~
各位有看过kanhai的例子的么?

最新喜欢:

TOMG2004TOMG20...
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
沙发#
发布于:2004-02-17 08:20
用scsiminiport 来实现虚拟光驱确实应该是个“尽人皆知”的事情了吧~~,但是可怜我还是有些不明白~~
sigh~~我下载了高人kanhai的例子,但是他的例子能运行么??我用的是xp pro, 编译了例子之后,用inf文件装上了生成的虚拟scsi adapter驱动,但是系统提示说是设备无法启动~~~
各位有看过kanhai的例子的么?


我试过,能用的。
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-17 12:40
用scsiminiport 来实现虚拟光驱确实应该是个“尽人皆知”的事情了吧~~,但是可怜我还是有些不明白~~
sigh~~我下载了高人kanhai的例子,但是他的例子能运行么??我用的是xp pro, 编译了例子之后,用inf文件装上了生成的虚拟scsi adapter驱动,但是系统提示说是设备无法启动~~~
各位有看过kanhai的例子的么?

没有下过,那里可下载,或者Mail给我一个,我测试一下看看
zhangmh@julong.com.cn
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
地板#
发布于:2004-02-17 17:43
本站的下载区应该有,不过是很久以前的东西了,现在不知还能不能找到。
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
FredLiu
驱动牛犊
驱动牛犊
  • 注册日期2004-01-07
  • 最后登录2004-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-02-18 00:14
http://www.driverdevelop.com/forum/html_31076.html?1077029594
AllenZh,这个贴子里面有

seaquester: 你是在2k下用2kDDK编译测试的么?莫非是因为我用的是xp的缘故??(例子应该是为2k写的,他的source 文件里面就是指到2kDDK)
好了,不管能不能用,我看过了代码,了解了一些大概思路,现在基本知道了如何虚拟出来一个cdrom,但是对于虚拟光驱如何读镜像文件还是有疑问:
1:kanhai 的例子应该是在一个passive_level 的worker thread中用ZwXXX来读文件;用miniport的timer来模拟硬件中断请求,但是具体这两者(worker thread和timer)是如何配合工作的我就看不太明白了~~ 望点拨一二(讲讲原理就行)~~
2:如果看了kanhai 的代码的话,在他的miniport xxxstartIo()中,好像是直接调用ZwReadFile()?? 这样不行把??

多谢~~
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
5楼#
发布于:2004-02-18 08:46
http://www.driverdevelop.com/forum/html_31076.html?1077029594
AllenZh,这个贴子里面有

seaquester: 你是在2k下用2kDDK编译测试的么?莫非是因为我用的是xp的缘故??(例子应该是为2k写的,他的source 文件里面就是指到2kDDK)
好了,不管能不能用,我看过了代码,了解了一些大概思路,现在基本知道了如何虚拟出来一个cdrom,但是对于虚拟光驱如何读镜像文件还是有疑问:
1:kanhai 的例子应该是在一个passive_level 的worker thread中用ZwXXX来读文件;用miniport的timer来模拟硬件中断请求,但是具体这两者(worker thread和timer)是如何配合工作的我就看不太明白了~~ 望点拨一二(讲讲原理就行)~~
2:如果看了kanhai 的代码的话,在他的miniport xxxstartIo()中,好像是直接调用ZwReadFile()?? 这样不行把??

多谢~~


Win2k和WinXP我都试过,好像稍微修改了一下,记不太清了,应该没有大问题,miniport驱动可以在Win9x/2K/XP下源代码兼容的,尤其是Win2K和WinXP,兼容得非常好。
他在xxxstartIo中用ExInterlockedInsertTailList将SRB加入队列,然后KeSetEvent通知worker thread开始处理SRB队列。

确实是在一个Worker thread中用ZwXXX来读文件的。还有另一种方式就是在他的miniport xxxstartIo()中直接调用ZwReadFile(),这段代码被一个宏NOTHREAD_TEST封掉了(ZwReadFile必须在 PASSIVE_LEVEL 调用,而miniport xxxstartIo的IRQL可能在DISPATCH_LEVEL,恐怕会有问题,所以我没有测试这种方式)。
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
flyonearth
驱动中牛
驱动中牛
  • 注册日期2002-12-25
  • 最后登录2009-07-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望30点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-02-18 12:07
同意楼上的。
在这儿传道授业解惑呢? :P :D
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
7楼#
发布于:2004-02-18 12:59
同意楼上的。
在这儿传道授业解惑呢? :P :D


献丑了 :D :D :D
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
8楼#
发布于:2004-02-18 13:03
[quote]http://www.driverdevelop.com/forum/html_31076.html?1077029594
AllenZh,这个贴子里面有

seaquester: 你是在2k下用2kDDK编译测试的么?莫非是因为我用的是xp的缘故??(例子应该是为2k写的,他的source 文件里面就是指到2kDDK)
好了,不管能不能用,我看过了代码,了解了一些大概思路,现在基本知道了如何虚拟出来一个cdrom,但是对于虚拟光驱如何读镜像文件还是有疑问:
1:kanhai 的例子应该是在一个passive_level 的worker thread中用ZwXXX来读文件;用miniport的timer来模拟硬件中断请求,但是具体这两者(worker thread和timer)是如何配合工作的我就看不太明白了~~ 望点拨一二(讲讲原理就行)~~
2:如果看了kanhai 的代码的话,在他的miniport xxxstartIo()中,好像是直接调用ZwReadFile()?? 这样不行把??

多谢~~


Win2k和WinXP我都试过,好像稍微修改了一下,记不太清了,应该没有大问题,miniport驱动可以在Win9x/2K/XP下源代码兼容的,尤其是Win2K和WinXP,兼容得非常好。
他在xxxstartIo中用ExInterlockedInsertTailList将SRB加入队列,然后KeSetEvent通知worker thread开始处理SRB队列。

确实是在一个Worker thread中用ZwXXX来读文件的。还有另一种方式就是在他的miniport xxxstartIo()中直接调用ZwReadFile(),这段代码被一个宏NOTHREAD_TEST封掉了(ZwReadFile必须在 PASSIVE_LEVEL 调用,而miniport xxxstartIo的IRQL可能在DISPATCH_LEVEL,恐怕会有问题,所以我没有测试这种方式)。
 [/quote]

至于其中得Timer(WorkerTimer),用来结束已经完成的SRB
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
FredLiu
驱动牛犊
驱动牛犊
  • 注册日期2004-01-07
  • 最后登录2004-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-02-19 21:21
经seaquester高人指点,茅塞顿开,再三感谢~ (虽然kanhai的例子还是运行不起来:()
揭帖前尚有一小问:
ddk文档中说: Caller of this routine (PsCreateSystemThread()),must be running at IRQL PASSIVE_LEVEL
但是正如你提到的, miniport 的irql 是DISPATCH_LEVEL阿??? :o
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
10楼#
发布于:2004-02-20 09:54
经seaquester高人指点,茅塞顿开,再三感谢~ (虽然kanhai的例子还是运行不起来:()
揭帖前尚有一小问:
ddk文档中说: Caller of this routine (PsCreateSystemThread()),must be running at IRQL PASSIVE_LEVEL
但是正如你提到的, miniport 的irql 是DISPATCH_LEVEL阿??? :o  


不是啊,我是说 StartIo 例程是DISPATCH_LEVEL,像DriverEntry就肯定是PASSIVE_LEVEL。
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
FredLiu
驱动牛犊
驱动牛犊
  • 注册日期2004-01-07
  • 最后登录2004-07-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-02-20 23:29
原来如此~~
好,我去试试~~
可能还有问题请教,不过结贴先~~
net-wolf
驱动牛犊
驱动牛犊
  • 注册日期2003-06-19
  • 最后登录2005-03-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-12-22 16:40
kanhai的例子在哪里?
上面的连接不好用啊?
哪位愿意发给我一份?
 mydna@126.com

[编辑 -  12/22/04 by  net-wolf]
游客

返回顶部