PiDmaGuardProcessNewDeviceNode
NTSTATUS __fastcall PiDmaGuardProcessNewDeviceNode(PVOID BugCheckParameter2){
NTSTATUS Extension;
__int64 v4;
__int64 v5[10];
memset(v5, 0i64, sizeof(v5));
PipDmgDestroyIommuExtension((INT64)BugCheckParameter2);
Extension = 0;
if( PiIommuGetInterface(*((_QWORD *)BugCheckParameter2 + 4)) >= 0 )
{
if( *((_QWORD *)BugCheckParameter2 + 90) )
{
IoAddTriageDumpDataBlock(BugCheckParameter2, (_BYTE *)0x310);
if( *((_WORD *)BugCheckParameter2 + 20) )
{
IoAddTriageDumpDataBlock((char *)BugCheckParameter2 + 40, (_BYTE *)2);
IoAddTriageDumpDataBlock(
*((VOID **)BugCheckParameter2 + 6),
(_BYTE *)*((unsigned __int16 *)BugCheckParameter2 + 20));
}
if( *((_WORD *)BugCheckParameter2 + 28) )
{
IoAddTriageDumpDataBlock((char *)BugCheckParameter2 + 56, (_BYTE *)2);
IoAddTriageDumpDataBlock(
*((VOID **)BugCheckParameter2 + 8),
(_BYTE *)*((unsigned __int16 *)BugCheckParameter2 + 28));
}
v4 = *((_QWORD *)BugCheckParameter2 + 2);
if( v4 && *(_WORD *)(v4 + 56) )
{
IoAddTriageDumpDataBlock((VOID *)(v4 + 56), (_BYTE *)2);
IoAddTriageDumpDataBlock(
*(VOID **)(*((_QWORD *)BugCheckParameter2 + 2) + 64i64),
(_BYTE *)*(unsigned __int16 *)(*((_QWORD *)BugCheckParameter2 + 2) + 56i64));
}
KeBugCheckEx(
0xCAu,
(PVOID)0x11,
BugCheckParameter2,
*((PVOID *)BugCheckParameter2 + 90),
(PVOID)*((unsigned int *)BugCheckParameter2 + 176));
}
Extension = PiIommuAllocateExtension((__int64)BugCheckParameter2, v5, (_QWORD *)BugCheckParameter2 + 90);
PiIommuPutInterface((__int64)v5);
}
return Extension;
}Referenced by:
PiProcessNewDeviceNode