ExInitLicenseData

VOID __stdcall ExInitLicenseData(){
  __int64 v0; 
  char v1; 
  _EJOB *CurrentServerSilo; 
  _ETHREAD *CurrentThread; 
  volatile signed __int64 *v4; 
  _ETHREAD *v5; 
  _ETHREAD *v6; 
  int v7; 
  char v8; 
  INT64 v9; 
  __int128 *v10; 
  __int64 v11; 
  unsigned __int64 v12; 
  _ETHREAD *v13; 
  _ETHREAD *v14; 
  _EJOB *v15; 
  int ExpirationDate; 
  _LARGE_INTEGER v17; 
  union _LARGE_INTEGER Time; 
  __int64 v19[5]; 
  char v20; 
  int v21; 
  __int16 v22; 
  char v23; 
  __int128 v24; 
  Time.QuadPart = 0i64;
  v0 = PsGetCurrentServerSiloGlobals()[113];
  v1 = *(_BYTE *)(v0 + 46992);
  CurrentServerSilo = PsGetCurrentServerSilo();
  if( PsIsHostSilo(CurrentServerSilo) )
  {
    ClipInitHandles();
    sub_140A5D438();
  }
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  v4 = (volatile signed __int64 *)(v0 + 46840);
  ExAcquirePushLockExclusiveEx(v0 + 46840, 0i64);
  v21 = 0;
  v22 = 0;
  v23 = 0;
  memset(v19, 0, 32);
  v19[4] = 10800i64;
  v20 = 1;
  if( InitSafeBootMode || InitIsWinPEMode )
    v20 = 0;
  ExpSetKernelDataProtection(v0, (__int64)v19, -1, 1);
  if( (_InterlockedExchangeAdd64(v4, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((volatile INT64 *)(v0 + 46840));
  KeAbPostRelease((PVOID)(v0 + 46840));
  KeLeaveCriticalRegion();
  v5 = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)v5 + 242);
  ExAcquirePushLockExclusiveEx(v0 + 46840, 0i64);
  *(_DWORD *)(v0 + 8) = 0;
  if( (_InterlockedExchangeAdd64(v4, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((volatile INT64 *)(v0 + 46840));
  KeAbPostRelease((PVOID)(v0 + 46840));
  KeLeaveCriticalRegion();
  if( *(_QWORD *)v0 )
  {
    v6 = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)v6 + 242);
    ExAcquirePushLockExclusiveEx(v0 + 46840, 0i64);
    v7 = sub_1407A2000((UINT64 **)v0);
    if( v7 == -1073741762 )
    {
      *(_BYTE *)(v0 + 46992) = 1;
      v8 = 1;
    }
    else
    {
      v8 = *(_BYTE *)(v0 + 46992);
    }
    if( (_InterlockedExchangeAdd64(v4, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((volatile INT64 *)(v0 + 46840));
    KeAbPostRelease((PVOID)(v0 + 46840));
    KeLeaveCriticalRegion();
    if( !v1 && v8 )
      ntoskrnl_24(&KernelLicensingCacheCorrupt);
    if( v7 >= 0 && !v8 )
    {
      v9 = *(unsigned int *)(*(_QWORD *)v0 + 81920i64);
      if( qword_140D2C520 )
        ((void(__fastcall *)(__int64, INT64))qword_140D2C520)(v0, v9);
      else
        SLUpdateLicenseDataInternal(v0, v9, *(UINT8 **)v0);
    }
    v10 = &v24;
    v11 = 16i64;
    do
    {
      v12 = __rdtsc();
      *(_BYTE *)v10 = v12;
      v10 = (__int128 *)((char *)v10 + 1);
      --v11;
    }
    while( v11 );
    v13 = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)v13 + 242);
    ExAcquirePushLockExclusiveEx(v0 + 46840, 0i64);
    *(_OWORD *)(v0 + 46993) = v24;
    if( (_InterlockedExchangeAdd64(v4, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((volatile INT64 *)(v0 + 46840));
    KeAbPostRelease((PVOID)(v0 + 46840));
    KeLeaveCriticalRegion();
    v14 = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)v14 + 242);
    ExAcquirePushLockExclusiveEx(v0 + 46840, 0i64);
    v15 = PsGetCurrentServerSilo();
    if( !PsIsHostSilo(v15) && *(_QWORD *)v0 )
      ExFreePoolWithTag(*(PVOID *)v0, 0x69534C53u);
    *(_QWORD *)v0 = 0i64;
    if( !*(_QWORD *)(v0 + 46832) && *(_DWORD *)(v0 + 46824) )
    {
      memset(v0 + 24, 0i64);
      *(_DWORD *)(v0 + 46824) = 0;
    }
    if( (_InterlockedExchangeAdd64(v4, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((volatile INT64 *)(v0 + 46840));
    KeAbPostRelease((PVOID)(v0 + 46840));
    KeLeaveCriticalRegion();
  }
  if( !ExpSystemSetupInProgress )
  {
    ExpirationDate = ExGetExpirationDate(&Time);
    v17 = Time;
    if( ExpirationDate < 0 )
      v17.QuadPart = 0i64;
    KUSER_SHARED_DATA.SystemExpirationDate = v17;
  }
}

Referenced by:

Phase1InitializationIoReady
sub_1405B03A8