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.