EtwpLogMemInfoWs

VOID __stdcall EtwpLogMemInfoWs(UINT64 *LoggerId, UINT64 PagedPoolCommitPageCount){
  __int64 v3; 
  unsigned int v4; 
  unsigned int v5; 
  int v6; 
  VOID **PoolWithTag; 
  VOID **v8; 
  __int64 v9; 
  int *v10; 
  int v11; 
  unsigned __int64 v12; 
  UINT64 v13; 
  _LIST_ENTRY *NextProcess; 
  unsigned int *v15; 
  __int64 v16; 
  int Flink_high; 
  int v18; 
  size_t v19; 
  VOID **v20; 
  unsigned int *v21; 
  unsigned __int64 v22; 
  unsigned __int64 v23; 
  unsigned __int64 v24; 
  int v25; 
  char *v26; 
  UINT64 StoreSizeInBytes; 
  UINT64 DataInStoreInBytes; 
  UINT64 *v29; 
  UINT64 v30; 
  __int64 v31[8]; 
  int v32[4]; 

  v30 = PagedPoolCommitPageCount;
  v29 = LoggerId;
  LODWORD(v3) = 64;
  v32[0] = 81;
  v32[1] = 119;
  v32[2] = 120;
  memset(v31, 0i64, sizeof(v31));
  v4 = 0;
  StoreSizeInBytes = 0i64;
  DataInStoreInBytes = 0i64;
  EtwpLogSessionWorkingSetInfo(LoggerId);
  v5 = 4356;
  v6 = -1;
  PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x1104ui64, 1953985605i64);
  v8 = PoolWithTag;
  if( !PoolWithTag )
    return;
  v9 = (__int64)PoolWithTag + 4;
  *(_DWORD *)PoolWithTag = 0;
  v26 = (char *)PoolWithTag + 4356;
  v10 = v32;
  do
  {
    v25 = *v10;
    ZwQuerySystemInformation();
    if( v11 )
      goto LABEL_31;
    *(_DWORD *)v9 = v6;
    v12 = (unsigned __int64)v31[0] >> 12;
    *(_QWORD *)(v9 + 4) = (unsigned __int64)v31[0] >> 12;
    *(_QWORD *)(v9 + 28) = v12;
    *(_QWORD *)(v9 + 12) = v12;
    *(_QWORD *)(v9 + 60) = 0i64;
    *(_QWORD *)(v9 + 20) = v12;
    *(_QWORD *)(v9 + 44) = 0i64;
    *(_QWORD *)(v9 + 36) = 0i64;
    *(_QWORD *)(v9 + 52) = 0i64;
    if( v25 == 119 )
    {
      v13 = v30;
      if( v30 > v12 )
      {
        *(_QWORD *)(v9 + 12) = v30;
        *(_QWORD *)(v9 + 20) = v13;
      }
    }
    ++*(_DWORD *)v8;
    v9 += 68i64;
    --v6;
    ++v4;
    ++v10;
  }
  while( v4 < 3 );
  NextProcess = *(_LIST_ENTRY **)&PsIdleProcess;
  v15 = (unsigned int *)v29;
  if( !*(_QWORD *)&PsIdleProcess )
  {
LABEL_30:
    EtwpLogMemInfoWsHelper(v15, v8);
    goto LABEL_31;
  }
  v16 = (__int64)v26;
  while( 1 )
  {
    Flink_high = HIDWORD(NextProcess[70].Flink);
    if( (Flink_high & 0x4000000) != 0
      && ((Flink_high & 4) == 0
       || !HIDWORD(NextProcess->Flink)
       || LODWORD(NextProcess[95].Flink)
       || NextProcess[3].Flink != &NextProcess[3]) )
    {
      break;
    }
LABEL_27:
    if( NextProcess == *(_LIST_ENTRY **)&PsIdleProcess )
      NextProcess = 0i64;
    NextProcess = PsGetNextProcess((_EPROCESS *)NextProcess);
    if( !NextProcess )
      goto LABEL_30;
  }
  if( v9 != v16 )
  {
LABEL_20:
    *(_DWORD *)v9 = NextProcess[68].Flink;
    *(_QWORD *)(v9 + 4) = NextProcess[111].Blink;
    *(_QWORD *)(v9 + 28) = NextProcess[112].Flink;
    *(_QWORD *)(v9 + 12) = NextProcess[100].Blink;
    *(_QWORD *)(v9 + 60) = NextProcess[146].Blink;
    *(_QWORD *)(v9 + 20) = (unsigned __int64)NextProcess[73].Blink >> 12;
    v22 = *(_QWORD *)(v9 + 12);
    if( v22 >= *(_QWORD *)(v9 + 20) )
      v22 = *(_QWORD *)(v9 + 20);
    v23 = *(_QWORD *)(v9 + 4);
    *(_QWORD *)(v9 + 12) = v22;
    v24 = *(_QWORD *)(v9 + 28);
    if( v24 >= v23 )
      v24 = v23;
    *(_QWORD *)(v9 + 36) = 0i64;
    *(_QWORD *)(v9 + 44) = 0i64;
    *(_QWORD *)(v9 + 28) = v24;
    *(_QWORD *)(v9 + 52) = NextProcess[116].Blink;
    if( SmProcessQueryStoreStats(NextProcess, &StoreSizeInBytes, &DataInStoreInBytes) >= 0 )
    {
      *(_QWORD *)(v9 + 36) = StoreSizeInBytes >> 12;
      *(_QWORD *)(v9 + 44) = DataInStoreInBytes >> 12;
    }
    v9 += 68i64;
    ++*(_DWORD *)v8;
    goto LABEL_27;
  }
  if( (unsigned int)v3 >= 0x100 )
  {
    EtwpLogMemInfoWsHelper(v15, v8);
    *(_DWORD *)v8 = 0;
    v9 = (__int64)v8 + 4;
    goto LABEL_20;
  }
  v18 = 68 * v3;
  v19 = v5;
  v3 = (unsigned int)(2 * v3);
  v5 += v18;
  v20 = ExAllocatePoolWithTag(0x200ui64, v5, 1953985605i64);
  v21 = (unsigned int *)v20;
  if( v20 )
  {
    memmove(v20, v8, v19);
    ExFreePoolWithTag(v8, 0);
    v8 = (VOID **)v21;
    v9 = (__int64)&v21[17 * *v21 + 1];
    v16 = (__int64)&v21[17 * v3 + 1];
    goto LABEL_20;
  }
  ObfDereferenceObjectWithTag(NextProcess, 0x6E457350ui64);
LABEL_31:
  ExFreePoolWithTag(v8, 0);
}

Referenced by:

EtwpLogMemInfoRundown
EtwpPerfMemInfoWork