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 возвращает ложь, но не вызывает исключение.

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

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

0 ответов

Другие вопросы по тегам