diamond99
驱动牛犊
驱动牛犊
  • 注册日期2002-05-10
  • 最后登录2002-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3013回复:7

如何使一个存储设备能够在Windows资源管理器中可见??

楼主#
更多 发布于:2002-05-15 16:41
比如一个自己开发的SCSI或者USB控制器带一组硬盘,如何在Windows资源管理器中能够看到这几个硬盘?
需要通过驱动程序实现还是Firmware实现,怎么实现呢?
请各位大侠给点思路,越详细越好,多谢~!
liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-15 17:16
对于WIN2000和WIN ME而言,由于操作系统本身已经内嵌支持USB 海量设备类的标准驱动,因此主机端驱动无须开发,只要写出相关的FIRM WARE就可以了。但是98不支持,因此,对于98系统而言,设备端的FIRM WARE和主机端的驱动程序都需要。明白?那个SCSI命令集有点繁,我现在也正在研究呢。有问题发邮件给我:zhangcl@i-net.com.cn
菜菜
cocky
驱动中牛
驱动中牛
  • 注册日期2002-04-23
  • 最后登录2012-05-14
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-15 18:05
要想实现几个逻辑单元需要自己写驱动吧
diamond99
驱动牛犊
驱动牛犊
  • 注册日期2002-05-10
  • 最后登录2002-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-15 18:43
谢谢大侠回答,这下USB的问题我明白了,但是SCSI控制器的我还不太明白。

由于我对SCSI命令集也不熟悉,那么不如以较为简单的IDE控制器为例,如果是在PCI板卡上扩展IDE硬盘,如果要资源管理器标出PCI板卡上的IDE硬盘(暂时不考虑逻辑分区的问题),那么是否必须在驱动程序中做些处理,怎样处理?
liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-15 20:11
对于ME和2K不用做特殊处理,只要设备端FIRM WARE知道主机会发哪些特定类命令以及如何回应主机就可以了。但是这个前提还是要清楚主机发了哪些命令过来以及命令的格式。IDE和SCSI是两种不同的命令接口,目前ME和2K上的自带UMSS驱动都支持这两种接口,只要FIRM WARE写对了,插上USB后,PC无需安装任何驱动就可以出现一个盘符。
对于98环境则必须要自己写主机端驱动了,对于这个驱动的入口大概是这样的:
======================================================
USB磁盘驱动程序是一个BUS DRIVER,它的主要入口如下:
NTSTATUS
DriverEntry(
            IN PDRIVER_OBJECT DriverObject,
            IN PUNICODE_STRING pRegistryPath
            )
{
#if    DBG
    DbgPrint(\"Enter UsbStore DriverEntry!\\n\");
#endif    
    DriverObject->DriverExtension->AddDevice = UsbStore_AddDevice;
    DriverObject->DriverUnload = UsbStore_Unload;
    DriverObject->DriverStartIo = UsbStore_StartIo;

    DriverObject->MajorFunction[IRP_MJ_CREATE] =
    DriverObject->MajorFunction[IRP_MJ_CLOSE]  = UsbStore_CreateClose;
    DriverObject->MajorFunction[IRP_MJ_READ]   =
    DriverObject->MajorFunction[IRP_MJ_WRITE]  = UsbStore_ReadWrite;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = UsbStore_DeviceIoControl;
    DriverObject->MajorFunction[IRP_MJ_SCSI]   = UsbStore_Scsi;
    DriverObject->MajorFunction[IRP_MJ_PNP]    = UsbStore_Pnp;
    DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = UsbStore_SystemControl;
    DriverObject->MajorFunction[IRP_MJ_POWER]  = UsbStore_Power;
    
    return STATUS_SUCCESS;
}
USB STORAGE DRIVER对设备的主要操作MajorFunction是IRP_MJ_SCSI,而不是IRP_MJ_READ 以及IRP_MJ_WRITE 。
USB STORAGE DRIVER的上层程序是CLASS DRIVER。CLASS DRIVER对上层的USB磁盘的读写等操作转换成
IRP_MJ_SCSI,USB STORAGE DRIVER根据USB CBI规范和BULK ONLY规范将上层DRIVER传送来的IRP_MJ_SCSI
的SRB(SCSI_REQUEST_BLOCK)的相关部分传递给设备。

======================================================
菜菜
laiqing
驱动小牛
驱动小牛
  • 注册日期2002-02-27
  • 最后登录2013-08-28
  • 粉丝5
  • 关注0
  • 积分46分
  • 威望104点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-05-16 14:58
那你现在对PC发那些命令(SCSI)到设备端熟悉吗?具体有哪些?
liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-05-16 15:09
对于usb硬盘来说,有下面的SCSI命令肯定需要处理: read(10), write(10) ,inquire, requestsense, testunitrdy. readcapability.
但是这只是我根据协议和例程的理解,还没有在调试板上获得证实,关于设备端的FIRM WARE,我正在调试中……
菜菜
yxy3115
驱动牛犊
驱动牛犊
  • 注册日期2002-03-12
  • 最后登录2004-03-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-05-21 13:04
对于WIN2000和WIN ME而言,由于操作系统本身已经内嵌支持USB 海量设备类的标准驱动,因此主机端驱动无须开发,只要写出相关的FIRM WARE就可以了。但是98不支持,因此,对于98系统而言,设备端的FIRM WARE和主机端的驱动程序都需要。明白?那个SCSI命令集有点繁,我现在也正在研究呢。有问题发邮件给我:zhangcl@i-net.com.cn


请指教应该先看什么样的资料,能否给我发一份,非常感谢!yxy3115@sohu.com
游客

返回顶部