EtwpSavePersistedLoggersWorker

VOID __stdcall EtwpSavePersistedLoggersWorker(PVOID Context){
  char *PoolWithTag; 
  __int64 v2; 
  _QWORD *v3; 
  int v4; 
  __int64 i; 
  int v6; 
  WCHAR v7; 
  int v8; 
  v8 = 0;
  PoolWithTag = (char *)ExAllocatePoolWithTag(
                          PagedPool,
                          8i64 * *(unsigned int *)(EtwpHostSiloState + 16) + 4112,
                          0x4B777445ui64);
  v3 = PoolWithTag;
  if( !PoolWithTag )
    goto LABEL_9;
  *(_DWORD *)PoolWithTag = 0;
  *((_QWORD *)PoolWithTag + 1) = PoolWithTag + 4112;
  v4 = KsrEnumeratePersistedMemory(EtwpKsrGuid, EtwpKsrMemoryEnumCallback, PoolWithTag);
  if( v4 >= 0 )
  {
    for( i = 0i64; (unsigned int)i < *(_DWORD *)v3; i = (unsigned int)(i + 1) )
    {
      v6 = KsrQueryMetadata(EtwpKsrGuid, *(_QWORD *)(v3[1] + 8 * i), v3 + 2, 4096i64, &v8);
      if( v6 >= 0 )
        EtwpSavePersistedLogger((INT64)(v3 + 2), *(_QWORD *)(v3[1] + 8 * i), v7);
      else
        v4 = v6;
    }
  }
  ExFreePoolWithTag(v3, 0);
  if( v4 < 0 )
  {
LABEL_9:
    LOBYTE(v2) = 1;
    KsrFreePersistedMemory(EtwpKsrGuid, v2);
  }
  _InterlockedExchange(&EtwpLoggerSaveState, 2);
}

Referenced by:

EtwpSavePersistedLoggers