terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:3945回复:20

scsi miniport的问题

楼主#
更多 发布于:2004-07-12 15:26
小弟现在想写一个scsi miniport driver,做一个虚拟磁盘,但是是需要能管理的,就是能够用命令mount和umount的,不能系统起来的时候同时起来,我看vdisk里面是用deviceiocontrol实现的,但是还是不太理解,我以前写miniport的时候都是driver起来的时候,system会发read capacity这些东西下来,怎么可以控制系统什么时候发这个东西过来?难道需要pnp?高手指点一下。

最新喜欢:

hongsinghongsi...
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-12 15:32
我记得N久以前楼主就开始了SCSI Miniport的编写,到现在我看也有2-3个月了吧,怎么还搞不定?
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-12 15:38
slwqw,见笑了,呵呵,以前的东西差不多5,1就好了,现在已经没有怎么写了,基本上debug,不过最近有新的要求了,就是要求能够mount和umount,我就傻眼了,实在搞不明白这个要怎么处理的,给点意见吧,还有谁有该死的2k的code的全部啊?想看啊
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-12 19:49
我使用的方法就是VDISK使用的方法 :)
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-13 09:20
是不是需要call 一下IOCTL_SCSI_RESCAN_BUS才能让disk马上显示出来?
cidentifier
驱动牛犊
驱动牛犊
  • 注册日期2003-11-13
  • 最后登录2009-09-20
  • 粉丝1
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-13 09:22
我最近也在做scsi miniport,不过我是想把磁盘映像开在服务器上,然后再客户机上虚拟出一个磁盘分区。但利用scsiminiport和tdi实现后,发现客户机系统经常莫名的挂起(沙漏),偶尔会受到bus reset。正好在网上找到一个贴子,一问两答,在说利用ms的scsiminiport不适合做virtual disk,不知道各位的看法是什么?
以下是他们的说法:

Shakeel:
I am writing a device driver to add virtual partition/Hard disk in windows that partition will lasts until PC reboots. for win 9x/2000/xp/nt .kindly tell how SCSI mini port driver sample provided in DDKs can be helpful in this regards what changes will be required to do above task.
I shall be thankful to you in this regrds

Don Burn:
Do not attempt virtual with a SCSI miniport, the SCSI miniport model is only intended physical hardware. Trying to use the SCSI miniport for a virtual device requires a number of terrible hacks that produce more crashes than
useful effort. For NT+ look at the disk driver as a basis.

Gary G. Little:
It can't, without playing outside the sandbox and violating most of the rules for DDK/ScsiPort development. The recommended way to do this is to use a 3rd party SCSI support library such as can be found at www.storagecraft.com.

As Don stated, both SCSIPORT and STORPORT expect underlying hardware. Without that hardware you are restricted to quantum timers, typically 10 ms, which will royally destroy any hopes you may have for decent data rates.

control it, or forget it
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-07-13 10:11
scsi miniport我个人觉得没有什么不好的,除了performance的问题需要你花点时间搞定。bus reset有可能是你scsiportnotification的地方不对。
cidentifier
驱动牛犊
驱动牛犊
  • 注册日期2003-11-13
  • 最后登录2009-09-20
  • 粉丝1
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-07-13 10:44
scsi miniport我个人觉得没有什么不好的,除了performance的问
题需要你花点时间搞定。
 
        关于performance,port给miniport完成操作的时间限制是多少,是秒一级的吧,是否miniport在这个给定时间完成就ok了。


bus reset有可能是你scsiportnotification的地方不对。

        能不能说的详细一些。
        我的ScsiPortNotification主要用来完成scsi请求,下一个scsi请求,以及RequestTimerCall
control it, or forget it
cidentifier
驱动牛犊
驱动牛犊
  • 注册日期2003-11-13
  • 最后登录2009-09-20
  • 粉丝1
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-07-13 10:47
哪位用过vsport呀,好像是一个专门写虚拟scsi驱动的开发包,哪里能下载呀?
control it, or forget it
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-07-13 10:47
port给miniport完成操作的时间限制是多少?

10ms,

我的ScsiPortNotification主要用来完成scsi请求,下一个scsi请求,以及RequestTimerCall
你是什么时候调用ScsiPortNotification(requestcomplete,)的?
cidentifier
驱动牛犊
驱动牛犊
  • 注册日期2003-11-13
  • 最后登录2009-09-20
  • 粉丝1
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-07-13 11:54
在SCSI_REQUEST_BLOCK结构中有一个TimeOutValue字段,DDK对该字段的解释是:
Indicates the interval in seconds that the request can execute before the OS-specific port driver might consider it timed out. Miniport drivers are not required to time requests because the port driver already does.

说明port对miniport的时间限制是秒一级的(in seconds),你说10ms,到底哪个对呢?你的10ms的信息是从哪里得出的呢?抱歉,我没有亲自打印TimeOutValue的值。

