Я пытаюсь установить дружественное имя на сертификате, когда я храню, что сертификат на машине со следующим кодом:Сертификат дружественное имя
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, он снова обрезает имя. Любая идея, что я делаю неправильно и как ее исправить?
Это именно то, что я делаю. Если вы используете длину дружественного имени + 1 для cbData, строка усекается примерно до половины ее длины. –
@DrewBurchett: Во второй части вопроса вы использовали '(BYTE *)« Temp Name. »Вместо строки Unicode и использовали некоторую непонятную константу' 32' для размера данных в байтах. Код, который я опубликовал, я получил из своей старой рабочей программы. Таким образом, это действительно работает, если вы просто используете правильный формат строки и указываете правильную длину данных. – Oleg
Второй набор исходных кодов вытаскивается непосредственно из примера на сайте Microsoft. Первый набор исходного кода (который точно так же, как ваш) - это то, что я пытаюсь использовать в своем коде. –