@@ -631,11 +631,10 @@ HRESULT object_visualizer::CreateEvaluationResult(_Deref_out_ DkmEvaluationResul
631631}
632632
633633HRESULT object_visualizer::GetChildren (
634- _In_ UINT32 /* InitialRequestSize*/ ,
634+ _In_ UINT32 InitialRequestSize,
635635 _In_ DkmInspectionContext* pInspectionContext,
636636 _Out_ DkmArray<DkmChildVisualizedExpression*>* pInitialChildren,
637- _Deref_out_ DkmEvaluationResultEnumContext** ppEnumContext
638- )
637+ _Deref_out_ DkmEvaluationResultEnumContext** ppEnumContext)
639638{
640639 // Ignore metadata errors to ensure that Raw Data is always available
641640 if (m_propertyData.empty ())
@@ -667,32 +666,34 @@ HRESULT object_visualizer::GetChildren(
667666 this ,
668667 pEnumContext.put ()));
669668
670- DkmAllocArray (0 , pInitialChildren);
669+ IF_FAIL_RET (GetItems (m_pVisualizedExpression.get (), pEnumContext.get (), 0 , InitialRequestSize, pInitialChildren));
670+
671671 *ppEnumContext = pEnumContext.detach ();
672672
673673 return S_OK;
674674}
675675
676676HRESULT object_visualizer::GetItems (
677- _In_ DkmVisualizedExpression* /* pVisualizedExpression*/ ,
677+ _In_ DkmVisualizedExpression* pVisualizedExpression,
678678 _In_ DkmEvaluationResultEnumContext* /* pEnumContext*/ ,
679679 _In_ UINT32 StartIndex,
680680 _In_ UINT32 Count,
681- _Out_ DkmArray<DkmChildVisualizedExpression*>* pItems
682- )
681+ _Out_ DkmArray<DkmChildVisualizedExpression*>* pItems)
683682{
684- std::list<com_ptr<DkmChildVisualizedExpression>> childItems;
683+ CAutoDkmArray<DkmChildVisualizedExpression*> resultValues;
684+ IF_FAIL_RET (DkmAllocArray (std::min (m_propertyData.size (), size_t (Count)), &resultValues));
685685
686- auto pParent = m_pVisualizedExpression.get ();
687- for ( auto childIndex = StartIndex; childIndex < StartIndex + Count; ++childIndex)
686+ auto pParent = pVisualizedExpression;
687+ auto childCount = std::min (m_propertyData.size () - StartIndex, (size_t )Count);
688+ for (auto i = 0 ; i < childCount; ++i)
688689 {
689- auto & prop = m_propertyData[childIndex ];
690+ auto & prop = m_propertyData[i + ( size_t )StartIndex ];
690691 com_ptr<DkmChildVisualizedExpression> pPropertyVisualized;
691- if (FAILED (CreateChildVisualizedExpression (prop, pParent, m_isAbiObject, pPropertyVisualized.put ())))
692+ if (FAILED (CreateChildVisualizedExpression (prop, pParent, m_isAbiObject, pPropertyVisualized.put ())))
692693 {
693694 com_ptr<DkmString> pErrorMessage;
694695 IF_FAIL_RET (DkmString::Create (L" <Property evaluation failed>" , pErrorMessage.put ()));
695-
696+
696697 com_ptr<DkmString> pDisplayName;
697698 IF_FAIL_RET (DkmString::Create (prop.displayName .c_str (), pDisplayName.put ()));
698699
@@ -701,9 +702,9 @@ HRESULT object_visualizer::GetItems(
701702 pParent->InspectionContext (),
702703 pParent->StackFrame (),
703704 pDisplayName.get (),
704- nullptr ,
705+ nullptr ,
705706 pErrorMessage.get (),
706- DkmEvaluationResultFlags::ExceptionThrown,
707+ DkmEvaluationResultFlags::ExceptionThrown,
707708 DkmDataItem::Null (),
708709 pVisualizedResult.put ()
709710 ));
@@ -721,22 +722,9 @@ HRESULT object_visualizer::GetItems(
721722 pPropertyVisualized.put ()
722723 ));
723724 }
724- childItems.push_back (pPropertyVisualized);
725- }
726-
727- CAutoDkmArray<DkmChildVisualizedExpression*> resultValues;
728- IF_FAIL_RET (DkmAllocArray (childItems.size (), &resultValues));
729-
730- UINT32 j = 0 ;
731- auto pos = childItems.begin ();
732- while (pos != childItems.end ())
733- {
734- com_ptr<DkmChildVisualizedExpression> pCurr = *pos;
735- resultValues.Members [j++] = pCurr.detach ();
736- pos++;
725+ resultValues.Members [i] = pPropertyVisualized.detach ();
737726 }
738727
739728 *pItems = resultValues.Detach ();
740-
741729 return S_OK;
742730}
0 commit comments