我寫了一個虛擬聲卡驅動,在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[i];
Destination[i] = b;//這句代碼引發藍屏
}
}
在給Destination記憶體賦值時,引發藍屏 DRIVER_IRQL_NOT_LESS_OR_EQUAL,給我的感覺,好像是Destination已經失效了一樣,這是什么原因呢?
uj5u.com熱心網友回復:
這是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[i] = 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呢?搞不明白了
uj5u.com熱心網友回復:
應該是設定的中斷請求發生了沖突轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/97121.html
標籤:驅動開發/核心開發
上一篇:求科普:電腦為什么需要記憶體?
下一篇:PCB充電管理布局
