ExCreateHandleEx

void *__fastcall ExCreateHandleEx(__int64 a1, __int64 a2, int a3, int a4, __int64 a5){
  int v5; 
  _ETHREAD *CurrentThread; 
  _HANDLE_TABLE_ENTRY *v8; 
  void *GenericHandleOverlay; 
  _HANDLE_TABLE_ENTRY *v10; 
  __int64 v12; 
  __int64 v13; 
  _EXHANDLE Handle; 
  v5 = a3 & 0x1FFFFFF;
  HIDWORD(v13) = 0;
  if( (a4 & 8) != 0 )
    v5 |= 0x2000000u;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  LODWORD(v13) = v5;
  v12 = (a2 << 16) ^ ((a4 << 17) ^ ((_DWORD)a2 << 16)) & 0xE0000 | 1;
  --*((_WORD *)CurrentThread + 242);
  Handle = 0i64;
  v8 = ExpAllocateHandleTableEntry((_HANDLE_TABLE *)a1, &Handle);
  GenericHandleOverlay = Handle.GenericHandleOverlay;
  v10 = v8;
  if( v8 )
  {
    if( a5
      && (*(_DWORD *)a5 || *(_DWORD *)(a5 + 4))
      && (unsigned int)ExpSetHandleExtraInfo(
                         (_HANDLE_TABLE *)a1,
                         Handle.GenericHandleOverlay,
                         (_HANDLE_TABLE_ENTRY_INFO *)a5) )
    {
      ExpFreeHandleTableEntry((_HANDLE_TABLE *)a1, (_EXHANDLE)GenericHandleOverlay, v10);
      GenericHandleOverlay = 0i64;
    }
    else
    {
      if( *(_QWORD *)(a1 + 96) )
        ExpUpdateDebugInfo((_HANDLE_TABLE *)a1, CurrentThread, GenericHandleOverlay, 1ui64);
      v10->HighValue = v13;
      v10->LowValue = v12;
    }
  }
  KeLeaveCriticalRegionThread((__int64)CurrentThread);
  return GenericHandleOverlay;
}

Referenced by:

AlpcpAllocateMessageFromExtendedTables
AlpcpAllocateMessageFunction
ExCreateHandle
ObCompleteObjectDuplication
PspAllocateThread
RtlpInsertStringAtom