我在使用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驅動程序,而不是非常詳細的內部鏈接。 –