AppendCondition

UINT64 __stdcall AppendCondition(
        UINT8 **Condition,
        UINT64 *ConditionSize,
        UINT64 *ConditionPos,
        UINT8 *Data,
        UINT64 Size){
  unsigned int v5; 
  UINT8 *v6; 
  int v10; 
  unsigned int v11; 
  UINT8 *v12; 
  UINT8 *v13; 
  UINT8 *v14; 
  v5 = 0;
  v6 = Data;
  if( Condition && ConditionSize && ConditionPos )
  {
    v10 = *(_DWORD *)ConditionPos;
    v11 = *(_DWORD *)ConditionPos + Size;
    if( v11 < *(_DWORD *)ConditionPos )
      return 534;
    if( v11 > *(_DWORD *)ConditionSize )
    {
      SddlpAlloc(v11, (UINT64)ConditionSize);
      v13 = v12;
      if( !v12 )
        return 8;
      v14 = *Condition;
      memmove(v12, *Condition, *(unsigned int *)ConditionSize);
      if( v14 )
        ExFreePoolWithTag(v14, 0);
      v6 = Data;
      *Condition = v13;
      v10 = *(_DWORD *)ConditionPos;
      *(_DWORD *)ConditionSize = v11;
    }
    memmove(&(*Condition)[v10], v6, (unsigned int)Size);
    *(_DWORD *)ConditionPos = v10 + Size;
    return v5;
  }
  return 87i64;
}

Referenced by:

LocalGetConditionForString