PfpScenCtxPrefetchAbortSet
NTSTATUS __stdcall PfpScenCtxPrefetchAbortSet(
VOID *ScenCtx,
PF_PHASED_SCENARIO_TYPE Scenario,
_KEVENT *PrefetchAbortEvent,
UINT64 RemoveAbort,
UINT64 LockHeld){
int v5;
bool v9;
NTSTATUS v10;
_ETHREAD *CurrentThread;
v5 = RemoveAbort;
if( !(_DWORD)LockHeld )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)ScenCtx, 0i64);
}
if( *((_DWORD *)ScenCtx + 12) != Scenario )
{
v10 = -1073741735;
goto LABEL_8;
}
v9 = v5 == 0;
if( !v5 )
{
if( (*((_DWORD *)ScenCtx + 2) & 0xC) == 8 )
{
v10 = -1073741431;
goto LABEL_8;
}
v9 = 1;
}
if( !v9 )
PrefetchAbortEvent = 0i64;
*((_QWORD *)ScenCtx + 5) = PrefetchAbortEvent;
v10 = 0;
LABEL_8:
if( !(_DWORD)LockHeld )
{
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)ScenCtx, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((_EX_PUSH_LOCK *)ScenCtx);
KeAbPostRelease(ScenCtx);
KeLeaveCriticalRegion();
}
return v10;
}Referenced by:
PfpPrefetchRequestPerform