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