Reg Certificate to IE

本文介绍了一种使用C语言将证书导入到特定用户容器的方法。该过程涉及打开系统证书存储、创建证书上下文、设置证书提供者信息并最终将证书添加到存储中。此方法适用于需要自动化证书管理的应用场景。


char *CSPName = "Your USBKEY CSP";
int CSP_ImportUserCert(
                                      unsigned char *containerName,
                                      unsigned long containerNameLen,
                                      unsigned long keyUsage,
                                      unsigned char *certificate,
                                      unsigned long certificateLen)
{
       HCRYPTPROV hProv = 0;
       HCRYPTKEY hUserKey = NULL;
       BYTE ErrInfo[1024];
       BYTE pbContiner[1024];
       DWORD dwFlag;
       int rv;
       PCCERT_CONTEXT pCertContext = NULL;
       HCERTSTORE hCertStore;
       memcpy(pbContiner,containerName,containerNameLen);
       pbContiner[containerNameLen] = '/0'
       dwFlag = 0;
       CRYPT_KEY_PROV_INFO KeyProvInfo;
      
      
 
             
       hCertStore = CertOpenStore(CERT_STORE_PROV_SYSTEM_W, 0, 0,
              CERT_STORE_OPEN_EXISTING_FLAG |
              CERT_SYSTEM_STORE_CURRENT_USER, L"MY");
       if(hCertStore == NULL)
       {
              sprintf((char *)ErrInfo,"### CertOpenSystemStore Error.ErrCode:0x%x",GetLastError());
              DEBUGMSG(ErrInfo);
              CryptReleaseContext(hProv,0);
              return -1;
       }
       DEBUGMSG("*** CertOpenSystemStore OK.");

      
       if(pCertContext = CertCreateCertificateContext(
              X509_ASN_ENCODING   ,            // The encoding type
              certificate,   // The encoded data from
              // the certificate retrieved
              certificateLen))  // The length of the encoded data
       {
              printf("A new certificate as been created./n");
       }
       else
       {
              printf("A new certificate could not be created.");
              return -1;
       }
       ZeroMemory((PVOID)&KeyProvInfo, sizeof(CRYPT_KEY_PROV_INFO));
       CString strcontainerName;
       CString strCSPName;

       strcontainerName = containerName;
       strCSPName = CSPName;
       KeyProvInfo.pwszContainerName = strcontainerName.AllocSysString();
       KeyProvInfo.pwszProvName      = strCSPName.AllocSysString();
    KeyProvInfo.dwProvType        = PROV_RSA_FULL;
    KeyProvInfo.dwFlags           = 0;
    KeyProvInfo.dwKeySpec         = keyUsage;
       if(!CertSetCertificateContextProperty(pCertContext,
              CERT_KEY_PROV_INFO_PROP_ID,
              0,
              (const void *) &KeyProvInfo))
       {      
              sprintf((char *)ErrInfo,"### CertSetCertificateContextProperty Error.ErrCode:0x%x",GetLastError());
              DEBUGMSG(ErrInfo);
       }
      
       if(CertAddCertificateContextToStore(hCertStore,pCertContext,CERT_STORE_ADD_REPLACE_EXISTING,0))
       {
              printf("A new certificate as been add to strore./n");
       }
       else
       {
              sprintf((char *)ErrInfo,"### CertAddCertificateContextToStore Error.ErrCode:0x%x",GetLastError());
              DEBUGMSG(ErrInfo);
       }
       CertFreeCertificateContext(pCertContext);
      
       DEBUGMSG("*** CSP_ImportUserCert OK.");
       return 0;
}

【SCI一区复现】基于配电网韧性提升的应急移动电源预配置和动态调度(下)—MPS动态调度(Matlab代码实现)内容概要:本文档围绕“基于配电网韧性提升的应急移动电源预配置和动态调度”主题,重点介绍MPS(Mobile Power Sources)动态调度的Matlab代码实现,是SCI一区论文复现的技术资料。内容涵盖在灾害或故障等极端场景下,如何通过优化算法对应急移动电源进行科学调度,以提升配电网在突发事件中的恢复能力与供电可靠性。文档强调采用先进的智能优化算法进行建模求解,并结合IEEE标准测试系统(如IEEE33节点)进行仿真验证,具有较强的学术前沿性和工程应用价值。; 适合人群:具备电力系统基础知识和Matlab编程能力,从事电力系统优化、配电网韧性、应急电源调度等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于复现高水平期刊(SCI一区、IEEE顶刊)中关于配电网韧性与移动电源调度的研究成果;②支撑科研项目中的模型构建与算法开发,提升配电网在故障后的快速恢复能力;③为电力系统应急调度策略提供仿真工具与技术参考。; 阅读建议:建议结合前篇“MPS预配置”内容系统学习,重点关注动态调度模型的数学建模、目标函数设计与Matlab代码实现细节,建议配合YALMIP等优化工具包进行仿真实验,并参考文中提供的网盘资源获取完整代码与数据。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值