CryptEnumProviders (advapi32)
Last changed: -131.130.182.124

.
Summary
TODO - a short description

C# Signature:

[DllImport("advapi32.dll", SetLastError=true, CharSet=CharSet.Auto)]
static extern bool CryptEnumProviders(
    [MarshalAs(UnmanagedType.U4)] int dwIndex,
    [MarshalAs(UnmanagedType.U4)] ref int pdwReserved,
    [MarshalAs(UnmanagedType.U4)] int dwFlags,
    [MarshalAs(UnmanagedType.U4)] ref int pdwProvType,
    StringBuilder pszProvName,
    [MarshalAs(UnmanagedType.U4)] ref int pcbProvName);

Another kind of declaration:

[DllImport("advapi32.dll", EntryPoint = "CryptEnumProviders", SetLastError = true)]

static extern bool CryptEnumProviders(
    uint dwIndex,
    IntPtr pdwReserved,
    uint dwFlags,
    ref uint pdwProvType,
    StringBuilder pszProvName,
    ref uint pcbProvName);

VB Signature:

User-Defined Types:

None.

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

[DllImport("Advapi32.dll")]
internal static extern bool CryptEnumProviders(
    int dwIndex,
    IntPtr pdwReserved,
    int dwFlags,
    ref int pdwProvType,
    StringBuilder pszProvName,
    ref int pcbProvName);

public static Dictionary<int, string> ReadAllProviders()
{
    Dictionary<int, string> installedCSPs = new Dictionary<int, string>;
    int cbName;
    int dwType;
    int dwIndex;
    StringBuilder pszName;
    dwIndex = 0;
    dwType = 1;
    cbName = 0;
    while (CryptEnumProviders(dwIndex, IntPtr.Zero, 0, ref dwType, null, ref cbName))
    {
        pszName = new StringBuilder(cbName);

        if (CryptEnumProviders(dwIndex++, IntPtr.Zero, 0, ref dwType, pszName, ref cbName))
        {
            installedCSPs.Add(dwType,pszName.ToString());
        }
    }
    return installedCSPs;
}

Documentation