public static ProviderHandle GetProviderHandle(string providerName, ProviderType.Ids providerTypeId, Scope scope) { var acFlags = CryptAcquireContextFlags.NULL; if (scope == Scope.Machine) { acFlags |= CryptAcquireContextFlags.CRYPT_MACHINE_KEYSET; } ProviderHandle providerHandle; if (CryptAcquireContext(out providerHandle, null, providerName, providerTypeId, acFlags) == false) { throw new Win32Exception(); } return(providerHandle); }
public static Provider GetDefaultProvider(ProviderType.Ids providerTypeId, Scope scope) { var gdpFlags = scope == Scope.Machine ? CryptGetDefaultProviderFlags.CRYPT_MACHINE_DEFAULT : CryptGetDefaultProviderFlags.CRYPT_USER_DEFAULT; var defaultProviderNameLength_Bytes = 0; if (CryptGetDefaultProvider(providerTypeId, IntPtr.Zero, gdpFlags, null, ref defaultProviderNameLength_Bytes) == false) { throw new Win32Exception(); } var defaultProviderName = new StringBuilder(defaultProviderNameLength_Bytes); if (CryptGetDefaultProvider(providerTypeId, IntPtr.Zero, gdpFlags, defaultProviderName, ref defaultProviderNameLength_Bytes) == false) { throw new Win32Exception(); } var providerTypes = ProviderType.GetProviderTypes(); return(new Provider(defaultProviderName.ToString(), providerTypes[providerTypeId])); }
static extern bool CryptAcquireContext(out ProviderHandle hProv, string pszContainer, string pszProvider, ProviderType.Ids dwProvType, CryptAcquireContextFlags dwFlags);
static ProviderHandle GetProviderHandle(string containerName, string providerName, ProviderType.Ids providerTypeId, CryptAcquireContextFlags acFlags) { ProviderHandle providerHandle; if (CryptAcquireContext(out providerHandle, containerName, providerName, providerTypeId, acFlags) == false) { throw new Win32Exception(); } return(providerHandle); }
public static IEnumerable <Container> EnumerateContainers(string providerName, ProviderType.Ids providerTypeId, Scope scope) { var acFlags = CryptAcquireContextFlags.CRYPT_VERIFYCONTEXT; if (scope == Scope.Machine) { acFlags |= CryptAcquireContextFlags.CRYPT_MACHINE_KEYSET; } var providerHandle = GetProviderHandle(null, providerName, providerTypeId, acFlags); var containerNameMaxLength_Bytes = 0; if (CryptEnumerateContainerNames(providerHandle, null, ref containerNameMaxLength_Bytes, EnumerationFlags.CRYPT_FIRST) == false) { throw new Win32Exception(); } var providerTypes = ProviderType.GetProviderTypes(); var containerName = new byte[containerNameMaxLength_Bytes]; var gppFlags = EnumerationFlags.CRYPT_FIRST; while (CryptEnumerateContainerNames(providerHandle, containerName, ref containerNameMaxLength_Bytes, gppFlags)) { yield return (new Container( Encoding.ASCII.GetString(containerName).TrimEnd('\0'), new Provider( GetProviderName(providerHandle), providerTypes[providerTypeId] ), scope )); Array.Clear(containerName, 0, containerName.Length); gppFlags = EnumerationFlags.CRYPT_NEXT; } providerHandle.Dispose(); }
public static IEnumerable <Container> EnumerateContainers(ProviderType.Ids providerTypeId, Scope scope) { return(EnumerateContainers(null, providerTypeId, scope)); }
static extern bool CryptGetDefaultProvider(ProviderType.Ids dwProvType, IntPtr pdwReserved, CryptGetDefaultProviderFlags dwFlags, StringBuilder pszProvName, ref int ProvName);
static extern bool CryptEnumProviders(int dwIndex, IntPtr pdwReserved, int dwFlags, ref ProviderType.Ids pdwProvType, StringBuilder pszProvName, ref int pcbProvName);