将以null结尾的unicode字符串传递给方法DRMSetRevocationPoint

时间:2011-12-07 15:54:39

标签: c++ rms

我正在使用Microsoft的AD RMS SDK来执行文档加密和用户权限撤销。

要执行撤销,我需要使用方法DRMSetRevocationPoint。我需要传入我用于签署XML撤销列表的公钥(列表已经创建并签名)。参数是一个PWSTR,所以我尝试传递我在XML中看到的公钥的值,但我认为它是不正确的(从Office调用列表时收到错误)。我所追求的是将密钥传递给此方法的正确方法。我发现在SDK中的(类似)方法的文档中,这个参数以下列方式记录:

DRMGetRevocationPoint中的wszPublicKey:

  

指向以null结尾的Unicode字符串的指针,该字符串接收可选的公钥以标识其外部的吊销列表   内容的信任链。此缓冲区的大小由   puPublicKeyLength参数。

DRMSetUsagePolicy中的

wszPublicKey:

  

*指向以null结尾的Unicode字符串的指针,该字符串包含用于签署所需应用程序摘要的公钥或   禁止行使权利。这个字符串必须是格式良好的   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 :(得分:0)

您不显示任何代码,但PWSTR是wchar_t指针,在Windows上是Unicode(UTF-16)字符串(wchar_t字符)。要使用字符串文字执行此操作,您需要在字符串前加L,即L"Hello world",但如果您在代码中执行此操作,则需要std::wstring之类的内容并使用其c_str()成员获取指针。