次のコードを使用して、証明書をマシンに保存するときに、証明書にフレンドリ名を設定しようとしています。
CRYPT_DATA_BLOB fName = {_tcslen(FriendlyName) * sizeof(TCHAR), FriendlyName};
CertSetCertificateContextProperty(certContext, CERT_FRIENDLY_NAME_PROP_ID, 0, &fName));
ここで、FriendlyName はフレンドリ名を指す LPWSTR であり、certContext は証明書をストアに保存する有効な証明書コンテキストです。関数は正しく機能し、名前は証明書に書き込まれます。ただし、証明書スナップインで表示すると、名前の最後の文字が切り捨てられます。名前の長さに 1 を追加しようとしたところ、名前が半分になってしまいました。FriendlyName と長さをチェックして、それらが正しいことを確認しました。FriendlyName を LPSTR に変更すると、漢字として表示されます。Microsoft が提供する例では、次のことを行います。
BYTE *pName = (BYTE *)"Temp Name.";
CRYPT_DATA_BLOB Friendly_Name_Blob={32,pName};
彼らがどこから 32 を取得したのかはわかりませんし、私が見つけることができる説明も提供していません。32 を使用すると、名前が切り捨てられます。私が間違っていることと、それを修正する方法はありますか?