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

Уведомление

Icon
Error

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

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

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

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

Для программной проверки лицензии на 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 г. 17:45:11(UTC)
Aleksandr G*

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

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

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

Код:

        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;
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.