ExpLoadAndSortLicensingCacheDescriptors

INT64 __fastcall ExpLoadAndSortLicensingCacheDescriptors(){
  INT64 v0; 
  INT64 v1; 
  INT64 *v2; 
  int v3; 
  unsigned int v4; 
  UINT64 *v6; 
  int v7; 
  _DWORD *v8; 
  WCHAR *v9; 
  char v10; 
  int v11; 
  _ETHREAD *CurrentThread; 
  _ETHREAD *v13; 
  char v14; 
  char v15; 
  v1 = v0;
  v11 = 0;
  v15 = 0;
  v14 = 0;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  v2 = (INT64 *)(v0 + 46840);
  ExAcquirePushLockSharedEx(v0 + 46840, 0i64);
  if( *(_BYTE *)(v1 + 46992) )
  {
    v11 = -1073741762;
  }
  else if( *(_BYTE *)(v1 + 46828) )
  {
    v3 = 0;
    if( !*(_DWORD *)(v1 + 46824) )
      v3 = -1073741772;
    v11 = v3;
  }
  else
  {
    v15 = 1;
  }
  if( _InterlockedCompareExchange64(v2, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared(v2);
  KeAbPostRelease(v2);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  v4 = v11;
  if( v11 >= 0 && v15 == 1 )
  {
    v13 = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)v13 + 242);
    ExAcquirePushLockExclusiveEx((UINT64)v2, 0i64);
    if( *(_BYTE *)(v1 + 46828) == 1 )
      goto LABEL_30;
    v6 = *(UINT64 **)v1;
    if( *(_QWORD *)v1 )
    {
      v7 = sub_1407A2000((UINT64 **)v1);
      v11 = v7;
      if( v7 < 0 )
        goto LABEL_30;
    }
    else
    {
      v6 = *(UINT64 **)(v1 + 46832);
      if( !v6 )
        goto LABEL_28;
      v7 = v11;
    }
    if( (*((_DWORD *)v6 + 3) & 1) != 0 )
      ExpSetLicenseTamperState(v1, 2i64);
    v8 = (_DWORD *)(v1 + 46824);
    v9 = (WCHAR *)(v1 + 24);
    if( !*(_DWORD *)(v1 + 46824) )
    {
      v7 = sub_1407A2064((INT64)v6, 1, (VOID *)(v1 + 24), 0xB6Dui64, (UINT64 *)(v1 + 46824));
      v11 = v7;
      v9 = (WCHAR *)(v1 + 24);
    }
    if( v7 >= 0 )
    {
      if( *v8 )
      {
        qsort(v9, (unsigned int)*v8, (const WCHAR *)0x10, sub_1407A6B40);
        *(_BYTE *)(v1 + 46828) = 1;
      }
      else
      {
        *(_BYTE *)(v1 + 46828) = 1;
        v11 = -1073741772;
      }
      goto LABEL_30;
    }
    if( v7 != -1073741789 )
    {
LABEL_30:
      v10 = _InterlockedExchangeAdd64(v2, 0xFFFFFFFFFFFFFFFFui64);
      if( (v10 & 2) != 0 && (v10 & 4) == 0 )
        ExfTryToWakePushLock(v2);
      KeAbPostRelease(v2);
      KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
      v4 = v11;
      goto LABEL_12;
    }
LABEL_28:
    v11 = -1073741762;
    *(_BYTE *)(v1 + 46992) = 1;
    v14 = 1;
    goto LABEL_30;
  }
LABEL_12:
  if( v14 )
    ntoskrnl_24(&KernelLicensingCacheCorrupt);
  return v4;
}

Referenced by:

SLQueryLicenseValueInternal