internal static unsafe ProcessDebugParameters CreateFromNative(IntPtr nativePtr)
        {
            ReleaseAssert.AssertIfNot(nativePtr != IntPtr.Zero, "ProcessDebugParameters.CreateFromNative() has null pointer.");

            var nativeParameters = *((NativeTypes.FABRIC_PROCESS_DEBUG_PARAMETERS *)nativePtr);

            var debugParams = new ProcessDebugParameters
            {
                ExePath                   = NativeTypes.FromNativeString(nativeParameters.ExePath),
                Arguments                 = NativeTypes.FromNativeString(nativeParameters.Arguments),
                LockFile                  = NativeTypes.FromNativeString(nativeParameters.LockFile),
                WorkingFolder             = NativeTypes.FromNativeString(nativeParameters.WorkingFolder),
                DebugParametersFile       = NativeTypes.FromNativeString(nativeParameters.DebugParametersFile),
                EnvVars                   = NativeTypes.FromNativeStringPairList(nativeParameters.EnvVars),
                ContainerEntryPoints      = NativeTypes.FromNativeStringList(nativeParameters.ContainerEntryPoints),
                ContainerMountedVolumes   = NativeTypes.FromNativeStringList(nativeParameters.ContainerMountedVolumes),
                ContainerEnvironmentBlock = NativeTypes.FromNativeStringList(nativeParameters.ContainerEnvironmentBlock)
            };

            if (nativeParameters.Reserved != null)
            {
                var nativeParametersx1 = *((NativeTypes.FABRIC_PROCESS_DEBUG_PARAMETERS_EX1 *)nativeParameters.Reserved);

                debugParams.ContainerLabels = NativeTypes.FromNativeStringList(nativeParametersx1.ContainerLabels);
            }

            return(debugParams);
        }
        internal static unsafe ProcessDescription CreateFromNative(IntPtr nativePtr)
        {
            ReleaseAssert.AssertIfNot(nativePtr != IntPtr.Zero, "ProcessDescription.CreateFromNative() has null pointer.");

            var nativeDescription = *((NativeTypes.FABRIC_PROCESS_DESCRIPTION *)nativePtr);

            IDictionary <string, string> encryptedEnvironmentVariables = new Dictionary <string, string>();

            if (nativeDescription.Reserved != IntPtr.Zero)
            {
                var ex1 = (NativeTypes.FABRIC_PROCESS_DESCRIPTION_EX1 *)nativeDescription.Reserved;
                encryptedEnvironmentVariables = NativeTypes.FromNativeStringPairList(ex1->EncryptedEnvironmentVariables);
            }

            return(new ProcessDescription
            {
                ExePath = NativeTypes.FromNativeString(nativeDescription.ExePath),
                Arguments = NativeTypes.FromNativeString(nativeDescription.Arguments),
                StartInDirectory = NativeTypes.FromNativeString(nativeDescription.StartInDirectory),
                EnvVars = NativeTypes.FromNativeStringPairList(nativeDescription.EnvVars),
                AppDirectory = NativeTypes.FromNativeString(nativeDescription.AppDirectory),
                TempDirectory = NativeTypes.FromNativeString(nativeDescription.TempDirectory),
                WorkDirectory = NativeTypes.FromNativeString(nativeDescription.WorkDirectory),
                LogDirectory = NativeTypes.FromNativeString(nativeDescription.LogDirectory),
                RedirectConsole = NativeTypes.FromBOOLEAN(nativeDescription.RedirectConsole),
                RedirectedConsoleFileNamePrefix = NativeTypes.FromNativeString(nativeDescription.RedirectedConsoleFileNamePrefix),
                ConsoleRedirectionFileRetentionCount = nativeDescription.ConsoleRedirectionFileRetentionCount,
                ConsoleRedirectionFileMaxSizeInKb = nativeDescription.ConsoleRedirectionFileMaxSizeInKb,
                ShowNoWindow = NativeTypes.FromBOOLEAN(nativeDescription.ShowNoWindow),
                AllowChildProcessDetach = NativeTypes.FromBOOLEAN(nativeDescription.AllowChildProcessDetach),
                NotAttachedToJob = NativeTypes.FromBOOLEAN(nativeDescription.NotAttachedToJob),
                DebugParameters = ProcessDebugParameters.CreateFromNative(nativeDescription.DebugParameters),
                ResourceGovernancePolicy = ResourceGovernancePolicyDescription.CreateFromNative(nativeDescription.ResourceGovernancePolicy),
                ServicePackageResourceGovernance = ServicePackageResourceGovernanceDescription.CreateFromNative(nativeDescription.ServicePackageResourceGovernance),
                CgroupName = NativeTypes.FromNativeString(nativeDescription.CgroupName),
                IsHostedServiceProcess = NativeTypes.FromBOOLEAN(nativeDescription.IsHostedServiceProcess),
                EncryptedEnvironmentVariables = encryptedEnvironmentVariables
            });
        }