KseShimDatabaseBootRelease
VOID __stdcall KseShimDatabaseBootRelease(){
_ETHREAD *CurrentThread;
int v1;
char v2;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockExclusiveEx((UINT64)&KsepShimDbLock, 0i64);
if( KsepShimDbDuringBoot )
{
v1 = KsepShimDbRefCount;
if( !KsepShimDbRefCount || (--KsepShimDbRefCount, v1 == 1) )
{
KsepSdbBootRelease((INT64)&KsepShimDb);
KsepSdbBootRelease((INT64)&qword_140C2ACD8);
KsepShimDbHandle = 0i64;
KsepShimDbDuringBoot = 0;
}
}
v2 = _InterlockedExchangeAdd64((volatile signed __int64 *)&KsepShimDbLock, 0xFFFFFFFFFFFFFFFFui64);
if( (v2 & 2) != 0 && (v2 & 4) == 0 )
ExfTryToWakePushLock((volatile INT64 *)&KsepShimDbLock);
KeAbPostRelease(&KsepShimDbLock);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}Referenced by:
KseShimDatabaseClose
PnpCompleteSystemStartProcess