danier
驱动牛犊
驱动牛犊
  • 注册日期2002-03-29
  • 最后登录2002-04-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:4756回复:15

请求斑竹帮助--急:关于Wim98 UMSS(USB Mass Storage Sample)

楼主#
更多 发布于:2002-04-15 14:11
我下栽了微软的Wim98 UMSS(USB Mass Storage Sample),编译成功,
可以读写优盘。
读其源代码,发现没有读和写的DispatchIrp。只有ProcessSysControlIrp、ProcessPnPIrp、ProcessPowerIrp、
请问读和写的DispatchIrp在哪?

我是一名初学者,希望斑竹多加关照。谢谢!

最新喜欢:

changbanpochangb...
qiuzhenqing
驱动牛犊
驱动牛犊
  • 注册日期2006-07-13
  • 最后登录2009-11-09
  • 粉丝0
  • 关注0
  • 积分610分
  • 威望62点
  • 贡献值0点
  • 好评度61点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2007-09-13 15:44
找找xp的UMSS
zgfish
驱动牛犊
驱动牛犊
  • 注册日期2003-03-09
  • 最后登录2004-10-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-12 10:28
找到了,原来就在驱动开发网里就有啊,呵呵
热带飞鱼
zgfish
驱动牛犊
驱动牛犊
  • 注册日期2003-03-09
  • 最后登录2004-10-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-12 10:23
各位大哥,在那可以下到这个UMSS?给个地址阿啊,多谢了
热带飞鱼
danier
驱动牛犊
驱动牛犊
  • 注册日期2002-03-29
  • 最后登录2002-04-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-04-16 10:06
很同意上面的大虾的想法。
但是我对vxd 不了解,能否详细解释一下IFS(可安装的文件系统)和
IOS(window98 i/o subsystem manager),非常感谢!

(VxD)
IFS
|
(VxD)
IOS
我认为vxd将over,不知道这种想法是否right.
Nouk
驱动中牛
驱动中牛
  • 注册日期2001-08-22
  • 最后登录2006-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-04-16 09:51
I think...

(VxD)
IFS
|
(VxD)
IOS
|
(VxD)
IOS Port Driver (The PDR Sample.)
|  
(WDM)        
USB Mass storage Driver (The SYS Sample.)
|
(WDM)        
USB Class Driver
Taiwan's Driver Developer
danier
驱动牛犊
驱动牛犊
  • 注册日期2002-03-29
  • 最后登录2002-04-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-04-16 09:02
file system virtual device driver
这是个什么东东!我觉得应该是
 win32(file system)
     |
    vxd
     |
USB Mass storage Device    
     |
USB class Driver
                
          
danier
驱动牛犊
驱动牛犊
  • 注册日期2002-03-29
  • 最后登录2002-04-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-04-15 19:59
我看了,但是由于不太懂vxd.
我看到的是
读、写应该是UMSS_BULKTransfer.
由win32发出io请求,vxd获得,发出pfn....--->umss_startrequest
--->umss_bulkonlystartIo--->umss_bulktransfer.

对吗?请指教!
wolflee
驱动牛犊
驱动牛犊
  • 注册日期2002-01-04
  • 最后登录2012-06-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-04-15 19:47
看来你还没有看懂这个Source code,你可以仔细的看一下你下载的Source code。它其实就是我说的这种结构,你可以直接在这个source code上面修改。
Driver Developer www.soforge.com
danier
驱动牛犊
驱动牛犊
  • 注册日期2002-03-29
  • 最后登录2002-04-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-04-15 19:23
file system
|
file system virtual device driver
|
USB class Driver
|
USB class Driver

file system virtual device driver 应该是win98的vxd.
USB class Driver、USB class Driver 应该是wdm.找到vxd-->wdm
的入口点。
我想不用实现file system virtual device driver,而是找到对应
的在wdm中的read和write.至于file system virtual device driver
如何读写是vxd的事。也就是我们不需要更改pdr程序。

我的想法对吗,请指教!
wolflee
驱动牛犊
驱动牛犊
  • 注册日期2002-01-04
  • 最后登录2012-06-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-04-15 19:03

USB Mass Storage driver for win98架构如下:

            file system
                 |
           file system virtual device driver
                 |
           USB class Driver
                 |
           USB Mass storage Device    

你需要实现file system virtual device driver和USB Driver。USB Driver没有什么特别的,它分成CBI和Bulk only两种。

Driver Developer www.soforge.com
danier
驱动牛犊
驱动牛犊
  • 注册日期2002-03-29
  • 最后登录2002-04-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-04-15 18:45
