PfSnSectionInfoCleanupWorkItem

void __fastcall PfSnSectionInfoCleanupWorkItem(__int64 a1, UINT8 a2){
  __int64 v2; 
  _QWORD *v3; 
  __int64 v4; 
  __int64 v5; 
  _ETHREAD *CurrentThread; 
  unsigned __int32 v7; 
  __int64 v8; 
  void *v9; 
  __int64 v10; 
  UINT8 v11; 
  v2 = *(_QWORD *)(a1 + 32);
  LOBYTE(a1) = 1;
  v3 = *(_QWORD **)(v2 + 8);
  v4 = v3[8];
  v5 = v3[9];
  PsSetCurrentThreadPrefetching((_ERESOURCE *)a1, a2);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  while( 1 )
  {
    v7 = _InterlockedExchangeAdd((volatile signed __int32 *)(v2 + 28), 1u);
    if( v7 >= *(_DWORD *)(v2 + 32) )
      break;
    v8 = v7;
    v9 = *(void **)(v4 + 8i64 * v7);
    if( v9 )
      ExFreePoolWithTag(v9, 0);
    v10 = *(unsigned int *)(v5 + 4 * v8);
    if( (int)v10 >= 0 )
      PfSnCleanupPrefetchSectionInfo(v3[7] + 56 * v10, (INT64)v3, 1);
  }
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  PsSetCurrentThreadPrefetching(0i64, v11);
  ExReleaseRundownProtection((PEX_RUNDOWN_REF)v2);
}

Referenced by:

No references.