/// <summary>
        /// Initializes a new <see cref="CertificateChain"/> instance from a <see cref="Certificate"/>.
        /// </summary>
        /// <param name="cert">The certificate for which a chain is being built.</param>
        /// <param name="additional">Any additional store to be searched for supporting certificates and CTLs.</param>
        /// <param name="options">Additional certificate chain options.</param>
        /// <remarks><paramref name="cert"/> will always be the end certificate.</remarks>
        /// <exception cref="ArgumentNullException"><paramref name="cert"/> is a null reference (<b>Nothing</b> in Visual Basic).</exception>
        /// <exception cref="CertificateException">An error occurs while building the certificate chain.</exception>
        public CertificateChain(Certificate cert, CertificateStore additional, CertificateChainOptions options)
        {
            if (cert == null)
            {
                throw new ArgumentNullException();
            }
            IntPtr          addstore = additional == null ? IntPtr.Zero : additional.Handle;
            ChainParameters para     = new ChainParameters();

            para.cbSize = Marshal.SizeOf(typeof(ChainParameters));
            para.RequestedUsagecUsageIdentifier     = 0;
            para.RequestedUsagedwType               = 0;
            para.RequestedUsagergpszUsageIdentifier = IntPtr.Zero;
            if (SspiProvider.CertGetCertificateChain(IntPtr.Zero, cert.Handle, IntPtr.Zero, addstore, ref para, (int)options, IntPtr.Zero, ref m_Handle) == 0)
            {
                throw new CertificateException("Unable to find the certificate chain.");
            }
            m_Certificate = cert;
        }