Opc.Ua.Win32.Encode_CERT_NAME_BLOB C# (CSharp) Method

Encode_CERT_NAME_BLOB() public static method

Encodes a CERT_NAME_BLOB
public static Encode_CERT_NAME_BLOB ( string name, CERT_NAME_BLOB &pName ) : void
name string
pName CERT_NAME_BLOB
return void
        public static void Encode_CERT_NAME_BLOB(string name, ref CERT_NAME_BLOB pName)
        {
            int dwSize = 0;
            IntPtr pBuffer = IntPtr.Zero;

            try
            {
                // reconstruct name using comma as delimeter.
                name = ChangeSubjectNameDelimiter(name, ',');

                int bResult = Win32.CertStrToNameW(
                    X509_ASN_ENCODING,
                    name,
                    CERT_X500_NAME_STR | CERT_NAME_STR_REVERSE_FLAG,
                    IntPtr.Zero,
                    IntPtr.Zero,
                    ref dwSize,
                    IntPtr.Zero);

                if (bResult == 0)
                {
                    throw GetLastError(StatusCodes.BadEncodingError, "Could not get size for CERT_X500_NAME_STR.");
                }

                pBuffer = Marshal.AllocHGlobal(dwSize);

                bResult = Win32.CertStrToNameW(
                    X509_ASN_ENCODING,
                    name,
                    CERT_X500_NAME_STR | CERT_NAME_STR_REVERSE_FLAG,
                    IntPtr.Zero,
                    pBuffer,
                    ref dwSize,
                    IntPtr.Zero);

                if (bResult == 0)
                {
                    throw GetLastError(StatusCodes.BadEncodingError, "Could not encode CERT_X500_NAME_STR.");
                }

                pName.pbData = pBuffer;
                pName.cbData = dwSize;
                pBuffer = IntPtr.Zero;
            }
            finally
            {
                if (pBuffer != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(pBuffer);
                }
            }
        }