PfSnSectionInfoCleanupWorkItem

VOID __stdcall PfSnSectionInfoCleanupWorkItem(_PFSN_WORKITEM_CONTEXT *Context){
  UINT8 v1; 
  __int64 v2; 
  _QWORD *v3; 
  __int64 v4; 
  __int64 v5; 
  _ETHREAD *CurrentThread; 
  unsigned __int32 v7; 
  __int64 v8; 
  void *v9; 
  __int64 v10; 
  UINT8 v11; 

  v2 = *((_QWORD *)Context + 4);
  LOBYTE(Context) = 1;
  v3 = *(_QWORD **)(v2 + 8);
  v4 = v3[8];
  v5 = v3[9];
  PsSetCurrentThreadPrefetching((_ERESOURCE *)Context, v1);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  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(KeGetCurrentThread());
  PsSetCurrentThreadPrefetching(0i64, v11);
  ExReleaseRundownProtection((_EX_RUNDOWN_REF *)v2);
}

Referenced by:

No references.