WbDecryptEncryptionSegment
INT64 __fastcall WbDecryptEncryptionSegment(INT64 a1, struct wil_details_FeatureReportingCache *a2, UINT64 a3){
int InitializedEncryptionSegment;
_ETHREAD *CurrentThread;
UINT64 *v5;
_BYTE *v6;
struct wil_details_FeatureReportingCache *v7;
INT64 v8;
INT64 v9;
_BYTE *v10;
char v11;
INT64 v13;
v13 = 0i64;
if( (unsigned int)a3 < 0x10 )
{
InitializedEncryptionSegment = -1073741811;
}
else
{
InitializedEncryptionSegment = WbGetInitializedEncryptionSegment(a1, a2, a3, (volatile INT64 **)&v13);
if( InitializedEncryptionSegment >= 0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 243);
v5 = (UINT64 *)(v13 + 8);
LODWORD(v6) = KeAbPreAcquire((PVOID)(v13 + 8), 0i64, 0i64);
v10 = v6;
if( _interlockedbittestandset64((volatile signed __int32 *)v5, 0i64) )
ExfAcquirePushLockExclusiveEx(v5, v6, v5);
if( v10 )
v10[26] |= 1u;
InitializedEncryptionSegment = WbDecryptWarbirdEncryptionSegment(v13, v7, v8, v9);
v11 = _InterlockedExchangeAdd64((volatile signed __int64 *)v5, 0xFFFFFFFFFFFFFFFFui64);
if( (v11 & 2) != 0 && (v11 & 4) == 0 )
ExfTryToWakePushLock((volatile INT64 *)v5);
KeAbPostRelease(v5);
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
}
}
sub_1405D2184((volatile INT64 *)v13);
return(unsigned int)InitializedEncryptionSegment;
}Referenced by:
WbDispatchOperation