PnprQuiesceProcessors
INT64 __stdcall PnprQuiesceProcessors(){
void *v0;
__int128 v1;
unsigned __int64 v2;
__int128 v3;
__int128 v4;
__int128 v5;
__int128 v6;
__int128 v7;
__int128 v8;
__int128 v9;
_DWORD *v10;
int v11;
int v12;
int v13;
__int128 v14;
__int128 v15;
__int128 v16;
__int128 v17;
__int128 v18;
__int128 v19;
__int128 v20;
__int128 v21;
INT64 v22;
unsigned int MillisecondCounter;
UINT64 v24;
UINT64 v25;
int v26;
unsigned __int64 v27;
__int128 v28;
unsigned int v29;
__int128 v30;
__int128 v31;
__int128 v32;
__int128 v33;
__int128 v34;
__int128 v35;
__int128 v36;
__int128 v37;
__int64 v38;
__int64 v39;
__int64 v40;
int v41;
UINT64 v42;
int v43;
int v44;
__int128 v45;
__int128 v46;
__int128 v47;
__int128 v48;
__int128 v49;
__int128 v50;
__int128 v51;
__int128 v52;
unsigned __int64 v53;
int i;
char DeferredContext;
unsigned int DeferredContext_4;
unsigned __int16 *v57[2];
__int16 v58;
int v59;
__int16 v60;
struct _KDPC Dpc;
__int128 result;
__int128 v63;
__int128 v64;
__int128 v65;
__int128 v66;
__int128 v67;
__int128 v68;
__int128 v69;
__int128 v70;
__int128 v71;
INT64 v72;
memset((INT64)&result, 0i64);
v59 = 0;
v60 = 0;
DeferredContext_4 = 0;
memset((INT64)&Dpc, 0i64);
v0 = (void *)*(unsigned int *)(PnprContext + 176);
KeGetCurrentIrql();
__writecr8(2ui64);
KeInitializeDpc(&Dpc, (PKDEFERRED_ROUTINE)PnprQuiesceProcessorDpc, &DeferredContext);
Dpc.Importance = 2;
v1 = *(_OWORD *)&KeActiveProcessors.Bitmap[1];
v2 = KeActiveProcessors.Bitmap[19];
result = *(_OWORD *)&KeActiveProcessors.Count;
v3 = *(_OWORD *)&KeActiveProcessors.Bitmap[3];
v63 = v1;
v4 = *(_OWORD *)&KeActiveProcessors.Bitmap[5];
v64 = v3;
v5 = *(_OWORD *)&KeActiveProcessors.Bitmap[7];
v65 = v4;
v6 = *(_OWORD *)&KeActiveProcessors.Bitmap[9];
v66 = v5;
v7 = *(_OWORD *)&KeActiveProcessors.Bitmap[11];
v67 = v6;
v8 = *(_OWORD *)&KeActiveProcessors.Bitmap[15];
v68 = v7;
v69 = *(_OWORD *)&KeActiveProcessors.Bitmap[13];
v9 = *(_OWORD *)&KeActiveProcessors.Bitmap[17];
v70 = v8;
v71 = v9;
v72 = v2;
KeRemoveProcessorAffinityEx((unsigned __int16 *)&result, *(_DWORD *)(PnprContext + 180));
v57[1] = *((unsigned __int16 **)&result + 1);
v57[0] = (unsigned __int16 *)&result;
v58 = 0;
while( !(unsigned int)KeEnumerateNextProcessor(&DeferredContext_4, v57) )
{
if( !Dpc.DpcData )
Dpc.Number = DeferredContext_4 + 1280;
DeferredContext = 0;
KeInsertQueueDpc(&Dpc, v0, (PVOID)DeferredContext_4);
while( !DeferredContext )
_mm_pause();
}
if( (*(_DWORD *)(PnprContext + 64) & 0x20) != 0 && (int)off_140C006D8[0]() < 0 )
{
v10 = (_DWORD *)PnprContext;
v11 = 2447;
}
else
{
((void(__fastcall *)(_QWORD, _QWORD))off_140C00688[0])(0i64, *(_QWORD *)(PnprContext + 20872));
KeSuspendClockTimerSafe();
MillisecondCounter = PnprGetMillisecondCounter(0);
v24 = PnprContext;
*(_QWORD *)(PnprContext + 20992) = MillisecondCounter;
_InterlockedAdd((volatile signed __int32 *)(v24 + 184), 1u);
while( *(_DWORD *)(PnprContext + 184) < (int)v0 )
_mm_pause();
v25 = PnprContext;
if( (*(_DWORD *)(PnprContext + 64) & 0x20) != 0 )
{
_InterlockedAdd((volatile signed __int32 *)(PnprContext + 192), 1u);
while( *(_DWORD *)(PnprContext + 192) < (int)v0 )
_mm_pause();
LOBYTE(v25) = 1;
(*(void(__fastcall **)(_QWORD, UINT64))(PnprContext + 20976))(*(_QWORD *)(PnprContext + 20880), v25);
v26 = PnprGetMillisecondCounter(0);
v25 = PnprContext;
*(_DWORD *)(PnprContext + 21000) = v26;
}
v27 = KeActiveProcessors.Bitmap[19];
v28 = *(_OWORD *)&KeActiveProcessors.Bitmap[1];
v29 = 0;
result = *(_OWORD *)&KeActiveProcessors.Count;
v30 = *(_OWORD *)&KeActiveProcessors.Bitmap[3];
v63 = v28;
v31 = *(_OWORD *)&KeActiveProcessors.Bitmap[5];
v64 = v30;
v32 = *(_OWORD *)&KeActiveProcessors.Bitmap[7];
v65 = v31;
v33 = *(_OWORD *)&KeActiveProcessors.Bitmap[9];
v66 = v32;
v34 = *(_OWORD *)&KeActiveProcessors.Bitmap[11];
v67 = v33;
v35 = *(_OWORD *)&KeActiveProcessors.Bitmap[13];
v68 = v34;
v36 = *(_OWORD *)&KeActiveProcessors.Bitmap[15];
v69 = v35;
v37 = *(_OWORD *)&KeActiveProcessors.Bitmap[17];
v70 = v36;
v71 = v37;
v72 = v27;
v38 = *(_QWORD *)(v25 + 16);
if( *(_DWORD *)(v38 + 8) )
{
do
{
v39 = v29++;
KeActiveProcessors.Bitmap[v39] &= ~*(_QWORD *)(*(_QWORD *)v38 + 8 * v39);
}
while( v29 < *(_DWORD *)(v38 + 8) );
}
v10 = (_DWORD *)PnprContext;
v40 = *(_QWORD *)(PnprContext + 16);
*(_QWORD *)(PnprContext + 200) = 1i64;
if( !*(_DWORD *)(v40 + 16)
|| (v41 = PnprGetMillisecondCounter(0),
v42 = PnprContext,
*(_DWORD *)(PnprContext + 21004) = v41,
v43 = ((__int64(__fastcall *)(__int64, _QWORD))off_140C00688[0])(1i64, *(_QWORD *)(v42 + 20872)),
v44 = PnprGetMillisecondCounter(0),
v10 = (_DWORD *)PnprContext,
*(_DWORD *)(PnprContext + 21008) = v44,
v43 >= 0) )
{
*(_OWORD *)&KeActiveProcessors.Count = result;
v45 = v64;
*(_OWORD *)&KeActiveProcessors.Bitmap[1] = v63;
v46 = v65;
*(_OWORD *)&KeActiveProcessors.Bitmap[3] = v45;
v47 = v66;
*(_OWORD *)&KeActiveProcessors.Bitmap[5] = v46;
v48 = v67;
*(_OWORD *)&KeActiveProcessors.Bitmap[7] = v47;
v49 = v68;
*(_OWORD *)&KeActiveProcessors.Bitmap[9] = v48;
v50 = v69;
*(_OWORD *)&KeActiveProcessors.Bitmap[11] = v49;
v51 = v70;
*(_OWORD *)&KeActiveProcessors.Bitmap[13] = v50;
v52 = v71;
v53 = v72;
*(_OWORD *)&KeActiveProcessors.Bitmap[15] = v51;
*(_OWORD *)&KeActiveProcessors.Bitmap[17] = v52;
KeActiveProcessors.Bitmap[19] = v53;
for( i = v10[51]; ; i = *(_DWORD *)(PnprContext + 204) )
{
v22 = PnprContext;
if( i >= *(_DWORD *)(*(_QWORD *)(PnprContext + 16) + 16i64) )
break;
_mm_pause();
}
return v22;
}
v11 = 2532;
}
v12 = v10[5246];
if( !v12 )
v12 = v11;
v10[5246] = v12;
v13 = v10[5247];
if( !v13 )
v13 = 1;
v10[5247] = v13;
*(_OWORD *)&KeActiveProcessors.Count = result;
v14 = v64;
*(_OWORD *)&KeActiveProcessors.Bitmap[1] = v63;
v15 = v65;
*(_OWORD *)&KeActiveProcessors.Bitmap[3] = v14;
v16 = v66;
*(_OWORD *)&KeActiveProcessors.Bitmap[5] = v15;
v17 = v67;
*(_OWORD *)&KeActiveProcessors.Bitmap[7] = v16;
v18 = v68;
*(_OWORD *)&KeActiveProcessors.Bitmap[9] = v17;
v19 = v69;
*(_OWORD *)&KeActiveProcessors.Bitmap[11] = v18;
v20 = v70;
*(_OWORD *)&KeActiveProcessors.Bitmap[13] = v19;
v21 = v71;
v22 = v72;
*(_OWORD *)&KeActiveProcessors.Bitmap[15] = v20;
*(_OWORD *)&KeActiveProcessors.Bitmap[17] = v21;
KeActiveProcessors.Bitmap[19] = v22;
return v22;
}Referenced by:
PnprQuiesce