internal static unsafe NodeDeactivationResult CreateFromNative(
            NativeTypes.FABRIC_NODE_DEACTIVATION_QUERY_RESULT_ITEM nativeResult)
        {
            IList <NodeDeactivationTask> tasks = new List <NodeDeactivationTask>();
            IList <SafetyCheck>          pendingSafetyChecks = new List <SafetyCheck>();

            var nativeTasks     = (NativeTypes.FABRIC_NODE_DEACTIVATION_TASK_LIST *)nativeResult.Tasks;
            var nativeItemArray = (NativeTypes.FABRIC_NODE_DEACTIVATION_TASK *)nativeTasks->Items;

            for (int i = 0; i < nativeTasks->Count; ++i)
            {
                var nativeItem = *(nativeItemArray + i);
                tasks.Add(NodeDeactivationTask.CreateFromNative(nativeItem));
            }

            if (nativeResult.Reserved != IntPtr.Zero)
            {
                var ex1 = (NativeTypes.FABRIC_NODE_DEACTIVATION_QUERY_RESULT_ITEM_EX1 *)nativeResult.Reserved;
                pendingSafetyChecks = SafetyCheck.FromNativeList(
                    (NativeTypes.FABRIC_SAFETY_CHECK_LIST *)ex1->PendingSafetyChecks);
            }

            var nodeDeactivationResult = new NodeDeactivationResult(
                (NodeDeactivationIntent)nativeResult.EffectiveIntent,
                (NodeDeactivationStatus)nativeResult.Status,
                tasks,
                pendingSafetyChecks);

            return(nodeDeactivationResult);
        }
        internal static unsafe NodeDeactivationTask CreateFromNative(
            NativeTypes.FABRIC_NODE_DEACTIVATION_TASK nativeResult)
        {
            var task = new NodeDeactivationTask(
                NodeDeactivationTaskId.CreateFromNative(*(NativeTypes.FABRIC_NODE_DEACTIVATION_TASK_ID *)nativeResult.TaskId),
                (NodeDeactivationIntent)nativeResult.Intent);

            return(task);
        }