Передача строки Юникода с нулевым символом в конце в метод DRMSetRevocationPoint - PullRequest
0 голосов
/ 07 декабря 2011

Я использую Microsoft RMS SDK для шифрования документов и отзыва прав пользователей.

Для выполнения отзыва мне нужно использовать метод DRMSetRevocationPoint . Мне нужно передать открытый ключ, который я использовал при подписании списка отзыва XML (список был создан и подписан). Аргументом является PWSTR, поэтому я попытался передать значение открытого ключа, которое я вижу в XML, но я думаю, что это неверно (получая ошибку при вызове списка из Office). То, что я ищу, - это правильный способ передать ключ к этому методу. Я обнаружил, что в документации для (похожих) методов в SDK этот аргумент документируется следующими способами:

wszPublicKey в DRMGetRevocationPoint:

Указатель на строку Unicode с нулевым символом в конце, которая получает необязательный открытый ключ для идентификации списка отзыва за пределами контентная цепочка доверия. Размер этого буфера определяется Параметр puPublicKeyLength.

wszPublicKey в DRMSetUsagePolicy:

* Указатель на завершающуюся нулем строку Юникода, которая содержит открытый ключ, используемый для подписи дайджеста приложения, необходимого для или запрещено пользоваться правами. Эта строка должна быть правильно сформирована Узел XrML. Этот параметр является обязательным, если eUsagePolicyType содержит DRM_USAGEPOLICY_TYPE_BYPUBLICKEY. Это игнорируется для всех остальных Значения eUsagePolicyType. *

Я смотрю документацию этого поля об этих методах, так как у них есть что-то еще. То, что я ищу, - это правильный способ взять ключ, который у меня есть, и вставить его в метод - любой совет был бы полезен. Открытый ключ из подписанного списка отзыва выглядит следующим образом:

<PUBLICKEY>
<ALGORITHM>RSA</ALGORITHM> 
<PARAMETER name="public-exponent">
<VALUE encoding="integer32">65537</VALUE> 
</PARAMETER>
<PARAMETER name="modulus">
<VALUE encoding="base64" size="1024">8Rk8Gx2bG6ML5y/RDjyHpFwhU0g/JYNOpewEsAMw+SndTaWCAPRDZr+NVzOorrBcycVenJd9XupQndStvDN0dID+nVAL8ZwCaFtzcW74g9YRDlHWnld1SOo7VysXKC3mkLvl64CPQMzM1MlmLZ3J9vkCpiOYV/8Xu0lAcpbRdLg=</VALUE> 
</PARAMETER>
</PUBLICKEY>

1 Ответ

0 голосов
/ 19 апреля 2012

Вы не показываете никакого кода, но PWSTR - это указатель wchar_t, который в Windows является строкой Unicode (UTF-16) (из символов wchar_t).Чтобы сделать это со строковым литералом, вам нужно поставить L перед строкой, то есть L"Hello world", но если вы делаете это в коде, вам нужно что-то вроде std::wstring и использовать его член c_str() дляполучить указатель.

...