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

CryptEncodeObjectEx() private method

private CryptEncodeObjectEx ( int dwCertEncodingType, IntPtr lpszStructType, IntPtr pvStructInfo, int dwFlags, IntPtr pEncodePara, IntPtr pvEncoded, int &pcbEncoded ) : int
dwCertEncodingType int
lpszStructType System.IntPtr
pvStructInfo System.IntPtr
dwFlags int
pEncodePara System.IntPtr
pvEncoded System.IntPtr
pcbEncoded int
return int
        public static extern int CryptEncodeObjectEx(
            int dwCertEncodingType,
            IntPtr lpszStructType,
            IntPtr pvStructInfo,
            int dwFlags,
            IntPtr pEncodePara,
            IntPtr pvEncoded,
            ref int pcbEncoded);

Usage Example

コード例 #1
0
        /// <summary>
        /// Encodes a CERT_INFO.
        /// </summary>
        public static void Encode_CERT_INFO(CERT_INFO info, out IntPtr pEncoded, out int encodedSize)
        {
            pEncoded    = IntPtr.Zero;
            encodedSize = 0;

            IntPtr pData      = IntPtr.Zero;
            int    dwDataSize = 0;

            GCHandle hData = GCHandle.Alloc(info);

            try {
                // calculate amount of memory required.
                int bResult = Win32.CryptEncodeObjectEx(
                    Win32.X509_ASN_ENCODING,
                    (IntPtr)Win32.X509_CERT_CRL_TO_BE_SIGNED,
                    hData.AddrOfPinnedObject(),
                    0,
                    IntPtr.Zero,
                    IntPtr.Zero,
                    ref dwDataSize);

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

                // allocate memory.
                pData = Marshal.AllocHGlobal(dwDataSize);

                // decode blob.
                bResult = Win32.CryptEncodeObjectEx(
                    Win32.X509_ASN_ENCODING | Win32.PKCS_7_ASN_ENCODING,
                    (IntPtr)Win32.X509_CERT_CRL_TO_BE_SIGNED,
                    hData.AddrOfPinnedObject(),
                    0,
                    IntPtr.Zero,
                    pData,
                    ref dwDataSize);

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

                // return results.
                pEncoded    = pData;
                encodedSize = dwDataSize;
                pData       = IntPtr.Zero;
            } finally {
                if (hData.IsAllocated)
                {
                    hData.Free();
                }

                if (pData != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(pData);
                }
            }
        }