daor
驱动牛犊
驱动牛犊
  • 注册日期2001-05-16
  • 最后登录2018-04-15
  • 粉丝0
  • 关注0
  • 积分-25分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:941回复:3

读取urb里的数据,为什么会page fault?

楼主#
更多 发布于:2003-04-10 12:37
我写的是usbstor.sys的下层驱动,监视它往usb发送的数据。当我收到_URB_BULK_OR_INTERRUPT_TRANSFER的URB时,就从其TransferBuffer(当TransferBuffer !=NULL时)开始,调试输出一串长度为TransferBufferLength 的数据。为什么会page fault?
3x@Q
kilroy_guo
驱动大牛
驱动大牛
  • 注册日期2002-10-29
  • 最后登录2005-11-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-11 09:49
请问你确定page fault是读取urb数据引起的么?
如果是的话,请问你是如何用urb数据buffer指针的?
TransferBufferLength是以字节为单位的,不知道你是如何转换PVOID指针的
二姑家的猫想......
daor
驱动牛犊
驱动牛犊
  • 注册日期2001-05-16
  • 最后登录2018-04-15
  • 粉丝0
  • 关注0
  • 积分-25分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-11 13:30
以(UCHAR*)转换的。以下是我的调试输出函数调用。如果我把下面这句注释掉的话,就不会pagefault。
DbgDataOut( (UCHAR*)pUrbBulk->TransferBuffer, pUrbBulk->TransferBufferLength);
输出函数定义为:
OID DbgDataOut(UCHAR* pData, ULONG ulDataLength)
{
    for(ULONG i = 0; i< ulDataLength; i++)
    {
        t.Trace(TraceAlways,\"%02x  \", pData);
        
        if( (i+1)%8 == 0 )
        {
            t<<\"\\n\";
        }
        else if( (i+1)%4 == 0 )
        {
            t<<\"--  \";
        }  
        
    }
    

}
其中t.Trace是用的DS的函数,相当于ddk的DbgPrint。
kilroy_guo
驱动大牛
驱动大牛
  • 注册日期2002-10-29
  • 最后登录2005-11-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-11 16:59
我没用过ds的这个函数
你用DbgPrint 和 ((PUCHAR)pData)++试一下呢?


我是菜鸟,不对的话,请多包涵
二姑家的猫想......
游客

返回顶部