[利用由 公开的功能的 AD RMS SDK
Msdrm.dll 中的客户端可用于 Windows Server 2008、Windows Vista、Windows Server 2008 R2、Windows 7、Windows Server 2012 和 Windows 8。 它可能被更改,或者
在后续版本中不可用。 请改用 Active Directory Rights Management Services SDK 2.1,
利用客户端在 Msipc.dll.] 中公开的功能。
DRMGetSignedIssuanceLicenseEx 函数可脱机获取已签名的颁发许可证。 调用 函数时,可以传入客户端许可方证书的句柄 (CLC) ,将权限帐户证书的句柄传入 RAC) (,从而指定在获取已签名的颁发许可证时要使用的 CLC 和 RAC。
语法
DRMEXPORT HRESULT UDAPICALL DRMGetSignedIssuanceLicenseEx(
[in] DRMENVHANDLE hEnv,
[in] DRMPUBHANDLE hIssuanceLicense,
[in] UINT uFlags,
[in] BYTE *pbSymKey,
[in] UINT cbSymKey,
[in] PWSTR wszSymKeyType,
[in] PVOID pvReserved,
[in] DRMHANDLE hEnablingPrincipal,
[in] DRMHANDLE hBoundLicenseCLC,
[in] DRMCALLBACK pfnCallback,
[in] PVOID pvContext
);
参数
[in] hEnv
使用 DRMInitEnvironment 函数创建的安全环境的句柄。 脱机签名需要句柄。 不使用密码箱的应用程序应为此参数传递 NULL 。
[in] hIssuanceLicense
要签名的颁发许可证的句柄,使用 DRMCreateIssuanceLicense 函数创建。
[in] uFlags
包含用于获取已签名颁发许可证的各种选项。 此参数可以是以下值之一 (,尽管 DRM_AUTO_GENERATE_KEY 和 DRM_OWNER_LICENSE_NOPERSIST 可以与其他标志) 组合使用。 如果未指定 DRM_AUTO_GENERATE_KEY ,则必须使用加密系统(例如平台 SDK 中的 CryptoAPI 函数)提供自己的内容密钥。
DRM_SIGN_OFFLINE
指定脱机颁发许可证签名请求。 脱机签名时,将使用在上一次调用 DRMAcquireLicense 期间获取的客户端许可方证书 (CLC) 对颁发许可证进行签名。 若要从存储区获取此证书,请使用 DRMEnumerateLicense。 每个 CLC 都绑定到颁发它的服务器;请确保对要发布的颁发许可证使用正确的客户端许可方证书。
此标志不能与 DRM_SIGN_ONLINE 或 DRM_SERVER_ISSUANCELICENSE 标志组合使用。
DRM_SIGN_CANCEL
取消联机签名请求。 脱机请求会立即处理,无需取消。
DRM_AUTO_GENERATE_KEY
可以与上述标志之一一一起使用,让 Active Directory Rights Management Services 系统为你生成内容密钥。 此密钥用于加密函数。 通常,密钥类型为 AES,密码模式为 ECB。 如果未指定此标志,则必须使用加密系统(例如平台 SDK 中的 CryptoAPI 函数)提供自己的内容密钥。
DRM_OWNER_LICENSE_NOPERSIST
所有者许可证存储在内存中,而不是永久存储中。 DRMGetOwnerLicense 函数随后可以检索所有者许可证。
DRM_REUSE_KEY
导致重复使用内容密钥。 内容密钥是从与传递给 DRMCreateIssuanceLicense 的绑定许可证关联的已签名颁发许可证 (hBoundLicense) 获取的。 必须确保绑定许可证绑定到 EDITRIGHTSDATA 或 OWNER 权限。 此标志仅在 Windows 7 中可用。
[in] pbSymKey
用于加密文档的内容密钥。 如果此值为 NULL,则 uFlags 参数必须指定 DRM_AUTO_GENERATE_KEY 或 DRM_REUSE_KEY。 这些 uFlags 值会导致 忽略 pbSymKey 。
[in] cbSymKey
内容密钥的大小(以字节为单位)。 目前,除非 uFlags 参数指定 DRM_AUTO_GENERATE_KEY 或 DRM_REUSE_KEY,否则此参数只能为 16,在这种情况下,此参数可以为零。
[in] wszSymKeyType
键类型。 值 AES 指定高级加密标准 (AES) 算法,该算法 (ECB) 密码模式。 如果使用的是 Windows 7,值 AES_CBC4K 可用于指定具有密码块链接的 AES 算法, (CBC) 密码模式。 有关详细信息,请参阅 DRMEncrypt 代码示例。
[in] pvReserved
保留供将来使用。
[in] hEnablingPrincipal
最终用户许可证中应绑定的启用主体的句柄。 通过使用 DRMCreateEnablingPrincipal 函数通过传入权限帐户证书来创建此句柄。 此参数是必需的。
[in] hBoundLicenseCLC
与使用 DRMCreateBoundLicense 创建的客户端许可方证书对应的绑定许可证的句柄。 这可以通过使用 hEnablingPrincipal 句柄将 wszClientLicensorCertificate 绑定到 ISSUE 权限来创建。 此参数是必需的。
[in] pfnCallback
指向回调函数的指针,用于通知应用程序异步请求的进度。 有关必须提供的回调函数的签名,请参阅 回调原型。
[in] pvContext
在回调函数的 pvContext 参数中发送的 32 位应用程序定义值。 此值可以是指向数据的指针、指向事件句柄的指针,或者自定义回调函数旨在处理的任何其他内容。 有关详细信息,请参阅 创建回调函数。
返回值
如果函数成功,该函数将返回S_OK。
如果函数失败,它将返回指示错误的 HRESULT 值。 可能的值包括但不限于以下列表中的值。 有关常见错误代码的列表,请参阅 常见 HRESULT 值。
注解
若要使用此函数,请使用 DRMCreateEnablingPrincipal 从权限帐户证书创建启用主体。 之后,必须分析客户端许可方证书 (CLC) 以获取内容 ID,其方式与最终用户许可证相同。 随后,调用 DRMCreateBoundLicense,传入从调用 DRMCreateEnablingPrincipal 获取的 hEnablingPrincipal 和内容 ID,以创建与 CLC 对应的 hBoundLicense。 接下来,调用 DRMGetSignedIssuanceLicenseEx,传入从调用 DRMCreateEnablingPrincipal 获取的 hEnablingPrincipal 和从调用 DRMCreateBoundLicense 获取的 hBoundLicense。 最后,缓存从调用 DRMCreateEnablingPrincipal 和调用 DRMCreateBoundLicense 获取的句柄。
要求
| 要求 | 值 |
|---|---|
| 最低受支持的客户端 | Windows 7 |
| 最低受支持的服务器 | Windows Server 2008 R2 |
| 目标平台 | Windows |
| 标头 | msdrm.h |
| Library | Msdrm.lib |
| DLL | Msdrm.dll |