PfSnPrefetchCacheEntryUpdate

VOID __fastcall PfSnPrefetchCacheEntryUpdate(INT64 a1){
  void *v1; 
  unsigned __int8 *v3; 
  __int64 v4; 
  __int64 v5; 
  __int64 v6; 
  _ETHREAD *CurrentThread; 
  __int64 v8; 
  v1 = (void *)(a1 + 4);
  v3 = (unsigned __int8 *)(a1 + 4);
  v4 = 314159i64;
  v5 = 8i64;
  do
  {
    v6 = *v3;
    v3 += 8;
    v4 = *(v3 - 1)
       + 37
       * (*(v3 - 2)
        + 37
        * (*(v3 - 3) + 37 * (*(v3 - 4) + 37 * (*(v3 - 5) + 37 * (*(v3 - 6) + 37 * (*(v3 - 7) + 37 * (v6 + 37 * v4)))))));
    --v5;
  }
  while( v5 );
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquireResourceExclusiveLite(&stru_140C50220, 1u);
  v8 = qword_140C50210 - 16;
  if( !memcmp((PVOID)(qword_140C50210 - 16 + 32), v1, 0x40ui64)
    || (v8 = PfSnPrefetchCacheEntryGet(&qword_140C501F8, v1, v4, 0i64)) != 0 )
  {
    *(_DWORD *)(v8 + 112) = *(_DWORD *)(a1 + 68);
  }
  ExReleaseResourceLite(&stru_140C50220);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}

Referenced by:

PfSnSetPrefetcherInformation