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