コード例 #1
0
ファイル: Container.cs プロジェクト: pdb0102/CspTool
        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();
        }
コード例 #2
0
ファイル: Provider.cs プロジェクト: pdb0102/CspTool
 public Provider(string name, ProviderType providerType)
 {
     Name         = name;
     ProviderType = providerType;
 }