ExpGetPoolTagInfoTarget
VOID __stdcall ExpGetPoolTagInfoTarget(_KDPC *Dpc, VOID *DeferredContext, VOID *SystemArgument1, VOID *SystemArgument2){
signed __int32 v7;
unsigned int v8;
__int64 *v9;
__int64 v10;
__int64 v11;
__int64 v12;
__int64 v13;
signed __int32 v14;
unsigned int v15;
_QWORD *i;
UINT64 v17;
UINT64 SpinCount;
LODWORD(v17) = 0;
v7 = _InterlockedDecrement((volatile signed __int32 *)SystemArgument2);
v8 = ~v7 & 0x80000000;
if( (v7 & 0x7FFFFFFF) != 0 )
{
while( (*(_DWORD *)SystemArgument2 & 0x80000000) != v8 )
KeYieldProcessorEx(&v17);
}
else
{
*(_DWORD *)SystemArgument2 = v8 | *((_DWORD *)SystemArgument2 + 1);
memmove(
*(VOID **)DeferredContext,
*(&WheapDeferredInternalLogsEventLock + 372),
56 * *((_DWORD *)DeferredContext + 2));
v9 = (__int64 *)((char *)&WheapDeferredInternalLogsEventLock + 2984);
v10 = 1279i64;
v11 = *(_QWORD *)DeferredContext + 56i64 * *((_QWORD *)DeferredContext + 1);
do
{
v12 = *v9;
if( *v9 )
{
for( i = *(_QWORD **)DeferredContext; i != (_QWORD *)v11; v12 += 56i64 )
{
if( *(_DWORD *)v12 )
{
i[2] += *(_QWORD *)(v12 + 16);
i[3] += *(_QWORD *)(v12 + 24);
i[1] += *(_QWORD *)(v12 + 8);
i[5] += *(_QWORD *)(v12 + 40);
i[6] += *(_QWORD *)(v12 + 48);
i[4] += *(_QWORD *)(v12 + 32);
}
i += 7;
}
}
++v9;
--v10;
}
while( v10 );
v13 = *((_QWORD *)DeferredContext + 3);
if( v13 )
memmove(*((VOID **)DeferredContext + 2), PoolTrackTableExpansion, 56 * v13);
}
v14 = _InterlockedDecrement((volatile signed __int32 *)SystemArgument2);
v15 = ~v14 & 0x80000000;
if( (v14 & 0x7FFFFFFF) != 0 )
{
LODWORD(SpinCount) = 0;
while( (*(_DWORD *)SystemArgument2 & 0x80000000) != v15 )
KeYieldProcessorEx(&SpinCount);
}
else
{
*(_DWORD *)SystemArgument2 = v15 | *((_DWORD *)SystemArgument2 + 1);
}
_InterlockedDecrement((volatile signed __int32 *)SystemArgument1);
}Referenced by:
No references.