阅读:16606回复:50
scsiport实现的虚拟硬盘源代码放出
慎重申明
这份代码大量的参考copy了ms的toaster跟驱网的vdisk的代码 只有少部分是我自己修改的 一个是toaster的电源管理方面 一个是vdisk常常蓝屏方面(这个部分还是有一个问题,使用checked build的操作系统的朋友也许还是会遇到蓝屏,十分抱歉,我现在使用的机器跑checked build 版的操作系统速度慢得无法忍受,所以这个bug在checked build得os上还是没有解决) 我的编译环境是vs.net 2003 ddk安装目录是c:/winddk/3790 softice安装目录是c:/xxxxx(这些告诉你了也没有用) 请各位朋友自行搭建编译环境 安装使用的inf文件已经放到"bin/inf/"目录下面了 使用方法 1.自己编译3个工程,生产一个总线驱动,一个miniport驱动,一个test 2.运行添加硬件向导,指定bus.inf 3.在确信总线驱动安装完成的情况下,在c盘根目录下面放一个大小不小于100M的名字叫pal.iso的文件(他会是你虚拟出来的硬盘使用的镜像文件). 4.运行test.exe文件 5.新出现的硬件请更新他的驱动到miniport.inf 6.运行计算机管理,点击磁盘管理,不出意外会有一个初始化磁盘的向导出来,照着向导作下去...分区...格式化.. 7.要停止使用这个虚拟硬盘,请使用任务栏上的安全删除设备 8.安全删除以后,想要再次使用,请再运行test.exe 9.想要指定不同的文件名,想要使用多个虚拟硬盘(最多支持4个硬盘).请修改test这个工程, 10.想要实现更多的更xx的要求,请修改代码...... 以上无责任发言完毕..... 有问题可以到群里面讨论 [编辑 - 7/21/04 by tiamo] |
|
|
沙发#
发布于:2004-07-21 09:11
好,支持......
|
|
|
板凳#
发布于:2004-07-21 09:46
赞,自己写了一个bus driver来支持pnp,辛苦了。
很有用的,能不能稍微解释一下,最近太忙,没空仔细看code了。 |
|
地板#
发布于:2004-07-21 11:40
强烈支持
|
|
地下室#
发布于:2004-07-21 12:40
谁知道
这里的群是多少啊? 加我: QQ3000079 |
|
5楼#
发布于:2004-07-21 14:49
bus driver方面
要完成两个功能 一个是bus本身的fdo应该实现的功能 另外一个就是要负责枚举自己的总线上的设备,创建对应的pdo,处理发送到pdo的irp. bus driver要处理的irp很少 按照需要,很可能只是处理IRP_MJ_PNP跟IRP_MJ_POWER 其他的irp是可选的. 对于每个irp必须要分清楚他是发送给bus 本身的fdo还是发送给他枚举出来的pdo的,这个功能实现很简单,在device的extension里面加上一个标志就足够了. PNP的部分,start,stop,cancel stop,cancel remove,query stop,query remove,remove这些都是fdo跟pdo要处理的,对应surprise removal是可选的(只是说我的这个例子,他其实是强制必须处理的). 对应fdo还应该处理query device relations的busrelation 对于pdo要处理query id,query text,query resources,query resource requirements,query caps,query bus information,device usage notification,query device relations的target relations.这些pnp的minor function fdo的irp大部分要转发给下层的driver pdo的irp按照你自己总线的需要也许要转发,大多数都是直接完成irp 对于电源管理的irp bus的fdo会成为 bus device stack的电源策略主.他要处理query power跟set power. 对于set power,要分成两种,一个是set device power,这个又分成两种情况,一个是要增加device的电源,这里应该先设置一个completion rountine,然后PoCallDriver,在completion routine里面设置device 的电源,对于要减少device电源的,应当先设置device的电源,然后PoCallDriver,设置device的电源的时候要调用PoSetPowerState函数. 对于设置系统电源的irp,也是两种,一个是要增加系统电源的,也要先设置completion rountine,然后PoCallDriver,在completion routine里面调用PoRequestPowerIrp发送设置device power state的irp到整个device stack,等待这个irp全部被处理完,然后退出completion rountine. 对于减少系统电源的,先用PoRequestPowerIrp设置device 的电源,等待他完成,然后PoCallDriver. 对于pdo,相当简单,PoSetPowerState以后直接完成这个irp就够了. bus driver方面不算复杂.... |
|
6楼#
发布于:2004-07-21 22:05
强!
谢谢! |
|
|
7楼#
发布于:2004-07-22 08:48
先收着,以后好好研习一下,再赞。hoho
|
|
8楼#
发布于:2004-07-22 11:19
先先 贝, 下来收着,好好学习一下! 最近在看ndis的东东,准备写一个红外转usb的驱动。哪位大哥做过类似的,能不能介绍点资料? |
|
9楼#
发布于:2004-07-24 09:15
大概看了一下,发现没有source ,makefile,等文件,请问如何编译呢。
我一般是用ddk编译的。 不知你的编译方法。 |
|
|
10楼#
发布于:2004-07-25 23:23
scsiport具体体现在什么地方?
|
|
|
11楼#
发布于:2004-07-27 19:07
胗便copy一
|
|
12楼#
发布于:2004-07-27 19:11
偶用vs.net 2003的ide
|
|
13楼#
发布于:2004-08-12 20:49
好东西,不顶不行,如何参与讨论?
|
|
|
14楼#
发布于:2004-08-13 09:35
楼主的精神值得大家学习呀!!
|
|
|
15楼#
发布于:2004-08-13 09:35
好人心还是很多
|
|
|
16楼#
发布于:2004-08-27 11:12
楼主,我把你的代码改造成在2k下的C代码,bus可以安装,可是scsi的虚拟设备安装不正常是怎么回事啊,另哪里能找到VDISK的源码啊
|
|
17楼#
发布于:2004-08-28 15:32
楼主的精神值得好好学习
我安装bus的时候重启发现This device is not working properly because Windows cannot load the drivers required for this device. (Code 31), 然后test的时候失败SetupDiEnumDeviceInterfaces执行不成功下面的事情就没法做了,哪位遇到这问题么,是怎么解决的? ps:我的系统是windows2000 professional 英文版 |
|
18楼#
发布于:2004-09-01 11:04
支持楼主
|
|
19楼#
发布于:2004-09-01 15:02
好东西,谢谢楼主!
|
|
上一页
下一页