C++ 以静默方式从Windows根存储中删除证书
我正在尝试使用WinCrypt API函数从根存储中删除证书,如下所示:C++ 以静默方式从Windows根存储中删除证书,c++,windows,windows-services,certificate,C++,Windows,Windows Services,Certificate,我正在尝试使用WinCrypt API函数从根存储中删除证书,如下所示: HANDLE hStoreHandle = INVALID_HANDLE_VALUE; PCCERT_CONTEXT pCertContext = NULL; char * pszStoreName = "ROOT"; char pszNameString[256]; //hStoreHandle = CertOpenSystemStoreA(NULL, pszStoreName); hStoreHandle = Ce
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
不允许删除根证书。我想要一个程序化的解决方案,但如果能完成任务,我可以使用工具。您可以通过程序自动回答对话框来进行破解。尝试在另一个线程中查找与对话框关联的按钮窗口,并在“是”按钮上发布消息以生成BN_CLICKED事件 在较慢(较旧)的系统上,它不会导致在触发事件之前绘制窗口吗?我真的不希望窗口以任何方式出现。大多数驱动程序软件使用此方法隐藏“未签名的驱动程序”对话框。它的效果很好,虽然窗口可能会在一瞬间出现和消失。我会尝试一下,但我会让问题开放几天。如果成功的话,我会接受你的回答。我会说这是一件极不道德的事情。人们喜欢控制他们系统的安全关键部分。这里有一个UI提示,说明隐藏敏感提示不可能成为好人的原因。您可以提前请求提升权限,但这可能会给您足够的权限。您可以提供一些上下文,说明如何使用您的答案来解决问题?一行没有解释的文字并不能提供一个好的答案。
CERT_SYSTEM_STORE_CURRENT_USER->CERT_SYSTEM_STORE_LOCAL_MACHINE