【发布时间】:2014-10-16 04:37:14
【问题描述】:
我正在尝试使用 WinCrypt API 函数从 Root 存储中删除证书,如下所示:
HANDLE hStoreHandle = INVALID_HANDLE_VALUE;
PCCERT_CONTEXT pCertContext = NULL;
char * pszStoreName = "ROOT";
char pszNameString[256];
//hStoreHandle = CertOpenSystemStoreA(NULL, pszStoreName);
hStoreHandle = CertOpenStore(CERT_STORE_PROV_SYSTEM,
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
0,
CERT_SYSTEM_STORE_CURRENT_USER,
(LPVOID) L"Root");
if(hStoreHandle == INVALID_HANDLE_VALUE)
//Fail
while(pCertContext = CertEnumCertificatesInStore(hStoreHandle, pCertContext))
{
if(CertGetNameStringA(
pCertContext,
CERT_NAME_SIMPLE_DISPLAY_TYPE,
0,
NULL,
pszNameString,
256))
{
if(strcmp(pszNameString, "DummyCertificate") == 0)
{
if(!CertDeleteCertificateFromStore(
CertDuplicateCertificateContext(pCertContext))
)
{
//Fail
}
}
}
else
{
//Fail
}
}
这发生在当我的应用程序 Windows 服务 注册到 MyService.exe /Service 时调用的函数中。因此,理论上,它应该具有删除证书所需的所有必要访问权限。但是,当调用CertDeleteCertificateFromStore 函数时,会出现一个弹出窗口,询问用户是否真的要删除证书。
我正在尝试阻止此窗口出现并在找到证书时静默删除该证书。有什么建议吗?
我查看了命令行实用程序 certutil 和 certmgr。据我从互联网上了解到,certutil 在客户端计算机上有些限制,certmgr 不允许删除根证书。我想要一个程序化的解决方案,但如果它可以完成工作,我可以使用工具。
【问题讨论】:
标签: c++ windows windows-services certificate