Original URL: | https://blogs.msdn.microsoft.com/alejacma/2009/02/13/how-to-view-a-certificate-programatically-c/ |
Post name: | How to view a certificate programatically (C#) |
Original author: | Alejandro Campos Magencio |
Posting date: | 2009-02-13T03:36:00+00:00 |
Hi all,
The following C# sample shows a dialog to view a certificateand its properties. This is the same dialog that appears when we double-click on the cert file in Explorer. I'll use CryptUIDlgViewCertificate API and its CRYPTUI_VIEWCERTIFICATE_STRUCT structure to achieve this:
...
using System.Security.Cryptography.X509Certificates;
using System.Runtime.InteropServices;
namespace MyNamespace
{
public partial class MyClass
{
...
public const int CRYPTUI_DISABLE_ADDTOSTORE = 0x00000010;[DllImport("CryptUI.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern Boolean CryptUIDlgViewCertificate(
ref CRYPTUI_VIEWCERTIFICATE_STRUCT pCertViewInfo,
ref bool pfPropertiesChanged
);public struct CRYPTUI_VIEWCERTIFICATE_STRUCT
{
public int dwSize;
public IntPtr hwndParent;
public int dwFlags;
[MarshalAs(UnmanagedType.LPWStr)]
public String szTitle;
public IntPtr pCertContext;
public IntPtr rgszPurposes;
public int cPurposes;
public IntPtr pCryptProviderData; // or hWVTStateData
public Boolean fpCryptProviderDataTrustedUsage;
public int idxSigner;
public int idxCert;
public Boolean fCounterSigner;
public int idxCounterSigner;
public int cStores;
public IntPtr rghStores;
public int cPropSheetPages;
public IntPtr rgPropSheetPages;
public int nStartPage;
}private void MySampleFunction()
{
// Get the cert
X509Certificate2 cert = new X509Certificate2(@"C:\temp\mycert.cer");// Show the cert
CRYPTUI_VIEWCERTIFICATE_STRUCT certViewInfo = new CRYPTUI_VIEWCERTIFICATE_STRUCT();
certViewInfo.dwSize = Marshal.SizeOf(certViewInfo);
certViewInfo.pCertContext = cert.Handle;
certViewInfo.szTitle = "Certificate Info";
certViewInfo.dwFlags = CRYPTUI_DISABLE_ADDTOSTORE;
certViewInfo.nStartPage = 0;
bool fPropertiesChanged = false;
if (!CryptUIDlgViewCertificate(ref certViewInfo, ref fPropertiesChanged))
{
int error = Marshal.GetLastWin32Error();
MessageBox.Show(error.ToString());
}
}
}
}
I hope this helps.
Regards,
Alex (Alejandro Campos Magencio)
Comments: