CryptDestroyKey нарушение прав доступа в VS2015

Я работаю над задачей в проекте C ++, чтобы обновить некоторые компоненты от сборки с VS2010 до сборки с VS2015, и заметил странное поведение, которое я не мог найти в Интернете. Упрощенный код выглядит следующим образом:

#include "stdafx.h"
int main()
{
HCRYPTPROV hCryptProv = NULL;
LPCTSTR UserName = L"MyKeyContainer";
HCRYPTKEY hKey = NULL;

bool result = CryptAcquireContext(&hCryptProv, UserName, NULL, PROV_RSA_FULL, 0);

result = CryptGenKey(hCryptProv, CALG_RC4, 25 << 16, &hKey); // this line is meant to produce an invalid hKey.
result = CryptDestroyKey(hKey);

result = CryptReleaseContext(hCryptProv, 0);
return 0;
}

и предварительно скомпилированный заголовок:

#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <Wincrypt.h>

Если я пытаюсь создать и запустить этот фрагмент кода с VS2010, CryptGenKey возвращает ложный результат и значение hKey 0.
Передача hKey в CryptDestroyKey возвращает false, но не вызывает исключение.

Если я пытаюсь построить и запустить этот фрагмент кода с VS2015, CryptGenKey возвращает ложный результат и значение hKey 0.
Передача hKey в CryptDestroyKey вызывает исключение нарушения доступа.

Может ли кто-нибудь объяснить причину этой реализации и почему Windows не будет обрабатывать 0 в более современной версии VS? Это может быть потенциальной проблемой для других проектов, если они сами не управляют нулем.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]