| ||||
| ||||
не выполняется даже совершенно невинный тестовый код PCCERT_CONTEXT pUserCert = NULL; HANDLE hCertStore = 0; HANDLE hMyStore = 0; // Другие люди hCertStore = CertOpenStore( CERT_STORE_PROV_SYSTEM, 0, 0, CERT_STORE_OPEN_EXISTING_FLAG | CERT_STORE_READONLY_FLAG | CERT_SYSTEM_STORE_CURRENT_USER, L"AddressBook" ); // Личные hMyStore = CertOpenStore( CERT_STORE_PROV_SYSTEM, 0, 0, CERT_STORE_OPEN_EXISTING_FLAG | CERT_STORE_READONLY_FLAG | CERT_SYSTEM_STORE_CURRENT_USER, L"My" ); while( pUserCert = CertEnumCertificatesInStore(hMyStore, pUserCert)) { //Тут можно засветить сертификат в окошке CryptUIDlgViewContext( CERT_STORE_CERTIFICATE_CONTEXT, pUserCert, NULL, NULL, 0, NULL)); ret = CertAddCertificateContextToStore(hCertStore, pUserCert, CERT_STORE_ADD_ALWAYS /*dwAddDisposition */, NULL); if (!ret) { HandleError("Cannot add certificate to store."); } } CertFreeCertificateContext(pUserCert); if (!CertCloseStore (hCertStore, 0)) { HandleError("CertCloseStore"); } if (!CertCloseStore (hMyStore, 0)) { HandleError("CertCloseStore"); } здесь CertAddCertificateContextToStore возвращает ошибку E_INVALIDARG которая согласно MSDN может означать только неверное значение dwAddDisposition. но что здесь может быть неверно? | ||||
Ответы: | ||||
| ||||
Вы сначала делаете CertOpenStore(..., CERT_STORE_READONLY_FLAG, ...), а потом пытаетесь туда что-то записать. | ||||