danxuezx
驱动牛犊
驱动牛犊
  • 注册日期2009-03-01
  • 最后登录2011-09-18
  • 粉丝0
  • 关注0
  • 积分75分
  • 威望601点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3861回复:12

有看过tiamodisk源码的朋友恳请给指点一下,非常感谢……

楼主#
更多 发布于:2010-04-12 09:43
源代码下载[/url]前几天下载了tiamo的范例:基于SCSI Miniport 实现的虚拟磁盘。
下下来安装后用hdtune进行测试,发现其读写速度很慢,只有0.2M/s,而正常的磁盘速度达到70M/s。
 恳请各位大侠给指点一二。

第一次在这里发帖,不足之处还望各位大侠海涵……

附件名称/大小 下载次数 最后更新
SCSI-ASPI-DISK.zip (422KB)  13 2010-04-12 09:43

最新喜欢:

wangzaiwangza...
nangfeng
驱动牛犊
驱动牛犊
  • 注册日期2006-06-03
  • 最后登录2014-07-23
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望183点
  • 贡献值0点
  • 好评度51点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-04-12 12:50
速度很慢有几个原因:
1:scsiport执行效率不高,所以微软在win2k3以后就推出storport来取代scsiport.
2:对读写I/O队列处理不够完善。

你可以参照VHDMOUNT,在网上可以找到。这是微软的虚拟磁盘,它就不是用scsiport。它的读写速度就很快。
danxuezx
驱动牛犊
驱动牛犊
  • 注册日期2009-03-01
  • 最后登录2011-09-18
  • 粉丝0
  • 关注0
  • 积分75分
  • 威望601点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-04-12 13:04
感谢楼上大牛指点,我去找找VHDMOUNT看看。

在win7中自带一个把文件虚拟成磁盘的,不知道有没有大牛研究过……
danxuezx
驱动牛犊
驱动牛犊
  • 注册日期2009-03-01
  • 最后登录2011-09-18
  • 粉丝0
  • 关注0
  • 积分75分
  • 威望601点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2010-04-12 18:05
那个VHDMOUNT有源代码参考没……
nangfeng
驱动牛犊
驱动牛犊
  • 注册日期2006-06-03
  • 最后登录2014-07-23
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望183点
  • 贡献值0点
  • 好评度51点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2010-04-12 18:54
VHDMOUNT没源码,但你可以用IDA看一下,也许对你有所启发。另外网上有一个例子VSCSIDISK,你可以下下来参考一下,它的架构和VHDMOUNT差不多。win7的虚拟磁盘的架构用的是storport,这也说明storport确实比scsiport有所改善。
danxuezx
驱动牛犊
驱动牛犊
  • 注册日期2009-03-01
  • 最后登录2011-09-18
  • 粉丝0
  • 关注0
  • 积分75分
  • 威望601点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2010-04-13 08:58
找到了VSCSIDISK,去和tamodisk对比一下。storport性能的确比scsiport好,另外它支持RAID
danxuezx
驱动牛犊
驱动牛犊
  • 注册日期2009-03-01
  • 最后登录2011-09-18
  • 粉丝0
  • 关注0
  • 积分75分
  • 威望601点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2010-04-13 14:30
VSCSIDISK的源代码初步看了一遍,它只能虚拟出一块磁盘来,不知道是否有人修改过这块让它可以虚拟出多块硬盘 。
感觉改动好像不小。
附件名称/大小 下载次数 最后更新
VScsiDisk.zip (898KB)  18 2010-04-13 14:30
danxuezx
驱动牛犊
驱动牛犊
  • 注册日期2009-03-01
  • 最后登录2011-09-18
  • 粉丝0
  • 关注0
  • 积分75分
  • 威望601点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2010-04-14 16:48
VSCSIDISK代码在win7下蓝屏,报0x19.磁碟机在磁碟找不到 持定的磁区或磁轨
danxuezx
驱动牛犊
驱动牛犊
  • 注册日期2009-03-01
  • 最后登录2011-09-18
  • 粉丝0
  • 关注0
  • 积分75分
  • 威望601点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2010-04-17 07:46
VSCSIDISK加载后蓝屏(在XP下也是),如果用windbg跟踪的时候又没有问题。接下来该怎样调试呢?
另外有朋友有不出错的虚拟磁盘的例子,恳请给传一份作为参考,学习一下……
zhangxun_07@126.com
tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
9楼#
发布于:2010-04-22 17:52
據他們說
讀寫慢是因為
1.timer觸發就決定了他快不鳥
2.zwcreatefile的時候填錯了一個參數,文件打開方式沒對.

垃圾代碼
見笑了
danxuezx
驱动牛犊
驱动牛犊
  • 注册日期2009-03-01
  • 最后登录2011-09-18
  • 粉丝0
  • 关注0
  • 积分75分
  • 威望601点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2010-04-23 10:10
哇,见到原作者了,激动。
我参考了那个VScsiDisk和ddk中toaster的例子重新做了。

非常感谢您放出来的代码,跟着您的例子对小端口驱动入了点门。非常感谢。

不过还有个问题想向您请教一下:

Irp的stack中封装了SCSI命令包。
NTSTATUS   Pdo_InternalCotrol(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp
    )
{
    NTSTATUS            status;
    PIO_STACK_LOCATION  irpStack;
    PSCSI_REQUEST_BLOCK srb;
    PCDB                cdb;

    PAGED_CODE ();
    KdPrint(("Pdo_InternalCotrol ++\n"));
 
    irpStack = IoGetCurrentIrpStackLocation(Irp);

    srb = irpStack->Parameters.Scsi.Srb;
    cdb = (PCDB)srb->Cdb;
                     srb->SrbStatus = SRB_STATUS_SUCCESS;
    Irp->IoStatus.Information = 0;
//接下来需要对srb中的命令进行处理了
          switch(srb->Function)
                     {
                         case SRB_FUNCTION_EXECUTE_SCSI:
                                  {
                                             //这里需要处理SCSI command,也就是您示例代码中processscsi.cpp中的一组函数
                      这里我遇到问题了,cdb中封装了CDB6、CDB10、CDB12、CDB16等结构。
                      不同的windows 系统会发不同的命令。有没有方法动态获得程序运行的系统到底用的是哪一套命令呢?
                                  }
                           break;
                           //其它代码
                     }
    }

    
tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
11楼#
发布于:2010-05-03 16:36
你可以分析cdb中的op来获取某个命令的类型

windows使用的是一套固定的scsiop

这个列表我倒是没在什么地方见过完整的总结好的
但是classpnp,disk,cdrom等等这些都是有源代码的.

windows使用的scsiop集中都在classpnp里面
danxuezx
驱动牛犊
驱动牛犊
  • 注册日期2009-03-01
  • 最后登录2011-09-18
  • 粉丝0
  • 关注0
  • 积分75分
  • 威望601点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2010-05-05 16:39
非常感谢tiamo大侠指点迷津
游客

返回顶部