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