Ошибка CryptAcquireContext в Windows 10 Creators Update

У меня есть код, который шифрует файл в режиме AES CFB. Хотя код работает правильно в Windows 7, Windows 8 и предыдущих версиях Windows 10, в Windows 10 Creators Update эта строка не работает:

if (!CryptAcquireContext(&hProv, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, 0))
{

    std::cout << "CryptAcquireContext Error\n";
    return 1;
}

Что может быть причиной этого?

P.S. Я видел, что в MSDN эта функция устарела, но я думал, что эта функция настолько распространена.


person MickCic    schedule 05.02.2018    source источник
comment
Что возвращает GetLastError   -  person Martin Bonner supports Monica    schedule 05.02.2018
comment
Есть ли причина, по которой вы не можете перейти на СПГ? (Вам все еще нужна поддержка XP?)   -  person Martin Bonner supports Monica    schedule 05.02.2018
comment
Я получаю этот номер GetLastError() - 2148073494   -  person MickCic    schedule 05.02.2018
comment
HRESULT обычно записываются в шестнадцатеричном формате. Это 0x80090016, и немного гугления показывает, что это соответствует Keyset не существует. Вы должны подтвердить это с помощью ErrLookup (я не могу, потому что я сейчас не в Windows). Затем вы должны отредактировать информацию в вопросе.   -  person Martin Bonner supports Monica    schedule 05.02.2018
comment
Все, что говорит @MartinBonner, плюс: NTE_BAD_KEYSET: не удалось открыть контейнер ключей. Распространенной причиной этой ошибки является отсутствие контейнера ключей. Чтобы создать контейнер ключей, вызовите CryptAcquireContext, используя флаг CRYPT_NEWKEYSET. Этот код ошибки также может указывать на то, что доступ к существующему контейнеру ключей запрещен. Права доступа к контейнеру могут быть предоставлены создателем набора ключей с помощью CryptSetProvParam. источник: msdn.microsoft.com/en-us/library/windows/desktop/   -  person Richard Critten    schedule 05.02.2018
comment
Да, спасибо, вы помогли мне решить проблему. Эту ссылку уже нашел.   -  person MickCic    schedule 05.02.2018