当我使用以下代码将证书存储在机器上时,我试图在证书上设置友好名称:
CRYPT_DATA_BLOB fName = {_tcslen(FriendlyName) * sizeof(TCHAR), FriendlyName};
CertSetCertificateContextProperty(certContext, CERT_FRIENDLY_NAME_PROP_ID, 0, &fName));
显然,FriendlyName 是指向友好名称的 LPWSTR,而 certContext 是将证书保存在商店中的有效证书上下文。该功能正常工作,并将名称写入证书。但是,当我在证书管理单元中查看它时,名称的最后一个字母被截断。我试过在名字的长度上加一个,最后把名字减半。我检查了 FriendlyName 和长度,以确保它们正确无误。如果我将 FriendlyName 更改为 LPSTR,它会显示为 Kanjii 字符。在 Microsoft 提供的示例中,他们执行以下操作:
BYTE *pName = (BYTE *)"Temp Name.";
CRYPT_DATA_BLOB Friendly_Name_Blob={32,pName};
我不知道他们从哪里得到 32,也没有提供我能找到的解释。当我使用 32 时,它再次截断名称。知道我做错了什么以及如何纠正吗?