PnpAddVetoInformation
VOID __stdcall PnpAddVetoInformation(DEVICE_OBJECT *DeviceObject, LIST_ENTRY *VetoProcessListHead, UINT64 Pid){
_LIST_ENTRY *Flink;
LIST_ENTRY *v4;
_LIST_ENTRY **v5;
_LIST_ENTRY **p_Flink;
unsigned int v7;
char v9;
_LIST_ENTRY **p_Blink;
_LIST_ENTRY *v11;
DEVICE_OBJECT **v12;
LIST_ENTRY *v13;
_QWORD *PoolWithTag;
_LIST_ENTRY *v15;
_LIST_ENTRY *Blink;
_QWORD *v17;
_LIST_ENTRY *v18;
_LIST_ENTRY *v19;
Flink = VetoProcessListHead->Flink;
v4 = VetoProcessListHead;
v5 = 0i64;
p_Flink = 0i64;
v7 = Pid;
v9 = 1;
p_Blink = &VetoProcessListHead->Flink[-2].Blink;
if( v4 == Flink )
goto LABEL_15;
while( 1 )
{
if( *((_DWORD *)p_Blink + 4) == v7 )
{
v11 = *p_Blink;
p_Flink = p_Blink;
v9 = 0;
while( 1 )
{
v12 = (DEVICE_OBJECT **)&v11[-1].Blink;
if( p_Blink == (_LIST_ENTRY **)v11 )
goto LABEL_11;
if( *v12 == DeviceObject )
return;
if( *v12 > DeviceObject )
{
p_Flink = &v11->Flink;
goto LABEL_11;
}
v11 = v11->Flink;
}
}
if( *((_DWORD *)p_Blink + 4) > v7 )
break;
LABEL_11:
v13 = p_Blink[3];
p_Blink = &v13[-2].Blink;
if( v4 == v13 )
goto LABEL_14;
}
v4 = (LIST_ENTRY *)(p_Blink + 3);
LABEL_14:
if( v9 )
{
LABEL_15:
PoolWithTag = ExAllocatePoolWithTag(PagedPool, 0x28ui64, 0x4F706E50ui64);
v5 = (_LIST_ENTRY **)PoolWithTag;
if( PoolWithTag )
{
*((_DWORD *)PoolWithTag + 4) = v7;
v15 = (_LIST_ENTRY *)(PoolWithTag + 3);
Blink = v4->Blink;
if( Blink->Flink == v4 )
{
v15->Flink = v4;
p_Flink = v5;
v15->Blink = Blink;
Blink->Flink = v15;
v4->Blink = v15;
v5[1] = (_LIST_ENTRY *)v5;
*v5 = (_LIST_ENTRY *)v5;
goto LABEL_18;
}
LABEL_24:
__fastfail(3u);
}
}
else
{
LABEL_18:
v17 = ExAllocatePoolWithTag(PagedPool, 0x18ui64, 0x50706E50ui64);
if( v17 )
{
ObfReferenceObject(DeviceObject);
*v17 = DeviceObject;
v18 = (_LIST_ENTRY *)(v17 + 1);
v19 = p_Flink[1];
if( (_LIST_ENTRY **)v19->Flink != p_Flink )
goto LABEL_24;
v18->Flink = (_LIST_ENTRY *)p_Flink;
v17[2] = v19;
v19->Flink = v18;
p_Flink[1] = v18;
}
else if( v5 )
{
ExFreePoolWithTag(v5, 0x4F706E50u);
}
}
}Referenced by:
PnpCollectOpenHandlesCallBack