ExUuidCreate

NTSTATUS __stdcall ExUuidCreate(_GUID *Uuid){
  _ETHREAD *CurrentThread; 
  NTSTATUS Values; 
  __int64 v4; 
  char v5; 
  int v6; 
  __int64 v7; 
  _BYTE *v9; 
  _BYTE *v10; 
  UINT64 v11; 
  char v12; 
  bool v13; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  Values = 0;
  while( 1 )
  {
    do
    {
      v4 = ExpUuidCachedValues;
      v5 = BYTE5(NlsMbCodePageTag);
      *(_DWORD *)Uuid->Data4 = dword_140D2C2E4;
      *(_DWORD *)&Uuid->Data4[4] = unk_140D2C2E8;
      v6 = _InterlockedDecrement(&dword_140D2C2E0);
    }
    while( v4 != ExpUuidCachedValues );
    if( v6 >= 0 )
    {
      v7 = v4 - v6;
      Uuid->Data1 = v7;
      Uuid->Data2 = WORD2(v7);
      Uuid->Data3 = HIWORD(v7) & 0xFFF | 0x1000;
      if( !v5 )
        return 1073872982;
      return Values;
    }
    --CurrentThread->Tcb.KernelApcDisable;
    v9 = KeAbPreAcquire(&stru_140CEC740, 0i64, 0i64);
    v10 = v9;
    if( _interlockedbittestandset64((volatile signed __int32 *)&stru_140CEC740, 0i64) )
      ExfAcquirePushLockExclusiveEx(&stru_140CEC740, v9, &stru_140CEC740);
    if( v10 )
      v10[26] |= 1u;
    if( v4 != ExpUuidCachedValues )
    {
      v13 = (_InterlockedExchangeAdd64(&stru_140CEC740._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2;
      goto LABEL_17;
    }
    Values = ExpUuidGetValues((__int64)&ExpUuidCachedValues);
    if( Values )
      break;
    ExpUuidSaveSequenceNumberIf(v11);
    v12 = _InterlockedExchangeAdd64(&stru_140CEC740._bf_0, 0xFFFFFFFFFFFFFFFFui64);
    if( (v12 & 2) == 0 )
      goto LABEL_14;
    v13 = (v12 & 4) == 0;
LABEL_17:
    if( v13 )
      ExfTryToWakePushLock(&stru_140CEC740);
LABEL_14:
    KeAbPostRelease(&stru_140CEC740);
    KeLeaveCriticalRegionThread(&CurrentThread->Tcb);
  }
  if( (_InterlockedExchangeAdd64(&stru_140CEC740._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(&stru_140CEC740);
  KeAbPostRelease(&stru_140CEC740);
  KeLeaveCriticalRegionThread(&CurrentThread->Tcb);
  return Values;
}

Referenced by:

BiCreateObject
CmpCloneHwProfile
CmpUuidCreate
EtwpStartLogger
IoGetDeviceDirectory
PiDevCfgResolveVariableGenerateGuid
PipGenerateContainerID
SC_ENV::CreateGuid