SmcGetCacheStats

__int64 __fastcall SmcGetCacheStats(__int64 a1, _DWORD *a2){
  struct EX_RUNDOWN_REF v4; 
  unsigned __int64 Count; 
  int Path; 
  unsigned int v7; 
  int v8; 
  _ETHREAD *CurrentThread; 
  INT64 *v10; 
  _DWORD *v11; 
  __int64 v12; 
  memset((INT64)(a2 + 2), 0i64);
  v4.Count = SmcCacheReference(a1, (unsigned int)a2[1]).Count;
  Count = v4.Count;
  if( v4.Count )
  {
    v7 = a2[7] & 0xFFFFFFC0 | 1;
    a2[7] = v7;
    *((_QWORD *)a2 + 1) = *(_QWORD *)(v4.Count + 16);
    a2[5] = *(_DWORD *)(v4.Count + 8);
    a2[6] = *(_DWORD *)(v4.Count + 24);
    a2[25] = *(_DWORD *)(v4.Count + 32);
    a2[7] = v7 ^ ((unsigned __int8)v7 ^ (unsigned __int8)((unsigned __int8)*(_DWORD *)(v4.Count + 28) << 6)) & 0x40;
    if( (*a2 & 0x100) != 0 || (Path = SmKmFileInfoGetPath(v4.Count + 40, a2 + 26, 0x400u), Path >= 0) )
    {
      a2[24] = 0;
      v8 = 0;
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      --*((_WORD *)CurrentThread + 242);
      v10 = (INT64 *)(Count + 160);
      ExAcquirePushLockSharedEx(Count + 160, 0i64);
      v11 = (_DWORD *)(Count + 168);
      v12 = 16i64;
      do
      {
        if( *v11 != -1 )
        {
          a2[v8 + 8] = *v11;
          if( (v11[1] & 3) == 0 )
            a2[24] |= 1 << v8;
          ++v8;
        }
        v11 += 6;
        --v12;
      }
      while( v12 );
      if( _InterlockedCompareExchange64(v10, 0i64, 17i64) != 17 )
        ExfReleasePushLockShared(v10);
      KeAbPostRelease(v10);
      KeLeaveCriticalRegion();
      a2[4] = v8;
      Path = 0;
    }
    ExReleaseRundownProtection((PEX_RUNDOWN_REF)(32i64 * (a2[1] & 0xF) + a1 + 8));
  }
  else
  {
    return(unsigned int)-1073741672;
  }
  return(unsigned int)Path;
}

Referenced by:

SmcProcessStatsRequest