DriverObject->MajorFunction[IRP_MJ_CREATE] = UMSS_DispatchIrp;
    DriverObject->MajorFunction[IRP_MJ_CLOSE] = UMSS_DispatchIrp;
    DriverObject->DriverUnload = UMSS_Unload;

    // User mode DeviceIoControl() calls will be routed here
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = UMSS_DispatchIrp;

    // User mode ReadFile()/WriteFile() calls will be routed here
    DriverObject->MajorFunction[IRP_MJ_WRITE] = UMSS_DispatchIrp;
    DriverObject->MajorFunction[IRP_MJ_READ] = UMSS_DispatchIrp;

    // routines for handling system PNP and power management requests
    DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = UMSS_DispatchIrp;
    DriverObject->MajorFunction[IRP_MJ_PNP] = UMSS_DispatchIrp;
    DriverObject->MajorFunction[IRP_MJ_POWER] = UMSS_DispatchIrp;

f (DO_FDO == DeviceExtension->DeviceObjectType)
    {
        switch (IrpStack->MajorFunction)
        {
            case IRP_MJ_SYSTEM_CONTROL:
                ntStatus = UMSS_ProcessSysControlIrp(DeviceObject, Irp);
                break;

            case IRP_MJ_PNP:
                ntStatus = UMSS_ProcessPnPIrp(DeviceObject, Irp);
                break;

            case IRP_MJ_POWER:
                ntStatus = UMSS_ProcessPowerIrp(DeviceObject, Irp);
                break;
        }
    }
    else if (DO_PDO == DeviceExtension->DeviceObjectType)
    {
        switch (IrpStack->MajorFunction)
        {
            case IRP_MJ_PNP:
                ntStatus = UMSS_PdoProcessPnPIrp(DeviceObject, Irp);
                break;

            case IRP_MJ_POWER:
                ntStatus = UMSS_PdoProcessPowerIrp(DeviceObject, Irp);
                break;
        }

        Irp->IoStatus.Status = ntStatus;
        IoCompleteRequest(Irp, IO_NO_INCREMENT);
    }

你看了源程序了吗,你的代码在那里?

Owen.Guo
驱动中牛
驱动中牛
  • 注册日期2001-03-30
  • 最后登录2012-03-29
  • 粉丝0
  • 关注1
  • 积分402分
  • 威望260点
  • 贡献值0点
  • 好评度26点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-04-15 18:36
extern \"C\"
NTSTATUS DriverEntry(   IN PDRIVER_OBJECT DriverObject,
                        IN PUNICODE_STRING RegistryPath)
{
    NTSTATUS status = STATUS_SUCCESS;

#if DBG
    DebugPrintInit(\"Vqc checked\");
#else
    DebugPrintInit(\"Vqc free\");
#endif

    DebugPrint(\"RegistryPath is %T\",RegistryPath);

    // Export other driver entry points...
    DriverObject->DriverExtension->AddDevice = VqcAddDevice;
    DriverObject->DriverStartIo = VqcStartIo;
    DriverObject->DriverUnload = VqcUnload;

    DriverObject->MajorFunction[IRP_MJ_CREATE] = VqcCreate;
    DriverObject->MajorFunction[IRP_MJ_CLOSE] = VqcClose;

    DriverObject->MajorFunction[IRP_MJ_PNP] = VqcPnp;
    DriverObject->MajorFunction[IRP_MJ_POWER] = VqcPower;

    DriverObject->MajorFunction[IRP_MJ_READ] = VqcRead;
    DriverObject->MajorFunction[IRP_MJ_WRITE] = VqcWrite;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = VqcDeviceControl;

    DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = VqcSystemControl;

    DriverObject->MajorFunction[IRP_MJ_CLEANUP] = VqcDispatchCleanup;

    DebugPrintMsg(\"DriverEntry completed\");

    return status;
}

VqcCreate 、VqcClose、 VqcDeviceControl,都是自己定义的函数名呀!
Owen.Guo 祝你成功!
ycbvtrue
驱动牛犊
驱动牛犊
  • 注册日期2002-03-20
  • 最后登录2003-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-04-15 17:40
我也很想知道这些内容,希望斑竹和各位高手多多关照。。
danier
驱动牛犊
驱动牛犊
  • 注册日期2002-03-29
  • 最后登录2002-04-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-04-15 16:57
我看了微软的帮助。
How to support a USB mass-storage device on a Windows 98-based computer that is compliant with the Control-Bulk-Interrupt Transport defined by the USB Mass Storage Device Class.
How to create a virtual child object in a WDM driver, and use it to load a separate driver.
How to communicate between a VxD and a WDM driver.

两部分中的pdr应该是一个vxd,我不太了解vxd.
但是我想直接用sys部分,也就是wdm,应该可以读写usb.
比如我看了\\\\\\\"windows wdm 设备驱动程序开发指南\\\\\\\"中的wdm1程序,
这个程序就可以读写,函数为wdm1read和wdm1write。

盼望指教!
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-04-15 14:53
你应该看看里面的说明文档。
它有2个driver,那个pdr专门和io subsystem打交道,sys才是操作usb的。你所谓的读写,是想看哪部分呢?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部