ydh0304
驱动牛犊
驱动牛犊
  • 注册日期2008-01-07
  • 最后登录2008-04-17
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:1718回复:6

求助 装驱动蓝屏问题

楼主#
更多 发布于:2008-01-07 15:17
各位驱动高手:
    在下手头有一个usb摄像头驱动,在其它类型的机器上运行正常,但在ESC的主板上一装就蓝屏死机,以下是部分功能代码:

NTSTATUS InitializeDevice( PHW_DEVICE_EXTENSION pDev, PPORT_CONFIGURATION_INFORMATION pConf )
{

    NTSTATUS status ;    
    RtlZeroMemory( pDev, sizeof(HW_DEVICE_EXTENSION) );
    KeInitializeSpinLock( &(pDev->DataSpinLock) );

    pConf->StreamDescriptorSize     = sizeof(HW_STREAM_HEADER) + DRIVER_STREAM_COUNT * sizeof(HW_STREAM_INFORMATION);
    pDev->PDO                       = pConf->PhysicalDeviceObject;
    pDev->DriverMediumInstanceCount = GlobalDriverMediumInstanceCount++;

    for( ULONG i = 0; i < SIZEOF_ARRAY(CrossbarMediums); i++ )
        CrossbarMediums.Id = pDev->DriverMediumInstanceCount;
    for( i = 0; i < SIZEOF_ARRAY(CaptureMediums);  i++ )
        CaptureMediums.Id  = pDev->DriverMediumInstanceCount;
    pDev->pStrmEx[0] = pDev->pStrmEx[1] = NULL;

   PUSB_DEVICE_DESCRIPTOR  pDevDesc = (PUSB_DEVICE_DESCRIPTOR)ExAllocatePool( NonPagedPool, sizeof(USB_DEVICE_DESCRIPTOR) );  
 if( pDevDesc == NULL )
        return STATUS_INSUFFICIENT_RESOURCES;

    ULONG                          StackSize, DescSiz;
    PURB                           pSelectUrb;
    USBD_INTERFACE_LIST_ENTRY      IntfList[2];
    PUSBD_INTERFACE_INFORMATION    pIntfObj  = NULL;
    PUSB_CONFIGURATION_DESCRIPTOR  pConfDesc = NULL;
    ULONG  UrbSize = sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST);
    PURB   pUrb    = (PURB)ExAllocatePool( NonPagedPool, UrbSize );
    UsbBuildGetDescriptorRequest( pUrb,
        (USHORT)UrbSize,
        USB_DEVICE_DESCRIPTOR_TYPE,
        0, 0,
        pDevDesc,  
        NULL,
        UrbSize,
        NULL );
    //
    status = Send_Cntrl_URB( pDev, pUrb );
    if( !NT_SUCCESS(status) ) goto ERROR1;    

          .
          .
          .

    
ERROR1:    if( pUrb != NULL )
        {
            ExFreePool( pUrb );
        }
        if( pDevDesc != NULL )
        {
            ExFreePool( pDevDesc );
        }
        return status;
}

用SoftIce调试,错误发生在倒数第二句(有下划线标注的),运行这一句后会蓝屏,错误提示:“BAD ”。
    应该不会是代码的语法之类的错误,因为可以正常编译生成sys文件,也可以在其它电脑上正常运行。我能想到的可能的原因是与主板冲突。现在我想请问一下:

    为什么会产生冲突,又该如何解决?

    还望各位不吝赐教

  
ydh0304
驱动牛犊
驱动牛犊
  • 注册日期2008-01-07
  • 最后登录2008-04-17
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-01-07 15:19
错误提示是“BAD_POOL_HEADER”,错误码“0x000000019”
llss2007
驱动小牛
驱动小牛
  • 注册日期2007-09-25
  • 最后登录2010-03-16
  • 粉丝5
  • 关注0
  • 积分1001分
  • 威望123点
  • 贡献值0点
  • 好评度112点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-01-08 09:31
用于对象初始化的应该用PagedPool,你将 PUSB_DEVICE_DESCRIPTOR  pDevDesc = (PUSB_DEVICE_DESCRIPTOR)ExAllocatePool( NonPagedPool, sizeof(USB_DEVICE_DESCRIPTOR) );  中的NonPagedPool改一下试试。
在交流中前进
ydh0304
驱动牛犊
驱动牛犊
  • 注册日期2008-01-07
  • 最后登录2008-04-17
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-01-08 10:38
多谢您的热心回复,可是后面的UsbBuildGetDescriptorRequest()会用到这个pDevDesc,而UsbBuildGetDescriptorRequest()也要求这块区域必须是NonPagedPool的。
我也试了一下,果然提示错误“PAGE_FAULT_IN_NONPAGE_AREA”
Delphips
驱动小牛
驱动小牛
  • 注册日期2003-11-10
  • 最后登录2011-02-21
  • 粉丝1
  • 关注1
  • 积分-363分
  • 威望168点
  • 贡献值0点
  • 好评度151点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-01-09 11:34
看代码好像没问题。你注释掉中间代码只申请,释放试试看是哪里引起的。
还有把变量定义全放在函数开始部分,不一定是这个问题,但有时这个能引起很诡异的问题
ydh0304
驱动牛犊
驱动牛犊
  • 注册日期2008-01-07
  • 最后登录2008-04-17
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-01-10 09:52
多谢了,我试过了,只申请,再释放是不会蓝屏的.我又偿试对
UsbBuildGetDescriptorRequest( pUrb,
        (USHORT)UrbSize,
        USB_DEVICE_DESCRIPTOR_TYPE,
        0, 0,
        pDevDesc,  
        NULL,
        UrbSize,
        NULL );
做修改.我从查阅了这个函数的资料,这个函数中的倒数第二个参数应该用来说明pDevDesc(倒数第四个参数)的大小.所以我把UrbSize给改成了sizeof(USB_DEVICE_DESCRIPTOR),这样就不会蓝屏了.但是用Amcap试的时候,Amcap总是先弹出提示框"Cannot run preview graph".总要先关掉这个提示框,然后先关掉preview ,然后再打开preview才可以正常运行.
  还有一个问题:怎么给分啊,虽然我没有多少分,但也总想对各位的热心回复表示一点心意.
ydh0304
驱动牛犊
驱动牛犊
  • 注册日期2008-01-07
  • 最后登录2008-04-17
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-01-10 09:57
对于上面所述的AMCAP的问题,也请大家给点意见.多谢了!
游客

返回顶部