KeIpiGenericCall
PVOID __stdcall KeIpiGenericCall(PKIPI_BROADCAST_WORKER BroadcastFunction, PVOID Context){
unsigned __int8 CurrentIrql;
int v5;
void *v6;
struct _KPRCB *CurrentPrcb;
INT64 v9;
UINT64 SpinCount;
CurrentIrql = KeGetCurrentIrql();
if( CurrentIrql < 0xCu )
{
KeGetCurrentIrql();
__writecr8(0xCui64);
}
LODWORD(SpinCount) = 0;
LODWORD(v9) = KeQueryActiveProcessorCountEx(0xFFFFu);
v5 = v9 - 1;
KxAcquireSpinLock(&KiReverseStallIpiLock);
if( v5 )
KiIpiSendPacket(1i64, 0i64, (INT64)KiIpiGenericCallTarget, (INT64)BroadcastFunction, (INT64)Context, (INT64)&v9);
while( (_DWORD)v9 != 1 )
KeYieldProcessorEx(&SpinCount);
KeGetCurrentIrql();
__writecr8(0xEui64);
LODWORD(v9) = 0;
v6 = (void *)((__int64(__fastcall *)(PVOID))BroadcastFunction)(Context);
if( v5 )
{
if( CurrentIrql <= 0xCu )
__writecr8(0xCui64);
CurrentPrcb = KeGetCurrentPrcb();
while( *((_DWORD *)CurrentPrcb + 2912) )
_mm_pause();
}
KxReleaseSpinLock(&KiReverseStallIpiLock);
__writecr8(CurrentIrql);
return v6;
}Referenced by:
HalpCmciHandler
HalpLbrConfigurationWorker
HalpTimerMeasureAllProcessorFrequencies
HalpTscFallbackToPlatformSource
HalpTscSynchronization
IoInitSystemPreDrivers
KeAdjustInterruptTime
KeRestoreMtrrBroadcast
KeStartProfile
KeStopProfile
KiDynamicProcessorInitialization
KiUpdateNumberProcessors
KiUpdateSavedSupervisorState
MiStackTheftFreezeProcessors
MiZeroPageCalibrate
MmRemoveImportOptimizationForDriverVerifier