ExpAllocateUuids

NTSTATUS __stdcall ExpAllocateUuids(_LARGE_INTEGER *Time, UINT64 *Range, UINT64 *Sequence){
  __int64 v6; 
  __int64 v7; 
  unsigned int v8; 
  __int64 v9; 
  LONGLONG v10; 
  unsigned int v12; 
  LARGE_INTEGER v13; 
  char v14; 
  int v15; 
  int v16; 
  int v17; 
  int v18; 
  union _LARGE_INTEGER PerformanceFrequency; 
  int SequenceNumber; 
  SequenceNumber = 0;
  if( !ExpUuidSequenceNumberValid )
  {
    SequenceNumber = ExpUuidLoadSequenceNumber((UINT64 *)&Time->QuadPart);
    if( SequenceNumber < 0 )
    {
      v13 = KeQueryPerformanceCounter(&PerformanceFrequency);
      v12 = (unsigned int)&SequenceNumber ^ v13.LowPart ^ (unsigned int)Sequence ^ ExpUuidSequenceNumber ^ v13.HighPart;
    }
    else
    {
      v12 = ExpUuidSequenceNumber + 1;
    }
    ExpUuidSequenceNumber = v12;
    ExpUuidSequenceNumberValid = 1;
    ExpUuidSequenceNumberNotSaved = 1;
  }
  v6 = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
  v7 = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart - ExpUuidLastTimeAllocated;
  if( *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart - ExpUuidLastTimeAllocated < 0 )
  {
    ++ExpUuidSequenceNumber;
    ExpUuidLastTimeAllocated = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart - 20000i64;
    v7 = 20000i64;
    ExpUuidSequenceNumberNotSaved = 1;
  }
  if( v7 )
  {
    if( ExpUuidTimeSequenceNumber )
      ExpUuidTimeSequenceNumber = 0;
    if( v7 > 10000000 )
      v7 = 10000000i64;
    v8 = 10000;
    if( v7 <= 10000 )
    {
      *(_DWORD *)Range = v7;
      v9 = 0i64;
      v8 = *(_DWORD *)Range;
    }
    else
    {
      *(_DWORD *)Range = 10000;
      v9 = v7 - 10000;
    }
    v10 = v6 - v8 - v9;
    Time->QuadPart = v10;
    ExpUuidLastTimeAllocated = v10 + *(unsigned int *)Range;
LABEL_12:
    *(_DWORD *)Sequence = ExpUuidSequenceNumber;
    return 0;
  }
  if( (unsigned int)ExpUuidTimeSequenceNumber < 0x1F )
  {
    v14 = ++ExpUuidTimeSequenceNumber;
    *(_DWORD *)Range = 10000;
    Time->QuadPart = v6 - 10000;
    v15 = ((v14 & 1) << 27) | 0x4000000;
    if( (v14 & 2) == 0 )
      v15 = (v14 & 1) << 27;
    v16 = v15 | 0x2000000;
    if( (v14 & 4) == 0 )
      v16 = v15;
    v17 = v16 | 0x1000000;
    if( (v14 & 8) == 0 )
      v17 = v16;
    v18 = v17 | 0x800000;
    if( (v14 & 0x10) == 0 )
      v18 = v17;
    Time->HighPart |= v18;
    goto LABEL_12;
  }
  return -1073741267;
}

Referenced by:

ExpUuidGetValues
NtAllocateUuids