PopFxLogSocSubsystemMetadata

INT64 __stdcall PopFxLogSocSubsystemMetadata(UINT8 ScenarioInstanceId, UINT64 PlatformIdleStateIndex, UINT64 Flags){
  int v3; 
  unsigned int v4; 
  INT64 v5; 
  INT64 v6; 
  unsigned int v7; 
  __int64 v8; 
  __int64 v9; 
  char *PoolWithTag; 
  char *v11; 
  unsigned int v12; 
  unsigned int i; 
  __int64 v14; 
  __int64 v15; 
  _DWORD *v16; 
  _DWORD *v17; 
  INT64 v18; 
  __int64 v19; 
  __int64 v20; 
  unsigned int j; 
  char *v22; 
  EVENT_DATA_DESCRIPTOR *v23; 
  char *v24; 
  EVENT_DATA_DESCRIPTOR *UserData; 
  unsigned int v26; 
  unsigned int v27; 
  __int64 v28; 
  __int64 v29; 
  __int64 v30; 
  unsigned int v31; 
  __int64 v32; 
  unsigned int v33; 
  __int64 v34; 
  __int64 v35; 
  unsigned int v36; 
  __int64 v37; 
  bool v38; 
  UINT64 v39; 
  UINT64 v41; 
  unsigned int v42; 
  int v43; 
  int v44; 
  int v45; 
  ULONG UserDataCount; 
  v45 = Flags;
  v44 = PlatformIdleStateIndex;
  v43 = v3;
  v42 = 0;
  v4 = 0;
  v41 = PopWnfCsEnterScenarioId;
  LOBYTE(v45) = 0;
  v5 = PopFxLookupSocSubsystemsByPlatformIdleState((unsigned int)PlatformIdleStateIndex);
  v6 = v5;
  if( v5 )
  {
    v7 = 0;
    if( !*(_DWORD *)(v5 + 20) )
      return v4;
    while( 1 )
    {
      v8 = 344i64 * v7;
      v9 = *(unsigned int *)(v8 + v6 + 104);
      v42 = v9;
      if( !(_DWORD)v9 )
        goto LABEL_28;
      PoolWithTag = (char *)ExAllocatePoolWithTag(PagedPool, 296 * v9, 0x4D584650ui64);
      v11 = PoolWithTag;
      if( !PoolWithTag )
        return(unsigned int)-1073741670;
      memset((INT64)PoolWithTag, 0i64);
      v12 = v42;
      for( i = 0; i < v42; v12 = v42 )
      {
        v14 = i++;
        v15 = 296 * v14;
        *(_QWORD *)&v11[v15 + 8] = &v11[296 * v14 + 32];
        *(_WORD *)&v11[v15 + 2] = 128;
        *(_QWORD *)&v11[v15 + 24] = &v11[296 * v14 + 164];
        *(_WORD *)&v11[v15 + 18] = 128;
        *(_DWORD *)&v11[v15 + 160] = -1430541637;
        *(_DWORD *)&v11[v15 + 292] = -1430541637;
      }
      v16 = ExAllocatePoolWithTag(PagedPool, (int)(8 * v12 + 32), 0x4D584650ui64);
      v17 = v16;
      if( !v16 )
        break;
      memset((INT64)v16, 0i64);
      v19 = 0i64;
      *v17 = v44;
      v20 = *(_QWORD *)(v8 + v6 + 64);
      v17[6] = 0;
      *((_QWORD *)v17 + 1) = v20;
      *((_QWORD *)v17 + 2) = v8 + v6 + 40;
      for( v17[7] = v42; (unsigned int)v19 < v42; v19 = (unsigned int)(v19 + 1) )
      {
        v18 = (unsigned int)v19;
        *(_QWORD *)&v17[2 * v19 + 8] = &v11[296 * (unsigned int)v19];
      }
      if( (unsigned __int8)PopPluginQuerySocSubsystemMetadata(v18, *(unsigned int *)(v8 + v6 + 60), (INT64)v17) )
      {
        for( j = 0; j < v42; ++j )
        {
          v22 = &v11[296 * j];
          if( *((_DWORD *)v22 + 40) != -1430541637 )
            PopFxBugCheck(0x706ui64, 0x28ui64, 0x4B657920ui64, *((unsigned __int16 *)v22 + 1));
          if( *((_DWORD *)v22 + 73) != -1430541637 )
            PopFxBugCheck(0x706ui64, 0x28ui64, 0x56616C75ui64, *((unsigned __int16 *)v22 + 9));
        }
        UserDataCount = v42 + 4 * v42 + 3;
        v23 = (EVENT_DATA_DESCRIPTOR *)ExAllocatePoolWithTag(PagedPool, 16i64 * UserDataCount, 0x4D584650ui64);
        UserData = v23;
        if( !v23 )
          break;
        v26 = 2;
        LOBYTE(v45) = v41;
        v27 = 0;
        *(_QWORD *)&v23->Size = 1i64;
        v23->Ptr = (unsigned __int64)&v45;
        v23[1].Ptr = (unsigned __int64)&v42;
        for( *(_QWORD *)&v23[1].Size = 4i64; v27 < v42; *(_QWORD *)&UserData[v35].Size = v36 )
        {
          v28 = v26;
          UserData[v28].Ptr = v8 + v6 + 72;
          *(_QWORD *)&UserData[v28].Size = 16i64;
          v29 = v27++;
          v24 = &v11[296 * v29];
          *((_DWORD *)v24 + 40) = *(unsigned __int16 *)v24 >> 1;
          v30 = v26 + 1;
          v31 = v26 + 2;
          v30 *= 2i64;
          v32 = v31;
          *(&UserData->Ptr + v30) = (unsigned __int64)(v24 + 160);
          *((_QWORD *)&UserData->Size + v30) = 4i64;
          v33 = *(unsigned __int16 *)v24;
          UserData[v32].Ptr = *((_QWORD *)v24 + 1);
          UserData[v32].Size = v33;
          UserData[v32].Reserved = 0;
          *((_DWORD *)v24 + 73) = *((unsigned __int16 *)v24 + 8) >> 1;
          v34 = v31 + 1;
          v31 += 2;
          v34 *= 2i64;
          v35 = v31;
          v26 = v31 + 1;
          *(&UserData->Ptr + v34) = (unsigned __int64)(v24 + 292);
          *((_QWORD *)&UserData->Size + v34) = 4i64;
          v36 = *((unsigned __int16 *)v24 + 8);
          UserData[v35].Ptr = *((_QWORD *)v24 + 3);
        }
        v37 = v26;
        v38 = PopDiagSleepStudyHandleRegistered == 0;
        UserData[v37].Ptr = (unsigned __int64)&v41;
        *(_QWORD *)&UserData[v37].Size = 8i64;
        if( !v38 )
        {
          v39 = PopDiagSleepStudyHandle;
          if( EtwEventEnabled(
                 PopDiagSleepStudyHandle,
                 (EVENT_DESCRIPTOR *)&SLEEPSTUDY_EVT_SCENARIO_BLOCKER_DATA,
                 (EVENT_DESCRIPTOR *)v24) )
          {
            EtwWrite(v39, (EVENT_DESCRIPTOR *)&SLEEPSTUDY_EVT_SCENARIO_BLOCKER_DATA, 0i64, UserDataCount, UserData);
          }
        }
        ExFreePoolWithTag(UserData, 0x4D584650u);
      }
      else
      {
        v4 = -1073741595;
      }
LABEL_25:
      ExFreePoolWithTag(v11, 0x4D584650u);
      if( v17 )
        ExFreePoolWithTag(v17, 0x4D584650u);
      if( (v4 & 0x80000000) != 0 )
        return v4;
LABEL_28:
      if( ++v7 >= *(_DWORD *)(v6 + 20) )
        return v4;
    }
    v4 = -1073741670;
    goto LABEL_25;
  }
  return(unsigned int)-1073741584;
}

Referenced by:

PopCaptureSleepStudyStatistics