阅读:2284回复:12
老生常谈:关于miniport 虚拟光驱
用scsiminiport 来实现虚拟光驱确实应该是个“尽人皆知”的事情了吧~~,但是可怜我还是有些不明白~~
sigh~~我下载了高人kanhai的例子,但是他的例子能运行么??我用的是xp pro, 编译了例子之后,用inf文件装上了生成的虚拟scsi adapter驱动,但是系统提示说是设备无法启动~~~ 各位有看过kanhai的例子的么? |
|
最新喜欢:![]() |
沙发#
发布于:2004-02-17 08:20
用scsiminiport 来实现虚拟光驱确实应该是个“尽人皆知”的事情了吧~~,但是可怜我还是有些不明白~~ 我试过,能用的。 |
|
|
板凳#
发布于:2004-02-17 12:40
用scsiminiport 来实现虚拟光驱确实应该是个“尽人皆知”的事情了吧~~,但是可怜我还是有些不明白~~ 没有下过,那里可下载,或者Mail给我一个,我测试一下看看 zhangmh@julong.com.cn |
|
|
地板#
发布于:2004-02-17 17:43
本站的下载区应该有,不过是很久以前的东西了,现在不知还能不能找到。
|
|
|
地下室#
发布于: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()?? 这样不行把?? 多谢~~ |
|
5楼#
发布于:2004-02-18 08:46
http://www.driverdevelop.com/forum/html_31076.html?1077029594 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,恐怕会有问题,所以我没有测试这种方式)。 |
|
|
6楼#
发布于:2004-02-18 12:07
同意楼上的。
在这儿传道授业解惑呢? :P :D |
|
7楼#
发布于:2004-02-18 12:59
同意楼上的。 献丑了 :D :D :D |
|
|
8楼#
发布于:2004-02-18 13:03
[quote]http://www.driverdevelop.com/forum/html_31076.html?1077029594 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 |
|
|
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 |
|
10楼#
发布于:2004-02-20 09:54
经seaquester高人指点,茅塞顿开,再三感谢~ (虽然kanhai的例子还是运行不起来:() 不是啊,我是说 StartIo 例程是DISPATCH_LEVEL,像DriverEntry就肯定是PASSIVE_LEVEL。 |
|
|
11楼#
发布于:2004-02-20 23:29
原来如此~~
好,我去试试~~ 可能还有问题请教,不过结贴先~~ |
|
12楼#
发布于:2004-12-22 16:40
|
|