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