PfpScenCtxServiceThreadSet

VOID __stdcall PfpScenCtxServiceThreadSet(_PFP_SCENARIO_CONTEXT *ScenCtx, UINT64 Set){
  VOID *v2; 
  _ETHREAD *CurrentThread; 
  VOID *ThreadId; 
  _LARGE_INTEGER CreateTime; 
  _ETHREAD *v7; 
  char v8; 

  v2 = 0i64;
  if( (_DWORD)Set )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    ThreadId = PsGetThreadId(CurrentThread);
    CreateTime = CurrentThread->CreateTime;
    v2 = ThreadId;
  }
  else
  {
    CreateTime.QuadPart = 0i64;
  }
  v7 = (_ETHREAD *)KeGetCurrentThread();
  --v7->Tcb.KernelApcDisable;
  ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)ScenCtx, 0i64);
  *((_QWORD *)ScenCtx + 9) = v2;
  *((_LARGE_INTEGER *)ScenCtx + 10) = CreateTime;
  v8 = _InterlockedExchangeAdd64((volatile signed __int64 *)ScenCtx, 0xFFFFFFFFFFFFFFFFui64);
  if( (v8 & 2) != 0 && (v8 & 4) == 0 )
    ExfTryToWakePushLock((_EX_PUSH_LOCK *)ScenCtx);
  KeAbPostRelease(ScenCtx);
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
}

Referenced by:

PfSetSuperfetchInformation