PiDmaGuardProcessPostRemove

NTSTATUS __stdcall PiDmaGuardProcessPostRemove(UINT32 MaxDataSize){
  int v1; 
  char v2; 
  void **v3; 
  ULONG_PTR BugCheckParameter4; 
  INT64 v5; 
  char v6; 
  int v7; 
  int v8; 
  ULONG_PTR v9; 
  __int64 v10; 
  void *v11; 
  void *retaddr; 
  v3 = &retaddr;
  BugCheckParameter4 = *(_QWORD *)&MaxDataSize;
  v5 = *(_QWORD *)(*(_QWORD *)&MaxDataSize + 720i64);
  v6 = v2;
  v7 = v1;
  if( v5 )
  {
    if( PipHalIommuSecurityEnabled )
    {
      v8 = PiIommuBlockDevice(v5);
      v9 = v8;
      if( v8 < 0 )
      {
        IoAddTriageDumpDataBlock((PVOID)BugCheckParameter4, 0x310ui64);
        if( *(_WORD *)(BugCheckParameter4 + 40) )
        {
          IoAddTriageDumpDataBlock((PVOID)(BugCheckParameter4 + 40), 2ui64);
          IoAddTriageDumpDataBlock(*(PVOID *)(BugCheckParameter4 + 48), *(unsigned __int16 *)(BugCheckParameter4 + 40));
        }
        if( *(_WORD *)(BugCheckParameter4 + 56) )
        {
          IoAddTriageDumpDataBlock((PVOID)(BugCheckParameter4 + 56), 2ui64);
          IoAddTriageDumpDataBlock(*(PVOID *)(BugCheckParameter4 + 64), *(unsigned __int16 *)(BugCheckParameter4 + 56));
        }
        v10 = *(_QWORD *)(BugCheckParameter4 + 16);
        if( v10 && *(_WORD *)(v10 + 56) )
        {
          IoAddTriageDumpDataBlock((PVOID)(v10 + 56), 2ui64);
          IoAddTriageDumpDataBlock(
            *(PVOID *)(*(_QWORD *)(BugCheckParameter4 + 16) + 64i64),
            *(unsigned __int16 *)(*(_QWORD *)(BugCheckParameter4 + 16) + 56i64));
        }
        KeBugCheckEx(0xCAu, 0x13ui64, 0x1001ui64, v9, BugCheckParameter4);
      }
    }
    PipDmgDestroyIommuExtension(BugCheckParameter4);
  }
  if( v6 && PipDmaGuardPolicy )
  {
    v11 = *(void **)(BugCheckParameter4 + 32);
    if( v7 == 55 )
    {
      PiDmaGuardQueueInsertEntry(v11);
      PipDmgReevaluateQueue();
    }
    else
    {
      PiDmaGuardQueueRemoveEntry((INT64)v11);
    }
  }
  return(int)v3;
}

Referenced by:

PnpRemoveLockedDeviceNode
PnpSurpriseRemoveLockedDeviceNode