logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Aleksandr G*  
#1 Оставлено : 7 декабря 2017 г. 9:19:27(UTC)
Aleksandr G*

Статус: Участник

Группы: Участники
Зарегистрирован: 13.09.2016(UTC)
Сообщений: 20

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 3 раз в 3 постах
Здравствуйте.

Для программной проверки лицензии на CSP используем CryptGetProvParam со значением PP_LICENSE.
Возвращаемые CryptGetProvParam результаты:
1. (корректно) Лицензия установлена и действительна - true
2. (некорректно) Лицензия установлена и истекла - true
3. (некорректно) Лицензия не установлена - true, в pbData пустая строка
4. (корректно) Лицензия установлена, но имеет неверный формат - false

В документации:
Цитата:
PP_LICENSE Возвращает серийный номер клиентской лицензии на CSP. Если лицензия не установлена или не действительна, функция возвращает FALSE. Серийный номер возвращается в виде строки символов типа char, заканчивающейся нулём. Возвращаемый серийный номер не содержит разделителей.

Offline Aleksandr G*  
#2 Оставлено : 7 декабря 2017 г. 14:45:11(UTC)
Aleksandr G*

Статус: Участник

Группы: Участники
Зарегистрирован: 13.09.2016(UTC)
Сообщений: 20

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 3 раз в 3 постах
Пример кода:

Код:

        static HCRYPTPROV hCryptProv = 0;
		DWORD cbData = 0;
		LPBYTE pbData;
		Handle<std::string> license;

		if (!CryptAcquireContext(
			&hCryptProv,
			NULL,
			NULL,
			PROV_GOST_2001_DH,
			CRYPT_VERIFYCONTEXT))
		{
			THROW_EXCEPTION(0, Key, NULL, "CryptAcquireContext. Error: %d", GetLastError());
		}

		if (!CryptGetProvParam(
			hCryptProv,
			PP_LICENSE,
			NULL,
			&cbData,
			0))
		{
			THROW_EXCEPTION(0, Key, NULL, "CryptGetProvParam. Error: %d", GetLastError());
		}

		pbData = (LPBYTE)malloc(cbData);

		if (!CryptGetProvParam(
			hCryptProv,
			PP_LICENSE,
			pbData,
			&cbData,
			0))
		{
			THROW_EXCEPTION(0, Key, NULL, "CryptGetProvParam. Error: %d", GetLastError());
		}

		license = new std::string((char *)pbData);

		if (hCryptProv) {
			if (!CryptReleaseContext(hCryptProv, 0)) {
				THROW_EXCEPTION(0, Csp, NULL, "CryptReleaseContext. Error: %d", GetLastError());
			}
		}

		hCryptProv = 0;

		if (pbData) {
			free((BYTE*)pbData);
		}

         return license;
Offline olin  
#3 Оставлено : 15 декабря 2017 г. 7:44:20(UTC)
olin


Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 422

Поблагодарили: 66 раз в 56 постах
Спасибо за указание на проблему, поправим.
Русев Андрей, ООО "КРИПТО-ПРО"
Offline ivan_zubov  
#4 Оставлено : 27 декабря 2017 г. 7:55:27(UTC)
ivan_zubov


Статус: Сотрудник

Группы: Участники
Зарегистрирован: 02.11.2017(UTC)
Сообщений: 15

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 5 раз в 5 постах
Починили, в следующих релизах (включая скорый релиз CSP 4.0 R3) этой проблемы не будет. Спасибо за сообщение об ошибке, Александр!
thanks 1 пользователь поблагодарил ivan_zubov за этот пост.
Aleksandr G* оставлено 28.12.2017(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.