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