KxFlushNonGlobalTb
VOID __stdcall KxFlushNonGlobalTb(_KTBFLUSH_TARGET ProcessorSet){
unsigned __int8 CurrentIrql;
struct _KPRCB *CurrentPrcb;
_KSTATIC_AFFINITY_BLOCK *p_StaticAffinity;
_IPI_TYPE v4;
int v5[8];
CurrentIrql = KeGetCurrentIrql();
__writecr8(0xCui64);
CurrentPrcb = KeGetCurrentPrcb();
if( ProcessorSet == FlushSubsetProcessors )
{
_InterlockedOr(v5, 0);
p_StaticAffinity = &CurrentPrcb->StaticAffinity;
KeCopyAffinityEx(
&CurrentPrcb->StaticAffinity.KeFlushTbAffinity,
(_KAFFINITY_EX *)&CurrentPrcb->CurrentThread->Tcb.ApcState.Process->Pcb.ActiveProcessors);
KeRemoveProcessorAffinityEx(&CurrentPrcb->StaticAffinity.KeFlushTbAffinity.Count, CurrentPrcb->Number);
v4 = IpiAffinity;
goto LABEL_7;
}
p_StaticAffinity = 0i64;
v4 = IpiAllButSelf;
if( !KiKvaShadow )
{
LABEL_7:
KiIpiSendRequestEx(CurrentPrcb, v4, p_StaticAffinity, 0i64, 1ui64, (INT64)KiFlushProcessTbWorker, 0i64);
goto LABEL_5;
}
if( KxSetTimeStampBusy((INT64 *)&KiTbFlushTimeStamp) )
{
KiIpiSendRequestEx(CurrentPrcb, IpiAllButSelf, 0i64, 0i64, 1ui64, (INT64)KiFlushProcessTbWorker, 0i64);
_InterlockedAdd((volatile signed __int32 *)&KiTbFlushTimeStamp, 1u);
}
LABEL_5:
__writecr8(CurrentIrql);
}Referenced by:
KeFlushTb