SeCaptureLuidAndAttributesArray

NTSTATUS __stdcall SeCaptureLuidAndAttributesArray(
        LUID_AND_ATTRIBUTES *InputArray,
        UINT64 ArrayCount,
        INT8 RequestorMode,
        LUID_AND_ATTRIBUTES **CapturedArray,
        UINT64 *AlignedArraySize){
  UINT64 v6; 
  char *v7; 
  unsigned int v8; 
  UINT8 *PoolWithTag; 
  UINT8 **v11; 
  _DWORD *v12; 
  if( !(_DWORD)ArrayCount )
  {
    *v11 = 0i64;
    *v12 = 0;
    return 0;
  }
  if( (unsigned int)ArrayCount > 0x42 )
    return -1073741811;
  v6 = (unsigned int)(12 * ArrayCount);
  *v12 = (v6 + 3) & 0xFFFFFFFC;
  if( RequestorMode && (_DWORD)v6 )
  {
    if( ((unsigned __int8)InputArray & 3) != 0 )
      ExRaiseDatatypeMisalignment();
    v7 = (char *)InputArray + (unsigned int)v6;
    if( (unsigned __int64)v7 > 0x7FFFFFFF0000i64 || v7 < (char *)InputArray )
      MEMORY[0x7FFFFFFF0000] = 0;
  }
  v8 = v6;
  PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(PagedPool, v6, 0x754C6553ui64);
  *v11 = PoolWithTag;
  if( PoolWithTag )
  {
    memmove(PoolWithTag, (UINT8 *)InputArray, v8);
    return 0;
  }
  return -1073741670;
}

Referenced by:

NtAdjustPrivilegesToken
NtCreateTokenEx
NtFilterToken
NtPrivilegeCheck