我对ScsiPortNotification(requestcomplete,)的调用时机是在HwVDiskTimer函数中,工作线程处理完一个srb之后,将它插入一个完成队列中,然后,HwVDiskTimer定时从队列中取出srb,调用ReturnFromStartIo()完成srb。以下是代码...,请指正

VOID
HwVDiskTimer(
IN PVOID HwDeviceExtension
)
{
PLIST_ENTRY ListEntry;
PSCSI_REQUEST_BLOCK pSrb;
PVDISK_EXTENSION pExt = (PVDISK_EXTENSION)HwDeviceExtension;
unsigned int i;

// 从完成队列头部取出完成的SRB
ListEntry = ExInterlockedRemoveHeadList (
&pExt->CompletedSrbList,
&pExt->CompletedSrbListLock
);

while( ListEntry!=NULL )
{
pSrb = SRB_FROM_ENTRY(ListEntry);

KdPrint(("\nA SRB Completed\n"));

ReturnFromStartIo(
pExt,
pSrb
);

// 从完成队列头部取出完成的SRB
ListEntry = ExInterlockedRemoveHeadList (
&pExt->CompletedSrbList,
&pExt->CompletedSrbListLock
);
}

// 这个定时器不是周期性的,每次响应后必须重新设置
ScsiPortNotification(RequestTimerCall,HwDeviceExtension,HwVDiskTimer, VDISK_TIMER_PERIOD);
}

VOID
ReturnFromStartIo(
IN PVOID  HwDeviceExtension,
IN PSCSI_REQUEST_BLOCK  Srb
)
{
// 1st, RequestComplete ...
ScsiPortNotification(
RequestComplete,
HwDeviceExtension,
Srb
);

// 2nd, NextRequest ...
ScsiPortNotification(
NextRequest,
HwDeviceExtension,
NULL
);

return;
}
control it, or forget it
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-07-13 13:43
说明port对miniport的时间限制是秒一级的(in seconds),你说10ms,到底哪个对呢?你的10ms的信息是从哪里得出的呢?这个是ddk里面说的,是针对ScsiPortNotification(RequestTimerCall,)方法来说的,

看你的程序好像没什么问题啊,应该不是每次都会reset吧?
cidentifier
驱动牛犊
驱动牛犊
  • 注册日期2003-11-13
  • 最后登录2009-09-20
  • 粉丝1
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-07-13 17:12
看你的程序好像没什么问题啊,应该不是每次都会reset吧?

不是每次都reset,因为我把i/o操作重定向到网络,所以,我怀疑操作会导致超时,如果磁盘映像在本地可能没问题吧(我猜你的磁盘影像应该在本地)。

另,这个是ddk里面说的超时限制为10ms,能把原文引用一下吗?
是不是超时就会导致bus reset呀?
如果bus reset之后,我怎样从bus reset状态恢复过来,重新进行i/o操作呢?
control it, or forget it
kangzh
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2012-08-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-07-14 14:03
scsi好象10s左右没有反馈就会reset,所以在这10s内你一定要反馈.
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-07-14 14:59
我使用的方法就是VDISK使用的方法 :)


我要umount我怎么做啊?
kangzh
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2012-08-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-07-14 15:20
好像kan hai的那个例子的前身就实现了这个功能啊,估计你看的就是那个吧,使用deviceio方式
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-07-14 17:19
[quote]我使用的方法就是VDISK使用的方法 :)


我要umount我怎么做啊? [/quote]

我直接使用SetupDiRemoveDevice()等SetupAPI例程从设备管理器中删除硬盘设备。
kangzh
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2012-08-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-07-14 17:44
terrychen:你的虚拟磁盘能够作为启动盘吗?我做了一个,但被卡住了,不能作为启动盘,大家有没有办法解决?
gongbin_net
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2005-06-07
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2005-03-17 15:50
楼主,你的那个作的如何阿,我现在也要作那个,真是郁闷阿,能否把你那个TDI的那个东西给我一分阿,我们大概做的差不多。flashget2046@163.com
cch7701
驱动牛犊
驱动牛犊
  • 注册日期2002-08-25
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2005-03-18 12:19
楼主,我想问几个问题:我们公司研发了一块PCI卡,上面有SCSI控制芯片可以外接SCSI盘,但盘上的东西,操作系统是看不到的。现在希望能使操作系统看到磁盘,就像标准的SCSI卡挂盘一样。我想问:
1、可以写一个标准的SCSI卡的Miniport驱动程序来驱动这块PCI卡吗??一般的SCSI卡都有BIOS,我们的卡没有这样可以吗??
2、如果对卡只写一个WDM的驱动程序,然后再写一个虚拟的SCSI卡的驱动程序。从虚拟的SCSI的驱动中能访问WDM的驱动程序吗??
3、有其他的好方法可以实现如前所述的效果吗??
恳请楼主和各位高手指点指点。
上一页
游客

返回顶部