c++ - 在 C/C++ 中创建新的证书存储

标签 c++ c winapi creation certificate-store

我正在尝试使用 C/C++ 以编程方式在 Windows 中创建新的证书存储。

我从这个函数开始 - CryptAcquireContext,并写了这段代码:

#include<windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
    HCRYPTPROV hCryptProvider;
    PCWSTR DefaultContainerName = L"MyStoreName";
    PCWSTR DefaultProviderName = MS_STRONG_PROV;
    DWORD DefaultProviderType = PROV_RSA_FULL;
    DWORD DefaultProviderFlags = CRYPT_MACHINE_KEYSET | CRYPT_SILENT | CRYPT_NEWKEYSET;

    printf("%d\n", CryptAcquireContext(&hCryptProvider, DefaultContainerName, DefaultProviderName, DefaultProviderType, DefaultProviderFlags));

    return 0;
}

容器名称和提供程序名称值是从我应该遵循的设计文档中选取的。

我不知道这是否是创建商店的正确方法,因为在运行它并打开 MMC 的证书管理单元后,我没有看到给定名称的商店。该程序在第一次运行时打印 1,从第二次开始打印 0。

这是正确的方法吗?如果是,为什么我在 MMC 中看不到商店?如果不是,使用 C/C++ 创建新证书存储的正确方法是什么?

请随时指出代码中的任何错误。

最佳答案

CryptAcquireContext 可以创建 key 容器。 key 容器与证书存储不同。

要创建证书存储,请使用 CertRegisterPhysicalStoreCertRegisterSystemStore

关于c++ - 在 C/C++ 中创建新的证书存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20835179/

相关文章:

复杂跟踪的编译器错误(未声明的标识符/冲突类型/先前的声明)

c++ - 复制 token 时访问冲突

c++ - 是否保证 char 以外的任何类型?

c++ - Visual Studio 2013 C++ 标准库

c - 如何对纹理执行 HSL 变换?

C 线程池 - 传递参数重复

windows - timeBeginPeriod API 会影响系统时钟吗?

c++ - 如何使用 Code::Blocks 链接到库?

c++ - g++ 默认参数

c++ - 在 unix 中使用信号同步进程