MiStartDpcGang
VOID __stdcall MiStartDpcGang(UINT64 *Context){
unsigned __int64 v2;
int v3;
_BOOL4 v4;
UINT64 v5;
UINT64 v6;
UINT64 v7;
__int64 v8;
__int64 v9;
__int16 v10;
unsigned __int8 CurrentIrql;
__int128 v12;
__int64 v13;
v2 = *((unsigned int *)Context + 47);
v13 = 0i64;
v3 = *((_DWORD *)Context + 46);
*((_DWORD *)Context + 49) = 0;
v4 = 1;
*((_DWORD *)Context + 44) = 0;
if( (v3 & 1) != 0 )
{
v5 = Context[1];
v6 = *Context;
v7 = v5 / v2;
v8 = 0i64;
v9 = (unsigned int)v2;
do
{
*(_QWORD *)(v8 + Context[2]) = v6;
v6 += v7;
v8 += 16i64;
*(_QWORD *)(v8 + Context[2] - 8) = v7;
--v9;
}
while( v9 );
*(_QWORD *)(Context[2] + 16i64 * (unsigned int)v2 - 8) += v5 - v7 * (unsigned int)v2;
}
else
{
v10 = *((_WORD *)Context + 77);
if( !v10 )
return;
if( v10 == 1 )
v4 = (v3 & 2) != 0;
}
while( 1 )
{
*((_DWORD *)Context + 44) = 0;
v12 = *(_OWORD *)(Context + 25);
if( v4 )
{
KeGenericCallDpc((__int64)MiDpcGangTarget, (__int64)Context);
}
else
{
MiGetGangAssignment((__int64)Context, &v13);
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
MiDoGangAssignment((_TOKEN *)Context);
__writecr8(CurrentIrql);
}
*(_OWORD *)(Context + 25) = v12;
if( !*((_DWORD *)Context + 49) )
break;
*((_DWORD *)Context + 49) = 0;
}
}Referenced by:
MiAllocateFastLargePagesForMdl
MiHugePageOperation
MiInitializeDynamicPfns