CmpAppendSection

CHAR __fastcall CmpAppendSection(INT64 a1, INT8 *a2, CHAR a3){
  VOID **v6; 
  const char *v7; 
  VOID **PoolWithTag; 
  _QWORD *v9; 
  CHAR result; 

  if( a1 && a2 )
  {
    v6 = *(VOID ***)a1;
    if( *(_QWORD *)a1 )
    {
      do
      {
        v7 = (const char *)v6[1];
        if( v7 && !stricmp(v7, a2) )
          break;
        v6 = (VOID **)*v6;
      }
      while( v6 );
      if( v6 )
      {
        v9 = v6[2];
        if( v9 )
        {
          while( *v9 )
            v9 = (_QWORD *)*v9;
        }
        goto LABEL_11;
      }
    }
    PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x20ui64, 1768967491i64);
    v6 = PoolWithTag;
    if( PoolWithTag )
    {
      *PoolWithTag = 0i64;
      PoolWithTag[2] = 0i64;
      PoolWithTag[1] = a2;
      *((_BYTE *)PoolWithTag + 24) = a3;
      *PoolWithTag = *(VOID **)a1;
      *(_QWORD *)a1 = PoolWithTag;
      if( !strnicmp(a2, "Strings", 7u) && (a2[7] == 0) > *(int *)(a1 + 32) )
        *(_QWORD *)(a1 + 40) = v6;
      v9 = 0i64;
LABEL_11:
      *(_QWORD *)(a1 + 16) = v9;
      result = 1;
      *(_QWORD *)(a1 + 24) = 0i64;
      *(_QWORD *)(a1 + 8) = v6;
      return result;
    }
  }
  return 0;
}

Referenced by:

CmpParseInfBuffer