3933|5

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求救!用DDKXP +DS3.1+VC6自生成的USBBULK驱动代码Read/Write函数中对KMEMORY任何操作都导致蓝屏问题!!! [复制链接]

用DDKXPSP1+DS3.1+VC6自动生成USB BULK驱动,2个EP一个IN 一个OUT,用WRITEFILE READFILE读写操作,驱动的READ部分程序如下:
NTSTATUS Usb4Device::Read(KIrp I)
{
    t << "Entering Usb4Device::Read, " << I << EOL;
// TODO:    Check the incoming request.  Replace "FALSE" in the following
//            line with a check that returns TRUE if the request is not valid.

    if (FALSE)        // If (Request is invalid)
    {
        // Invalid parameter in the Read request
        I.Information() = 0;
        return I.PnpComplete(this, STATUS_INVALID_PARAMETER);
    }

    // Always ok to read 0 elements.
    if (I.ReadSize() == 0)
    {
        I.Information() = 0;
        return I.PnpComplete(this, STATUS_SUCCESS);
    }

    // Declare a memory object
    KMemory Mem(I.Mdl());//此处生成 Mem,可是之后我对Mem的任何操(如Mem.Size()等)作都会导致驱动程序调用read
                              //后立即蓝屏!!!
                               //由于应用程序采用readfile/WriteFile方式来读取数据,因此对数据的操作都是通过
                           //上面这个Mem来进行数据交换的,
    ULONG dwTotalSize = I.ReadSize(CURRENT);
    ULONG dwMaxSize = m_Endpoint1IN.MaximumTransferSize();

    // If the total requested read size is greater than the Maximum Transfer
    // Size for the Pipe, request to read only the Maximum Transfer Size since
    // the bus driver will fail an URB with a TransferBufferLength of greater
    // than the Maximum Transfer Size.
    if (dwTotalSize > dwMaxSize)
    {
        ASSERT(dwMaxSize);
        dwTotalSize = dwMaxSize;
    }

    // Allocate a new context structure for Irp completion
    USB_COMPLETION_INFO* pCompInfo = new (NonPagedPool) USB_COMPLETION_INFO;
    if (pCompInfo == NULL)
    {
        I.Information() = 0;
        return I.PnpComplete(this, STATUS_INSUFFICIENT_RESOURCES);
    }

// TODO:    Select the correct pipe to read from

    // Create an URB to do actual Bulk read from the pipe
    PURB pUrb = m_Endpoint1IN.BuildBulkTransfer(
                   Mem,              // Where is data coming from?
                    dwTotalSize,      // How much data to read?
                    TRUE,            // direction (TRUE = IN)
                    NULL,            // Link to next URB
                    TRUE            // Allow a short transfer
                    );               

    if (pUrb == NULL)
    {
        delete pCompInfo;
        I.Information() = 0;
        return I.PnpComplete(this, STATUS_INSUFFICIENT_RESOURCES);
    }

    // Initialize context structure
    pCompInfo->m_pClass = this;
    pCompInfo->m_pUrb = pUrb;

    // Submit the URB to our USB device
    NTSTATUS status;
    status = m_Endpoint1IN.SubmitUrb(I, pUrb, LinkTo(ReadComplete), pCompInfo, 0);
    return status;
}
问题是,我只要对这个Kmemory类的 Mem进行任何操作比方说:加入一行Mem.Size() ;  或 Mem.MapToSystemSpace() 等等,只要一进行readfile的操作,立即就蓝屏!
    照着武安和的《Windows 2000/xp wdm 设备驱动程序开发》一书中的RegSample中也有对KMEMORY操作,我编译运行后却不会蓝屏。实在搞不懂为什么我在自动生成的Read代码中加入对Kmemory对象的操作就会导致蓝屏?搞了好几天了,实在不明白,还请大伙指点指点啊

最新回复

一直没有找到这个错误,郁闷很久了都......  详情 回复 发表于 2009-10-8 20:59
点赞 关注

回复
举报

101

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
我也是同样的问题,请帮忙,楼主现在有结果了吗?请介绍下,共同关注,谢谢。kf_cai@sohu.com
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
问题已经解决,原因为,向导生成的代码中,IN端点,没有在前面加0x,应该为0x81,0x83.
        //m_Pipe1.Initialize(m_Lower, 81, 64);//向导生成
         m_Pipe1.Initialize(m_Lower, 0x81, 64);//应该为0x81,否则,该端点没有被正确初始化,Read时蓝屏重启       
        m_Pipe2.Initialize(m_Lower, 2, 64);

请遇到此问题的朋友注意。       
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 
今天是大年三十,祝大家春节愉快。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 
顶.............
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
一直没有找到这个错误,郁闷很久了都......
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表