simpleway
驱动牛犊
驱动牛犊
  • 注册日期2008-04-03
  • 最后登录2019-09-05
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望31点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1146回复:1

有懂声卡驱动开发的大神吗?有个蓝屏问题请教一下

楼主#
更多 发布于:2019-09-05 14:11
我写了一个虚拟声卡驱动,在win7没有问题,但在win10有些用户会出现蓝屏,蓝屏出现的位置,每次都是在IDMAChannel的CopyFrom方法体里,

STDMETHODIMP_(void)
WaveStream::CopyFrom
(
IN  PVOID                   Destination,
IN  PVOID                   Source,
IN  ULONG                   ByteCount
)
{

       for(int i = 0 ; i < ByteCount ; i ++)
       {
            BYTE b = data;
            Destination = b;//这句代码引发蓝屏
       }

}

在给Destination内存赋值时,引发蓝屏 DRIVER_IRQL_NOT_LESS_OR_EQUAL,给我的感觉,好像是Destination已经失效了一样,这是什么原因呢?
simpleway
驱动牛犊
驱动牛犊
  • 注册日期2008-04-03
  • 最后登录2019-09-05
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望31点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2019-09-05 14:18
这是dump文件信息:

DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high.  This is usually
caused by drivers using improper addresses.
If kernel debugger is available get stack backtrace.
Arguments:
Arg1: ffffd000227fd000, memory referenced
Arg2: 0000000000000002, IRQL
Arg3: 0000000000000001, value 0 = read operation, 1 = write operation
Arg4: fffff80182381470, address which referenced memory

好像是 Destination = b;执行的时候,IRQL太高了,如果真的是IRQL太高的原因,那就是说Destination是属于分页内存?

但是dump文件分析,继续往下看,又有这样的信息:

FAULTING_MODULE: fffff800d6417000 nt

DEBUG_FLR_IMAGE_TIMESTAMP:  5d69d7b1

WRITE_ADDRESS: unable to get nt!MmSpecialPoolStart
unable to get nt!MmSpecialPoolEnd
unable to get nt!MmPoolCodeStart
unable to get nt!MmPoolCodeEnd
ffffd000227fd000

CURRENT_IRQL:  0

FAULTING_IP:
monster!data_transfer_record+50
fffff801`82381470 8802            mov     byte ptr [rdx],al

CUSTOMER_CRASH_COUNT:  1

DEFAULT_BUCKET_ID:  VISTA_DRIVER_FAULT

BUGCHECK_STR:  0xD1

LAST_CONTROL_TRANSFER:  from fffff800d6563fe9 to fffff800d6559480

这个信息又说CURRENT_IRQL:0,那究竟执行代码时,IRQL是0还是2呢?搞不明白了
游客

返回顶部