internal static unsafe SecurityCredentials CreateFromNative(NativeTypes.FABRIC_SECURITY_CREDENTIALS *nativeCredentials)
        {
            SecurityCredentials managedCredentials = null;

            switch (nativeCredentials->Kind)
            {
            case NativeTypes.FABRIC_SECURITY_CREDENTIAL_KIND.FABRIC_SECURITY_CREDENTIAL_KIND_CLAIMS:
                managedCredentials = ClaimsCredentials.CreateFromNative((NativeTypes.FABRIC_CLAIMS_CREDENTIALS *)nativeCredentials->Value);
                break;

            case NativeTypes.FABRIC_SECURITY_CREDENTIAL_KIND.FABRIC_SECURITY_CREDENTIAL_KIND_WINDOWS:
                managedCredentials = WindowsCredentials.CreateFromNative((NativeTypes.FABRIC_WINDOWS_CREDENTIALS *)nativeCredentials->Value);
                break;

            case NativeTypes.FABRIC_SECURITY_CREDENTIAL_KIND.FABRIC_SECURITY_CREDENTIAL_KIND_X509:
                managedCredentials = X509Credentials.CreateFromNative((NativeTypes.FABRIC_X509_CREDENTIALS *)nativeCredentials->Value);
                break;

            case NativeTypes.FABRIC_SECURITY_CREDENTIAL_KIND.FABRIC_SECURITY_CREDENTIAL_KIND_NONE:
                managedCredentials = NoneSecurityCredentials.CreateFromNative();
                break;

            default:
                AppTrace.TraceSource.WriteError("SecurityCredentials.FromNative", "Unknown credential type: {0}", nativeCredentials->Kind);
                ReleaseAssert.Failfast("Unknown credential type: {0}", nativeCredentials->Kind);
                break;
            }

            return(managedCredentials);
        }
        internal static unsafe SecurityCredentials CreateFromNative(NativeRuntime.IFabricSecurityCredentialsResult securityCredentialsResult)
        {
            ReleaseAssert.AssertIfNot(securityCredentialsResult != null, string.Format(CultureInfo.CurrentCulture, StringResources.Error_NativeDataNull_Formatted, "SecurityCredentials"));
            ReleaseAssert.AssertIfNot(securityCredentialsResult.get_SecurityCredentials() != IntPtr.Zero, string.Format(CultureInfo.CurrentCulture, StringResources.Error_NativeDataNull_Formatted, "SecurityCredentialsResult.get_SecurityCredentials()"));

            NativeTypes.FABRIC_SECURITY_CREDENTIALS *nativeCredentials = (NativeTypes.FABRIC_SECURITY_CREDENTIALS *)securityCredentialsResult.get_SecurityCredentials();
            SecurityCredentials managedCredentials = CreateFromNative(nativeCredentials);

            GC.KeepAlive(securityCredentialsResult);
            return(managedCredentials);
        }