2017-01-20 9 views
0

Я после этого учебника от Microsoft Example C Program: Creating a Certificate ChainНеобработанное исключение вызова функции CertCreateCertificateChainEngine

Но я получаю Необработанное исключение вызова функции CertCreateCertificateChainEngine в следующем блоке

if(CertCreateCertificateChainEngine(
    &ChainConfig, 
    &hChainEngine)) { 

    printf("A chain engine has been created.\n"); 
} 
else { 

    MyHandleError("The engine creation function failed."); 
} 

Сообщение об исключении является:

Unhandled exception at 0x7535F61A (crypt32.dll) in capi_verify.exe: 0xC0000005: Access violation writing location 0xCCCCCCD0. 

Вот как определяются переменные:

HCERTCHAINENGINE   hChainEngine = NULL; 
CERT_CHAIN_ENGINE_CONFIG ChainConfig; 

и структура ChainConfig инициализируется как:

ChainConfig.cbSize = sizeof(CERT_CHAIN_ENGINE_CONFIG); 
ChainConfig.hRestrictedRoot= NULL ; 
ChainConfig.hRestrictedTrust= NULL ; 
ChainConfig.hRestrictedOther= NULL ; 
ChainConfig.cAdditionalStore=0 ; 
ChainConfig.rghAdditionalStore = NULL ; 
ChainConfig.dwFlags = CERT_CHAIN_CACHE_END_CERT; 
ChainConfig.dwUrlRetrievalTimeout= 0 ; 
ChainConfig.MaximumCachedCertificates=0 ; 
ChainConfig.CycleDetectionModulus = 0; 

функция CertCreateCertificateChainEngine имеет следующую подпись:

BOOL WINAPI CertCreateCertificateChainEngine(
    _In_ PCERT_CHAIN_ENGINE_CONFIG pConfig, 
    _Out_ HCERTCHAINENGINE   *phChainEngine 
); 

А вот скриншот Отладочная ChainConfig:

ChainConfig

hChainEngine отображается как NULL, например. 0x00000000

ответ

0

Я понял причину этого исключения. Проблема заключалась в том, что из-за изменений, внесенных после Windows 7, мы должны инициализировать элементы hExclusivrTrustPeople и hExclusiveRoot. Таким образом, упомянутая статья устарела для новых оконных систем