| ||||
| ||||
Мне необхоимо определить список контейнеров. Однако в вызове CryptGetProvParam(hProv, PP_ENUMCONTAINERS, nil, @size, CRYPT_FIRST) Присутствует параметр hProv, который определяется при вызове CryptAcquireContext(@hProv, FContainer, ProvName, FProvider, CRYPT_NEWKEYSET) Но ведь в этот момент я еще не знаю имени контейнера. Как мне сначала синициализировать криптопровайдер не зная каким контейнером я буду пользоваться, а потом выбрать необходимый контейнер? | ||||
Ответы: | ||||
| ||||
Инициализируйте с флагом CRYPT_VERIFYCONTEXT. Тогда имя контейнера не требуется. | ||||
| ||||
Однако последовательный вызов CryptAcquireContext(@hProv, nil, ProvName, FProvider, CRYPT_VERIFYCONTEXT) CryptGetProvParam(hProv, PP_ENUMCONTAINERS, nil, @size, 0) Выдает ошибку ERROR_NO_MORE_ITEMS То есть он не видит доступных контейнеров. | ||||
| ||||
Конечно. Почему у CryptGetProvParam последний флаг 0 а не CRYPT_FIRST? | ||||
| ||||
С флагом CRYPT_FIRST помагло, но ведь он тогда возвращает длину первого контейнера, а не наибольшую длину среди всех контейнеров. | ||||
| ||||
Да, все правильно. Надо перебирать все последовательными вызовами CryptGetProvParam. | ||||