CryptoAPI函数测试实例代码(三)

2014-11-23 23:30:16 · 作者: · 浏览: 26
rror(); _stprintf( szErrInfo, _T("CertAddCertificateContextToStore FAILED, Error Code: 0x%X "), dwError ); } break; } nRet = true; } while(0); if( pCertContex ) CertFreeCertificateContext( pCertContex ); if( hCryptProv ) CryptReleaseContext( hCryptProv, 0 ); if( hCertStoreToWhere ) CertCloseStore( hCertStoreToWhere, 0 ); if( hCertStore ) CertCloseStore(hCertStore, 0); return nRet; } // // 函数: bool RemoveCert( TCHAR* szSubject, TCHAR* szIssuer, WCHAR* wcsRemoveFromWhere, TCHAR* szErrInfo = NULL ) // // 目的: 从系统中wcsImportToWhere指定区域删除一张证书,要求符合主题和颁发者 // // 参数 // szSubject // [in]: 要删除的证书的主题 // szIssuer // [in]: 要删除的证书的颁发者 // wcsImportToWhere // [in]: L"MY", L"CA", L"ROOT" // szErrInfo // [out]: 如果错误,返回错误信息 // // 返回: 成功返回true,失败返回false // bool RemoveCert( TCHAR* szSubject, TCHAR* szIssuer, WCHAR* wcsRemoveFromWhere, TCHAR* szErrInfo ) { bool bRet = false; HCERTSTORE hCertStore = NULL; PCCERT_CONTEXT pCCertContext = NULL; do { hCertStore = ::CertOpenStore(CERT_STORE_PROV_SYSTEM_W, 0, NULL, CERT_SYSTEM_STORE_CURRENT_USER | CERT_STORE_OPEN_EXISTING_FLAG, wcsRemoveFromWhere ); if( NULL == hCertStore ) { if( NULL != szErrInfo ) { _tcscpy( szErrInfo, _T("CertOpenStoren Failed") ); } break; } do { pCCertContext = ::CertEnumCertificatesInStore( hCertStore, pCCertContext ); if( NULL == pCCertContext ) { if( NULL != szErrInfo ) { DWORD dwErrCode = ::GetLastError(); _stprintf( szErrInfo, _T("CertFindCertificateInStore FAILED, Error Code: 0x%d "), dwErrCode ); } break; } else { // 获取证书主题和颁发者 CBuffer subjectB
uf; CBuffer issuerBuf; DWORD dwSize = ::CertGetNameString( pCCertContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0/*CERT_NAME_ISSUER_FLAG*/, NULL, NULL, 0 ); subjectBuf.malloc( dwSize ); dwSize = ::CertGetNameString( pCCertContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0/*CERT_NAME_ISSUER_FLAG*/, NULL, subjectBuf, dwSize ); dwSize = ::CertGetNameString( pCCertContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, CERT_NAME_ISSUER_FLAG, NULL, NULL, 0 ); issuerBuf.malloc( dwSize ); dwSize = ::CertGetNameString( pCCertContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, CERT_NAME_ISSUER_FLAG, NULL, issuerBuf, dwSize ); if( 0 == _tcscmp( (TCHAR*)subjectBuf, szSubject ) && 0 == _tcscmp( (TCHAR*)issuerBuf, szIssuer )) { // 在这里开一个线程来由程序点击“是”那个按钮 if( 0 == wcscmp( L"ROOT", wcsRemoveFromWhere ) ) { CreateThread( NULL, 0, RemoveRootCertAutoClickProc, 0, 0, 0 ); } if( FALSE == ::CertDeleteCertificateFromStore( pCCertContext ) ) { if( NULL != szErrInfo ) { DWORD dwErrCode = ::GetLastError(); _stprintf( szErrInfo, _T("CertDeleteCertificateFromStore FAILED, Error Code: 0x% "), dwErrCode ); } } break; } } } while( true ); bRet = true; } while(false); if( pCCertContext ) CertFreeCertificateContext( pCCertContext ); if( hCertStore ) ::CertCloseStore( hCertStore, 0 ); return bRet; } // // 函数:bool ImportDerCert( TCHAR* szCertPath, WCHAR* wcsImportToWhere, TCHAR* szErrInfo = NULL ) // // 目的:导入一张Der证书到IE中的区域 // // 参数: // wcsImportToWhere // [in] L"MY", L"CA", // bool ImportDerCert( TCHAR* szCertPath, WCHAR* wcsImportToWhere, TCHAR* szErrInfo ) { bool bRet = false; HCERTSTORE hCertStore = NULL; PCCERT_CONTEXT lpCertContext = NULL;