SmcCacheCreatePrepare
NTSTATUS __stdcall SmcCacheCreatePrepare(_SMC_CACHE_MANAGER *CacheMgr){
_ETHREAD *CurrentThread;
int v2;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v2 = 0;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx(&BugCheckParameter2, 0i64);
if( ((unsigned __int8)StoreProcess & 8) == 0 )
{
v2 = SmRegistrationCtxStart(&CachesUpdatedEvent);
if( v2 >= 0 )
LODWORD(StoreProcess) = (unsigned int)StoreProcess | 8;
}
if( ((unsigned __int8)StoreProcess & 4) == 0 && ((unsigned __int8)StoreProcess & 8) != 0 )
{
v2 = SmcCacheManagerStart(CacheMgr, *(_KEVENT **)&CachesUpdatedEvent);
if( v2 >= 0 )
LODWORD(StoreProcess) = (unsigned int)StoreProcess | 4;
}
if( (_InterlockedExchangeAdd64(&BugCheckParameter2._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(&BugCheckParameter2);
KeAbPostRelease(&BugCheckParameter2);
KeLeaveCriticalRegion();
return v2;
}Referenced by:
SmcProcessCreateRequest