ExInitializeRundownProtectionCacheAware

VOID __fastcall ExInitializeRundownProtectionCacheAware(
        _EX_RUNDOWN_REF_CACHE_AWARE *RunRefCacheAware,
        UINT64 RunRefSize){
  unsigned int v2; 
  unsigned int RecommendedSharedDataAlignment; 
  _EX_RUNDOWN_REF *v4; 
  unsigned int v6; 
  unsigned int v7; 
  unsigned int v8; 
  v2 = RunRefSize - 24;
  RecommendedSharedDataAlignment = 8;
  v4 = (_EX_RUNDOWN_REF *)&RunRefCacheAware[1];
  if( (_DWORD)RunRefSize == 32 )
  {
    v6 = 1;
  }
  else
  {
    RecommendedSharedDataAlignment = KeGetRecommendedSharedDataAlignment();
    v6 = v2 / RecommendedSharedDataAlignment - 1;
    v4 = (_EX_RUNDOWN_REF *)(~(unsigned __int64)(RecommendedSharedDataAlignment - 1) & ((unsigned __int64)v4
                                                                                      + RecommendedSharedDataAlignment
                                                                                      - 1));
  }
  RunRefCacheAware->RunRefSize = RecommendedSharedDataAlignment;
  v7 = 0;
  RunRefCacheAware->RunRefs = v4;
  RunRefCacheAware->Number = v6;
  for( RunRefCacheAware->PoolToFree = (void *)195938833;
        v7 < RunRefCacheAware->Number;
        *(unsigned __int64 *)((char *)&RunRefCacheAware->RunRefs->Count + RunRefCacheAware->RunRefSize * v8) = 0i64 )
  {
    v8 = v7 % RunRefCacheAware->Number;
    ++v7;
  }
}

Referenced by:

No references.