DRMGetSignedIssuanceLicenseEx 函数 (msdrm.h)

[利用由 公开的功能的 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_KEYDRM_OWNER_LICENSE_NOPERSIST 可以与其他标志) 组合使用。 如果未指定 DRM_AUTO_GENERATE_KEY ,则必须使用加密系统(例如平台 SDK 中的 CryptoAPI 函数)提供自己的内容密钥。

DRM_SIGN_OFFLINE

指定脱机颁发许可证签名请求。 脱机签名时,将使用在上一次调用 DRMAcquireLicense 期间获取的客户端许可方证书 (CLC) 对颁发许可证进行签名。 若要从存储区获取此证书,请使用 DRMEnumerateLicense。 每个 CLC 都绑定到颁发它的服务器;请确保对要发布的颁发许可证使用正确的客户端许可方证书。

此标志不能与 DRM_SIGN_ONLINEDRM_SERVER_ISSUANCELICENSE 标志组合使用。

DRM_SIGN_CANCEL

取消联机签名请求。 脱机请求会立即处理,无需取消。

DRM_AUTO_GENERATE_KEY

可以与上述标志之一一一起使用,让 Active Directory Rights Management Services 系统为你生成内容密钥。 此密钥用于加密函数。 通常,密钥类型为 AES,密码模式为 ECB。 如果未指定此标志,则必须使用加密系统(例如平台 SDK 中的 CryptoAPI 函数)提供自己的内容密钥。

注意 如果使用 Windows 7 中包含的 AD RMS 客户端,或者如果安装 CBC 修补程序,则值 AES_CBC4K 可用于指定具有密码块链接的 AES 算法, (CBC) 密码模式。 有关详细信息,请参阅 DRMEncrypt 代码示例。
 

DRM_OWNER_LICENSE_NOPERSIST

所有者许可证存储在内存中,而不是永久存储中。 DRMGetOwnerLicense 函数随后可以检索所有者许可证。

DRM_REUSE_KEY

导致重复使用内容密钥。 内容密钥是从与传递给 DRMCreateIssuanceLicense 的绑定许可证关联的已签名颁发许可证 (hBoundLicense) 获取的。 必须确保绑定许可证绑定到 EDITRIGHTSDATAOWNER 权限。 此标志仅在 Windows 7 中可用。

注意 此标志必须与 DRM_SIGN_OFFLINE 结合使用。 还可以选择将其与 DRM_OWNER_LICENSE_NOPERSIST 合并。 这些是唯一允许的值。 参数 pbSymKeycbSymKey 必须设置为 0。
 
谨慎 若要避免安全隐患,请仅在添加用户或权限时重复使用内容密钥。 此外,最佳做法是始终为发布许可证生成新的内容标识符,以避免将较旧的最终用户许可证与新的发布许可证一起使用。
 

[in] pbSymKey

用于加密文档的内容密钥。 如果此值为 NULL,则 uFlags 参数必须指定 DRM_AUTO_GENERATE_KEYDRM_REUSE_KEY。 这些 uFlags 值会导致 忽略 pbSymKey

[in] cbSymKey

内容密钥的大小(以字节为单位)。 目前,除非 uFlags 参数指定 DRM_AUTO_GENERATE_KEYDRM_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

另请参阅

AD RMS 函数

创建和使用颁发许可证

脱机签名代码示例

联机签名代码示例