tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
阅读:16606回复:50

scsiport实现的虚拟硬盘源代码放出

楼主#
更多 发布于:2004-07-21 02:11
慎重申明
这份代码大量的参考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_tiamoDisk.rar (35KB)  1681

最新喜欢:

wangzaiwangza... mz_zhangmz_zha...
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2004-07-21 09:11
好,支持......
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-21 09:46
赞,自己写了一个bus driver来支持pnp,辛苦了。
很有用的,能不能稍微解释一下,最近太忙,没空仔细看code了。
kangzh
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2012-08-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-21 11:40
强烈支持
freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-21 12:40
谁知道
这里的群是多少啊?

加我:
QQ3000079
tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
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方面不算复杂....
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-07-21 22:05
强!
谢谢!
省元坊
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-07-22 08:48
先收着,以后好好研习一下,再赞。hoho
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-07-22 11:19

先先
 贝, 下来收着,好好学习一下!

最近在看ndis的东东,准备写一个红外转usb的驱动。哪位大哥做过类似的,能不能介绍点资料?
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-07-24 09:15
大概看了一下,发现没有source ,makefile,等文件,请问如何编译呢。
我一般是用ddk编译的。
不知你的编译方法。
不限容量的免费邮箱 www.k65.net
ygmlq
驱动牛犊
驱动牛犊
  • 注册日期2002-05-27
  • 最后登录2014-11-07
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望23点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-07-25 23:23
scsiport具体体现在什么地方?
生死有命,富贵由天
tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
11楼#
发布于:2004-07-27 19:07
胗便copy一
tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
12楼#
发布于:2004-07-27 19:11
偶用vs.net 2003的ide
liuyan1
驱动老牛
驱动老牛
  • 注册日期2001-08-27
  • 最后登录2023-04-18
  • 粉丝0
  • 关注0
  • 积分1031分
  • 威望477点
  • 贡献值0点
  • 好评度187点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2004-08-12 20:49
好东西,不顶不行,如何参与讨论?
楼上的客,楼下的客,听我老坎说明白,要苛屎有草纸,不要扯我的麦席子,要苛尿有夜壶,不要在床上划地图。
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-08-13 09:35
楼主的精神值得大家学习呀!!
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-08-13 09:35
好人心还是很多
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
Hero2004
驱动牛犊
驱动牛犊
  • 注册日期2004-08-06
  • 最后登录2004-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-08-27 11:12
楼主,我把你的代码改造成在2k下的C代码,bus可以安装,可是scsi的虚拟设备安装不正常是怎么回事啊,另哪里能找到VDISK的源码啊
hangzhoustayer
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2006-06-19
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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 英文版
chengxueyang
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2007-08-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-09-01 11:04
支持楼主
wjhwdm
驱动牛犊
驱动牛犊
  • 注册日期2002-12-11
  • 最后登录2011-01-20
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-09-01 15:02
好东西,谢谢楼主!
上一页
游客

返回顶部