pcieドライバはブルースクリーンをアンマウントします。


pcieドライバをアンインストールする時、たまにブルースクリーンが現れます。プリント情報によって、リソースをリリースする時にエラーが発生しました。Windbgを使ってシングルステップでデバッグする場合、ブルースクリーンの確率は高いです。  コードは以下の通りです
VOID PciReturnResources(PPCI_DEVICE_EXT pDevExt)
{
    int    i;
    
    
    {// Release IO/Memory Resource
        for(i=0; ibase[i].WhichMapped == TYPE_MEM)
            {
                MmUnmapIoSpace(pDevExt->base[i].MemoryMappedAddress, pDevExt->base[i].MemorySize);
            }
            if(pDevExt->base[i].WhichMapped == TYPE_IO)
            {
                pDevExt->base[i].IoPortMappedAddress    = (PVOID)0;
            }
            pDevExt->base[i].WhichMapped = TYPE_NONE;
        }
    }
    
    {// Release Interrupt Resource
        if(pDevExt->InterruptObject != NULL)
        {
            IoDisconnectInterrupt(pDevExt->InterruptObject);
            pDevExt->InterruptObject = NULL;
        }
    }
    
    {// Release Adapter Resource
        if(pDevExt->DmaAdapter != NULL)
        {
            (*pDevExt->DmaAdapter->DmaOperations->PutDmaAdapter)(pDevExt->DmaAdapter);
        }
    }
    
 
}
コードを詳しく分析した結果、次のようになります。
問題の原因:IO/メモリリソースがリリースされた後、リソースのリリースが中断される前の期間に、他のデバイスが割り込み発生(共有中断)したため、駆動処理プログラムのレジスタ操作により、ブルースクリーンが発生しました。
解決方法:IO/メモリリソースと割込みリソースのリリース位置を切り替える(割込みリソースをリリースしてIO/メモリリソースを解放する)。