CertOpenSystemStore (crypt32)
Last changed: -67.152.152.11

.
Summary

C# Signature:

[DllImport("crypt32.dll", CharSet=CharSet.Auto, SetLastError=true)]
static extern IntPtr CertOpenSystemStore(IntPtr hCryptProv, string storename);

VB .NET Signature:

    <DllImport("Crypt32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
    Private Shared Function CertOpenSystemStore( _
    ByVal hCryptProv As IntPtr, _
    ByVal storename As String) As IntPtr
    End Function

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

using System;

using System.Runtime.InteropServices;

using System.Security.Cryptography.X509Certificates;

using System.ComponentModel;

public class WinCapi {

/*

HCERTSTORE   WINAPI CertOpenSystemStore(HCRYPTPROV hprov, LPTCSTR szSubsystemProtocol);
BOOL      WINAPI CertCloseStore(HCERTSTORE hCertStore, DWORD dwFlags);

PCCERT_CONTEXT WINAPI CertFindCertificateInStore(
  HCERTSTORE hCertStore,
  DWORD dwCertEncodingType,
  DWORD dwFindFlags,
  DWORD dwFindType,
  const void* pvFindPara,
  PCCERT_CONTEXT pPrevCertContext);

BOOL WINAPI CertFreeCertificateContext(

  PCCERT_CONTEXT pCertContext

);

*/

[DllImport("crypt32.dll", CharSet=CharSet.Auto, SetLastError=true)]
    public static extern IntPtr CertOpenSystemStore(
   IntPtr hCryptProv,
   string storename) ;

[DllImport("crypt32.dll", SetLastError=true)]
    public static extern bool CertCloseStore(
   IntPtr hCertStore,
   uint dwFlags) ;

[DllImport("crypt32.dll", SetLastError=true)]
    public static extern IntPtr CertFindCertificateInStore(
   IntPtr hCertStore,
   uint dwCertEncodingType,
   uint dwFindFlags,
   uint dwFindType,
   [In, MarshalAs(UnmanagedType.LPWStr)]String pszFindString,
   IntPtr pPrevCertCntxt) ;

[DllImport("crypt32.dll", SetLastError=true)]
    public static extern bool CertFreeCertificateContext(
   IntPtr hCertStore) ;

}

public class SimpleCert {

const string MY   = "MY";
const string OTHERS   = "AddressBook";
const uint PKCS_7_ASN_ENCODING    = 0x00010000;
const uint X509_ASN_ENCODING       = 0x00000001;
const uint CERT_FIND_SUBJECT_STR   = 0x00080007;

static uint MY_ENCODING_TYPE    = PKCS_7_ASN_ENCODING | X509_ASN_ENCODING ;

static string lpszCertSubject = "searched name" ;

public static void Main(){
  IntPtr hSysStore  = IntPtr.Zero;
  IntPtr hCertCntxt = IntPtr.Zero;

  hSysStore = WinCapi.CertOpenSystemStore(IntPtr.Zero, MY) ;
  Console.WriteLine("Store Handle:\t0x{0:X}", hSysStore.ToInt32());

if(hSysStore != IntPtr.Zero)
{
   hCertCntxt=WinCapi.CertFindCertificateInStore(
      hSysStore,
      MY_ENCODING_TYPE,
      0,
      CERT_FIND_SUBJECT_STR,
      lpszCertSubject ,
      IntPtr.Zero) ;

  if(hCertCntxt != IntPtr.Zero){  //use certcontext from managed code
   Console.WriteLine("CertContext:\t0x{0:X}", hCertCntxt.ToInt32()) ;
    X509Certificate foundcert = new X509Certificate(hCertCntxt);
   Console.WriteLine("\nFound certificate with SubjectName string \"{0}\"",lpszCertSubject);
   Console.WriteLine("SubjectName:\t{0}", foundcert.GetName());
   Console.WriteLine("Serial No:\t{0}", foundcert.GetSerialNumberString());
   Console.WriteLine("HashString:\t{0}" , foundcert.GetCertHashString());
   }
  else
    Console.WriteLine("Could not find SubjectName containing string \"{0}\"", lpszCertSubject);
}

//------- Clean Up ---------

  if(hCertCntxt != IntPtr.Zero)
   WinCapi.CertFreeCertificateContext(hCertCntxt);
  if(hSysStore != IntPtr.Zero)
   WinCapi.CertCloseStore(hSysStore, 0) ;
}

}

Alternative Managed API:

TODO

Documentation