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