每次调用CryptSignMessage()时都需要密码 我们使用微软WiLink在未管理的C++项目中实现数字签名 存储在USB令牌上的证书

每次调用CryptSignMessage()时都需要密码 我们使用微软WiLink在未管理的C++项目中实现数字签名 存储在USB令牌上的证书,c++,windows,digital-signature,C++,Windows,Digital Signature,一切都按预期进行,除非用户多次通过该过程,否则他们只需在第一次输入证书密码,除非我们的应用程序关闭并重新启动 我们需要用户在每次签署某些数据时都用密码进行质询。有没有办法“重置”流程 CertOpenSystemStore(NULL,"MY"); CertEnumCertificatesInStore(); // until we find the certificate we want CryptSignMessage(); // this brings up the password dia

一切都按预期进行,除非用户多次通过该过程,否则他们只需在第一次输入证书密码,除非我们的应用程序关闭并重新启动

我们需要用户在每次签署某些数据时都用密码进行质询。有没有办法“重置”流程

CertOpenSystemStore(NULL,"MY");
CertEnumCertificatesInStore(); // until we find the certificate we want
CryptSignMessage(); // this brings up the password dialog box the first time, but not again
// edited to show closing store and freeing context
CertCloseStore();
CertFreeCertificateContext();

谢谢大家!

密码缓存由USB设备的驱动程序控制。通常,这可以通过设备及其驱动程序附带的一些UI应用程序进行配置

作为最后手段,您可以将签名过程放在单独的EXE中,并在每次需要对数据签名时运行它。这样,将为每个签名操作调用单独的进程,并且不会缓存密码