PopIdleWakeGenerateDescriptionString

VOID __stdcall PopIdleWakeGenerateDescriptionString(INT64 *a1, INT64 a2){
  __int64 v2; 
  _UNICODE_STRING *v3; 
  wchar_t *v6; 
  __int64 v7; 
  wchar_t *v8; 
  unsigned __int16 v9; 
  __int64 v10; 
  VOID **v11; 
  UINT64 v12; 
  UINT64 v13; 
  VOID **PoolWithTag; 
  __int128 v15; 
  unsigned int *v16; 
  INT64 v17; 
  __int64 v18; 
  unsigned int v19; 
  unsigned __int16 *v20; 
  UINT64 v21; 
  VOID **v22; 
  UINT64 *v23; 
  UINT64 v24; 
  const wchar_t *v25; 
  __int64 v26; 
  __int16 v27; 
  signed __int64 v28; 
  unsigned int i; 
  unsigned __int64 MaximumLength; 
  unsigned __int64 Length; 
  wchar_t *Buffer; 
  const wchar_t *v33; 
  unsigned __int64 v34; 
  unsigned __int64 v35; 
  __int64 v36; 
  __int16 v37; 
  unsigned __int64 v38; 
  char *v39; 
  _UNICODE_STRING *v40; 
  WCHAR **v41; 
  UINT64 pcbLength; 
  UINT64 v43; 
  UINT64 pcchDest; 
  WCHAR *ppszDest; 
  __int128 v46; 
  INT64 v47; 
  INT64 v48; 

  v2 = *(int *)a1;
  v3 = (_UNICODE_STRING *)(a2 + 392);
  pcbLength = 0i64;
  v43 = 0i64;
  if( (unsigned int)v2 > 4 )
  {
    if( (_DWORD)v2 == 6 )
    {
      v10 = *((unsigned __int8 *)a1 + 8);
      if( (unsigned __int8)v10 < 0x10u )
      {
        if( RtlStringCbLengthW(PopIrTimerDescriptions[v10], 0xFFFFui64, &pcbLength) < 0 )
          return;
        if( *((_BYTE *)a1 + 8) == 3 )
        {
          if( RtlStringCbLengthW((WCHAR *)a1 + 5, 0x80ui64, &v43) < 0 )
            return;
          v13 = pcbLength + v43 + 42;
        }
        else
        {
          v13 = pcbLength + 48;
        }
        if( v13 <= v12 )
        {
          PoolWithTag = ExAllocatePoolWithTag(1ui64, v13, 1734960208i64);
          v3->Buffer = (wchar_t *)PoolWithTag;
          if( PoolWithTag )
          {
            *(_BYTE *)(a2 + 384) = 1;
            v3->Length = 0;
            v3->MaximumLength = v13;
            if( *((_BYTE *)a1 + 8) == 3 )
              RtlUnicodeStringPrintf(v3, (WCHAR *)L"Timer(Name:Index): %s:%s");
            else
              RtlUnicodeStringPrintf(v3, (WCHAR *)L"Timer(Name:Index): %s:%d");
          }
        }
      }
      else
      {
        v11 = ExAllocatePoolWithTag(1ui64, 0x40ui64, 1734960208i64);
        v3->Buffer = (wchar_t *)v11;
        if( v11 )
        {
          *(_BYTE *)(a2 + 384) = 1;
          *(_DWORD *)&v3->Length = 0x400000;
          RtlUnicodeStringPrintf(v3, (WCHAR *)L"Timer(Component:Index): %d:%d");
        }
      }
    }
    else if( (_DWORD)v2 == 5 )
    {
      v15 = *(_OWORD *)(a1 + 1);
      v16 = (unsigned int *)(a2 + 408);
      v17 = a1[3];
      v48 = a2 + 408;
      v46 = v15;
      v47 = v17;
      if( (int)MmEnumerateSystemImages(
                  (__int64(__fastcall *)(INT64 *, __int64))PopIdleWakeSystemImageCallback,
                  (__int64)&v46) >= 0 )
      {
        v18 = 0i64;
        v19 = 0;
        if( *v16 )
        {
          v20 = (unsigned __int16 *)(v16 + 2);
          do
          {
            if( v19 )
              v18 += 4i64;
            ++v19;
            v18 += *v20;
            v20 += 8;
          }
          while( v19 < *v16 );
        }
        v21 = v18 + 24;
        if( v21 <= 0xFFFF )
        {
          v22 = ExAllocatePoolWithTag(1ui64, v21, 1734960208i64);
          v3->Buffer = (wchar_t *)v22;
          if( v22 )
          {
            *(_BYTE *)(a2 + 384) = 1;
            v3->Length = 0;
            v3->MaximumLength = v21;
            ppszDest = 0i64;
            pcchDest = 0i64;
            if( RtlUnicodeStringValidateDestWorker(v3, &ppszDest, &pcchDest, v23, v40, v41, (UINT64 *)pcbLength, v43) >= 0 )
            {
              v24 = pcchDest;
              v25 = L"Interrupt: ";
              v26 = 0x7FFFi64;
              v27 = 0;
              if( pcchDest )
              {
                v28 = (char *)ppszDest - (char *)L"Interrupt: ";
                do
                {
                  if( !v26 )
                    break;
                  if( !*v25 )
                    break;
                  *(const wchar_t *)((char *)v25 + v28) = *v25;
                  --v26;
                  ++v25;
                  ++v27;
                  --v24;
                }
                while( v24 );
              }
              v3->Length = 2 * v27;
            }
            for( i = 0; i < *v16; ++i )
            {
              if( i )
              {
                MaximumLength = v3->MaximumLength;
                Length = v3->Length;
                if( (((unsigned __int16)Length | (unsigned __int16)MaximumLength) & 1) == 0
                  && (unsigned __int16)Length <= (unsigned __int16)MaximumLength
                  && (_WORD)MaximumLength != 0xFFFF )
                {
                  Buffer = v3->Buffer;
                  if( Buffer || !__PAIR32__(MaximumLength, Length) )
                  {
                    v33 = L", ";
                    v34 = MaximumLength >> 1;
                    v35 = Length >> 1;
                    v36 = 0x7FFFi64;
                    v37 = 0;
                    v38 = v34 - v35;
                    if( v38 )
                    {
                      v39 = (char *)Buffer + 2 * v35 - (_QWORD)L", ";
                      do
                      {
                        if( !v36 )
                          break;
                        if( !*v33 )
                          break;
                        *(const wchar_t *)((char *)v33 + (_QWORD)v39) = *v33;
                        --v36;
                        ++v33;
                        ++v37;
                      }
                      while( v36 + v38 - 0x7FFF );
                    }
                    v3->Length = 2 * (v37 + v35);
                  }
                }
              }
              RtlUnicodeStringCat(v3, (const _UNICODE_STRING *)&v16[4 * i + 2]);
            }
          }
        }
      }
    }
  }
  else
  {
    _mm_lfence();
    v6 = PopDiagStaticWakeSourceDescriptions[v2];
    *v3 = 0i64;
    if( v6 )
    {
      v7 = 0x7FFFi64;
      v8 = v6;
      do
      {
        if( !*v8 )
          break;
        ++v8;
        --v7;
      }
      while( v7 );
      if( v7 )
      {
        if( v3 )
        {
          v9 = 2 * (v7 != 0 ? 0x7FFF - v7 : 0);
          v3->Buffer = v6;
          v3->Length = v9;
          v3->MaximumLength = v9 + 2;
        }
      }
    }
  }
}

Referenced by:

PopIdleWakeSourceAccountingToDiagnostic