0
我試圖設置證書的友好名稱時,我存儲在計算機上的證書與下面的代碼:證書友好名稱
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字符。在微軟提供的一個例子,他們執行以下操作:
BYTE *pName = (BYTE *)"Temp Name.";
CRYPT_DATA_BLOB Friendly_Name_Blob={32,pName};
我不知道在哪裏,他們得到來自32,也沒有提供,我可以找到一個解釋。當我使用32時,它再次截斷名稱。任何想法我做錯了什麼,以及如何糾正?
這正是我正在做的。如果對cbData使用友好名稱+ 1的長度,則該字符串會被截斷爲大約一半的長度。 –
@DrewBurchett:在你問題的第二部分,你使用了'(BYTE *)「Temp Name。」'而不是Unicode字符串,並且使用了一些不清晰的常量'32'來表示數據大小。我發佈的代碼是從舊的工作程序中獲得的。所以如果你只是使用正確的字符串格式並指定正確的數據長度,那真的很有用。 – Oleg
第二組源代碼直接來自微軟網站上的一個例子。第一組源代碼(與您的代碼完全相同)就是我試圖在代碼中使用的代碼。 –