我在使用Windows Server 2016上的虚拟HBA驱动程序时遇到了一些问题。运行了HLK故障转储支持测试。 3次通过测试通过。 在这3次失败测试中,崩溃转储在完成转储或内核转储或小型转储时挂起为0%。调用ExAllocatePoolWithTag永不返回
通过内核调试我的代码,我发现调用ExAllocatePoolWithTag()
进行缓冲区分配永远不会实际返回。
以下是永不返回的声明。
pDeviceExtension->pcmdbuf=(struct mycmdrsp *)ExAllocatePoolWithTag(NonPagedPoolCacheAligned,pcmdqSignalSize,((ULONG)'TA1'));
我在网上搜索了这个。但是,所有找到的页面都集中在这个函数返回NULL在我的情况下永远不会返回。
任何有关如何前进的帮助将不胜感激。
在此先感谢。
如果您所说的内容正确无误,那么它应该在每次完全相同的时间点都失败。但是,正如我上面提到的那样,crashdump测试通过了4/10次,并且在完成转储时,或者在进行内核转储时(在成功完成完整转储测试后)。 –
我不是猜测。在调用之前检查IRQL,然后检查文档。你在做什么的结果在架构上是不确定的,它的工作原理有时并不正确。 – snoone
我已经检查过IRQL,正如你所说的,我发现它在HIGH_LEVEL(使用!irql 1.对于所有其他处理器,它显示LOW_LEVEL)我不确定我的线程当前正在运行哪个处理器。另外,我没有找到您所指的相关MSDN文档。如果可能的话,请分享相关链接,因为我发现的链接主要是关于非常高级别的crashdump驱动程序,而不是非常详细的内部链接。 –