windows 7 64位 PCIe驱动加载出现蓝屏
各位大神:
最近开发一个PCIe子卡的驱动,目标平台windows 7 64位。但是加载驱动出现蓝屏,通过windbg打印dump信息如下:
1: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
PAGE_FAULT_IN_NONPAGED_AREA (50)
Invalid system memory was referenced. This cannot be protected by try-except,
it must be protected by a Probe. Typically the address is just plain bad or it
is pointing at freed memory.
Arguments:
Arg1: fffff6fb415ffe90, memory referenced.
Arg2: 0000000000000000, value 0 = read operation, 1 = write operation.
Arg3: fffff80004081131, If non-zero, the instruction address which referenced the bad memory
address.
Arg4: 0000000000000002, (reserved)
Debugging Details:
------------------
READ_ADDRESS: fffff6fb415ffe90
FAULTING_IP:
nt!MmBuildMdlForNonPagedPool+81
fffff800`04081131 488b4500 mov rax,qword ptr [rbp]
MM_INTERNAL_CODE: 2
DEFAULT_BUCKET_ID: VISTA_DRIVER_FAULT
BUGCHECK_STR: 0x50
PROCESS_NAME: System
CURRENT_IRQL: 0
分析蓝屏原因是由于调用了MmBuildMdlForNonPagedPool接口导致,现附上关键代码,求大神相助:
status = WdfCommonBufferCreate(DevExt->DmaEnabler,
sizeof(GXPCI_QUEUE_STATUS_ARRAY),
WDF_NO_OBJECT_ATTRIBUTES,
&DevExt->QueueStatusArrayComBuf);
//TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP, "dma buffer for queue status=%d!", sizeof(GXPCI_QUEUE_STATUS_ARRAY));
if (!NT_SUCCESS(status))
{
TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP, "WdfCommonBufferCreate (read) failed %!STATUS!", status);
return status;
}
DevExt->PQueueStatusArrayComBufBase =
WdfCommonBufferGetAlignedVirtualAddress(DevExt->QueueStatusArrayComBuf);
DevExt->PQueueStatusArrayComBufBaseLa =
WdfCommonBufferGetAlignedLogicalAddress(DevExt->QueueStatusArrayComBuf);
DevExt->PMdlQueueStatusArray = IoAllocateMdl(DevExt->QueueStatusArrayComBuf, sizeof(GXPCI_QUEUE_STATUS_ARRAY), FALSE, FALSE, NULL);
DbgBreakPoint();
DbgPrint("DevExt->PMDlQueueStatusArray = %p\n", DevExt->PMdlQueueStatusArray);
if (!DevExt->PMdlQueueStatusArray)
{
TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
"IoAllocateMdl (read) failed");
status = STATUS_UNSUCCESSFUL;
return status;
}
RtlZeroMemory((void*)(DevExt->PQueueStatusArrayComBufBase), sizeof(GXPCI_QUEUE_STATUS_ARRAY));
DbgBreakPoint();
DbgPrint("DevExt = %p\n", DevExt);
DbgPrint("&DevExt->PMDlQueueStatusArray = %p\n",&DevExt->PMdlQueueStatusArray);
DbgPrint("DevExt->PMDlQueueStatusArray = %p\n", DevExt->PMdlQueueStatusArray);
DbgPrint("DevExt->PMDlQueueStatusArray->size = %d\n", DevExt->PMdlQueueStatusArray->Size);
MmBuildMdlForNonPagedPool(DevExt->PMdlQueueStatusArray);
DevExt->IsMappedQueueStatusArray = FALSE;
最近开发一个PCIe子卡的驱动,目标平台windows 7 64位。但是加载驱动出现蓝屏,通过windbg打印dump信息如下:
1: kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
PAGE_FAULT_IN_NONPAGED_AREA (50)
Invalid system memory was referenced. This cannot be protected by try-except,
it must be protected by a Probe. Typically the address is just plain bad or it
is pointing at freed memory.
Arguments:
Arg1: fffff6fb415ffe90, memory referenced.
Arg2: 0000000000000000, value 0 = read operation, 1 = write operation.
Arg3: fffff80004081131, If non-zero, the instruction address which referenced the bad memory
address.
Arg4: 0000000000000002, (reserved)
Debugging Details:
------------------
READ_ADDRESS: fffff6fb415ffe90
FAULTING_IP:
nt!MmBuildMdlForNonPagedPool+81
fffff800`04081131 488b4500 mov rax,qword ptr [rbp]
MM_INTERNAL_CODE: 2
DEFAULT_BUCKET_ID: VISTA_DRIVER_FAULT
BUGCHECK_STR: 0x50
PROCESS_NAME: System
CURRENT_IRQL: 0
分析蓝屏原因是由于调用了MmBuildMdlForNonPagedPool接口导致,现附上关键代码,求大神相助:
status = WdfCommonBufferCreate(DevExt->DmaEnabler,
sizeof(GXPCI_QUEUE_STATUS_ARRAY),
WDF_NO_OBJECT_ATTRIBUTES,
&DevExt->QueueStatusArrayComBuf);
//TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP, "dma buffer for queue status=%d!", sizeof(GXPCI_QUEUE_STATUS_ARRAY));
if (!NT_SUCCESS(status))
{
TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP, "WdfCommonBufferCreate (read) failed %!STATUS!", status);
return status;
}
DevExt->PQueueStatusArrayComBufBase =
WdfCommonBufferGetAlignedVirtualAddress(DevExt->QueueStatusArrayComBuf);
DevExt->PQueueStatusArrayComBufBaseLa =
WdfCommonBufferGetAlignedLogicalAddress(DevExt->QueueStatusArrayComBuf);
DevExt->PMdlQueueStatusArray = IoAllocateMdl(DevExt->QueueStatusArrayComBuf, sizeof(GXPCI_QUEUE_STATUS_ARRAY), FALSE, FALSE, NULL);
DbgBreakPoint();
DbgPrint("DevExt->PMDlQueueStatusArray = %p\n", DevExt->PMdlQueueStatusArray);
if (!DevExt->PMdlQueueStatusArray)
{
TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
"IoAllocateMdl (read) failed");
status = STATUS_UNSUCCESSFUL;
return status;
}
RtlZeroMemory((void*)(DevExt->PQueueStatusArrayComBufBase), sizeof(GXPCI_QUEUE_STATUS_ARRAY));
DbgBreakPoint();
DbgPrint("DevExt = %p\n", DevExt);
DbgPrint("&DevExt->PMDlQueueStatusArray = %p\n",&DevExt->PMdlQueueStatusArray);
DbgPrint("DevExt->PMDlQueueStatusArray = %p\n", DevExt->PMdlQueueStatusArray);
DbgPrint("DevExt->PMDlQueueStatusArray->size = %d\n", DevExt->PMdlQueueStatusArray->Size);
MmBuildMdlForNonPagedPool(DevExt->PMdlQueueStatusArray);
DevExt->IsMappedQueueStatusArray = FALSE;
...全文
相关推荐
蜗牛星际i211网卡驱动-64位 Win7/10/Server
已经博主授权,源码转载自 https://pan.quark.cn/s/956c8f34e128 MT-Callback
国产FPGA实战:紫光同创PG2L100H的Windows PCIe驱动安装与读写测试保姆级教程
本文提供紫光同创PG2L100H国产FPGA在Windows系统下的PCIe驱动安装与读写测试全流程教程,涵盖驱动签名处理、BAR空间映射及DMA性能优化等核心内容,助力工程师快速搭建开发环境并解决常见问题。
英特尔AC3160无线网卡驱动BT-18.16.1-64-Win7.zip
代码转载自:https://pan.quark.cn/s/d0ea69c9e1b0 英特尔AC3160无线网络适配器的驱动程序版本为BT_18.16.1,适用于64位Windows 7操作系统。
超聚变 H22H 05服务器 WINDOWS 2016 RAID 驱动
超聚变 H22H 05服务器 WINDOWS 2016 RAID 驱动,RAID-3408iMR_3416iMR_3508_3516-Win2K16-7.716.3.0-x86_64
LabVIEW 2016 Runtime 64位
LabVIEW 2016 Runtime 64位


驱动开发/核心开发
