PopFxLogSocSubsystemMetadata

NTSTATUS __stdcall PopFxLogSocSubsystemMetadata(UINT8 ScenarioInstanceId, UINT64 PlatformIdleStateIndex, UINT64 Flags){
  int v3; 
  NTSTATUS v4; 
  _LIST_ENTRY *v5; 
  _LIST_ENTRY *v6; 
  unsigned int v7; 
  __int64 v8; 
  __int64 v9; 
  size_t v10; 
  VOID **PoolWithTag; 
  VOID **v12; 
  unsigned int v13; 
  unsigned int i; 
  __int64 v15; 
  __int64 v16; 
  UINT64 v17; 
  VOID **v18; 
  VOID **v19; 
  POP_FX_PLUGIN *v20; 
  __int64 v21; 
  VOID *v22; 
  unsigned int j; 
  VOID **v24; 
  VOID **v25; 
  _EVENT_DATA_DESCRIPTOR *UserData; 
  unsigned int v27; 
  unsigned int v28; 
  __int64 v29; 
  __int64 v30; 
  unsigned __int16 *v31; 
  __int64 v32; 
  unsigned int v33; 
  __int64 v34; 
  unsigned int v35; 
  __int64 v36; 
  __int64 v37; 
  unsigned int v38; 
  __int64 v39; 
  bool v40; 
  REGHANDLE v41; 
  UINT64 v43; 
  unsigned int v44; 
  int v45; 
  int v46; 
  int v47; 
  ULONG UserDataCount; 

  v47 = Flags;
  v46 = PlatformIdleStateIndex;
  v45 = v3;
  v44 = 0;
  v4 = 0;
  v43 = PopWnfCsEnterScenarioId;
  LOBYTE(v47) = 0;
  v5 = PopFxLookupSocSubsystemsByPlatformIdleState(PlatformIdleStateIndex);
  v6 = v5;
  if( v5 )
  {
    v7 = 0;
    if( !HIDWORD(v5[1].Flink) )
      return v4;
    while( 1 )
    {
      v8 = 344i64 * v7;
      v9 = *(unsigned int *)((char *)&v6[6].Blink + v8);
      v44 = v9;
      if( !(_DWORD)v9 )
        goto LABEL_28;
      v10 = 296 * v9;
      PoolWithTag = ExAllocatePoolWithTag(1ui64, 296 * v9, 1297630800i64);
      v12 = PoolWithTag;
      if( !PoolWithTag )
        return -1073741670;
      memset(PoolWithTag, 0i64, v10);
      v13 = v44;
      for( i = 0; i < v44; v13 = v44 )
      {
        v15 = i++;
        v16 = 37 * v15;
        v12[v16 + 1] = &v12[37 * v15 + 4];
        WORD1(v12[v16]) = 128;
        v12[v16 + 3] = (char *)&v12[37 * v15 + 20] + 4;
        WORD1(v12[v16 + 2]) = 128;
        LODWORD(v12[v16 + 20]) = -1430541637;
        HIDWORD(v12[v16 + 36]) = -1430541637;
      }
      v17 = (int)(8 * v13 + 32);
      v18 = ExAllocatePoolWithTag(1ui64, v17, 1297630800i64);
      v19 = v18;
      if( !v18 )
        break;
      memset(v18, 0i64, v17);
      v21 = 0i64;
      *(_DWORD *)v19 = v46;
      v22 = *(_LIST_ENTRY **)((char *)&v6[4].Flink + v8);
      *((_DWORD *)v19 + 6) = 0;
      v19[1] = v22;
      v19[2] = (char *)&v6[2].Blink + v8;
      for( *((_DWORD *)v19 + 7) = v44; (unsigned int)v21 < v44; v21 = (unsigned int)(v21 + 1) )
      {
        v20 = (POP_FX_PLUGIN *)(unsigned int)v21;
        v19[v21 + 4] = &v12[37 * (unsigned int)v21];
      }
      if( (unsigned __int8)PopPluginQuerySocSubsystemMetadata(
                              v20,
                              *(unsigned int *)((char *)&v6[3].Blink + v8 + 4),
                              (PEP_QUERY_SOC_SUBSYSTEM_METADATA *)v19) )
      {
        for( j = 0; j < v44; ++j )
        {
          v24 = &v12[37 * j];
          if( *((_DWORD *)v24 + 40) != -1430541637 )
            PopFxBugCheck(0x706u, 0x28u, 0x4B657920u, *((unsigned __int16 *)v24 + 1));
          if( *((_DWORD *)v24 + 73) != -1430541637 )
            PopFxBugCheck(0x706u, 0x28u, 0x56616C75u, *((unsigned __int16 *)v24 + 9));
        }
        UserDataCount = v44 + 4 * v44 + 3;
        v25 = ExAllocatePoolWithTag(1ui64, 16i64 * UserDataCount, 1297630800i64);
        UserData = (_EVENT_DATA_DESCRIPTOR *)v25;
        if( !v25 )
          break;
        v27 = 2;
        LOBYTE(v47) = v43;
        v28 = 0;
        v25[1] = (VOID *)1;
        *v25 = &v47;
        v25[2] = &v44;
        for( v25[3] = (VOID *)4; v28 < v44; *(_QWORD *)&UserData[v37].Size = v38 )
        {
          v29 = v27;
          UserData[v29].Ptr = (unsigned __int64)&v6[4].Blink + v8;
          *(_QWORD *)&UserData[v29].Size = 16i64;
          v30 = v28++;
          v31 = (unsigned __int16 *)&v12[37 * v30];
          *((_DWORD *)v31 + 40) = *v31 >> 1;
          v32 = v27 + 1;
          v33 = v27 + 2;
          v32 *= 2i64;
          v34 = v33;
          *(&UserData->Ptr + v32) = (unsigned __int64)(v31 + 80);
          *((_QWORD *)&UserData->Size + v32) = 4i64;
          v35 = *v31;
          UserData[v34].Ptr = *((_QWORD *)v31 + 1);
          UserData[v34].Size = v35;
          UserData[v34].Reserved = 0;
          *((_DWORD *)v31 + 73) = v31[8] >> 1;
          v36 = v33 + 1;
          v33 += 2;
          v36 *= 2i64;
          v37 = v33;
          v27 = v33 + 1;
          *(&UserData->Ptr + v36) = (unsigned __int64)(v31 + 146);
          *((_QWORD *)&UserData->Size + v36) = 4i64;
          v38 = v31[8];
          UserData[v37].Ptr = *((_QWORD *)v31 + 3);
        }
        v39 = v27;
        v40 = PopDiagSleepStudyHandleRegistered == 0;
        UserData[v39].Ptr = (unsigned __int64)&v43;
        *(_QWORD *)&UserData[v39].Size = 8i64;
        if( !v40 )
        {
          v41 = PopDiagSleepStudyHandle;
          if( EtwEventEnabled(PopDiagSleepStudyHandle, &SLEEPSTUDY_EVT_SCENARIO_BLOCKER_DATA) )
            EtwWrite(v41, &SLEEPSTUDY_EVT_SCENARIO_BLOCKER_DATA, 0, UserDataCount, UserData);
        }
        ExFreePoolWithTag(UserData, 0x4D584650u);
      }
      else
      {
        v4 = -1073741595;
      }
LABEL_25:
      ExFreePoolWithTag(v12, 0x4D584650u);
      if( v19 )
        ExFreePoolWithTag(v19, 0x4D584650u);
      if( v4 < 0 )
        return v4;
LABEL_28:
      if( ++v7 >= HIDWORD(v6[1].Flink) )
        return v4;
    }
    v4 = -1073741670;
    goto LABEL_25;
  }
  return -1073741584;
}

Referenced by:

PopCaptureSleepStudyStatistics