IWMDMStorage::GetRights 方法 (mswmdm.h)
GetRights 方法检索许可存储的权限信息。
语法
HRESULT GetRights(
[out] PWMDMRIGHTS *ppRights,
[out] UINT *pnRightsCount,
[in, out] BYTE [8] abMac
);
参数
[out] ppRights
指向包含存储权限的 WMDMRIGHTS 结构的数组的指针。 此参数包含在消息身份验证代码中。 Windows Media 设备管理器分配此内存,应用程序必须使用 CoTaskMemFree 释放它。
[out] pnRightsCount
指向 ppRights 数组中 WMDMRIGHTS 结构数的指针。 此参数包含在消息身份验证代码中。
[in, out] abMac
包含此方法参数数据的消息身份验证代码 (MAC) 的字节数组。
返回值
该方法返回 HRESULT。 Windows Media 设备管理器 中的所有接口方法都可以返回以下任一类错误代码:
- 标准 COM 错误代码
- 转换为 HRESULT 值的 Windows 错误代码
- Windows Media 设备管理器错误代码
注解
对象权限描述数字媒体内容的使用权限。 例如, WMDMRIGHTS 结构可以包含有关文件可以播放多少次以及谁可以播放它的信息。 如果此方法不是许可文件,则此方法将失败。
ppRights 数组由此方法分配,并且必须使用 CoTaskMemFree(一种标准 Win32 函数)由应用程序释放。
若要接收此调用的进度事件,请使用 IWMDMStorage4::GetRightsWithProgress。
调用此方法后,应用程序可以计算 (MAC) 参数值的消息身份验证代码,并将其与输出 MAC 值进行比较,以确保参数未被篡改。 以下示例代码演示了执行此操作的一种方法。
示例
CSecureChannelClient *pSCClient;
IWMDMStorage *pStorgae;
HMAC hMAC;
BYTE abMAC[WMDM_MAC_LENGTH];
BYTE abMACVerify[WMDM_MAC_LENGTH];
hr = pStorage->GetRights(&pRights, &nRightsCount, abMAC);
if (SUCCEEDED(hr))
{
//
// First verify the integrity of the retrieved rights.
//
pSCClient->MACInit(&hMAC);
pSCClient->MACUpdate(hMAC, (BYTE*)(pRights),
sizeof(WMDMRIGHTS) * nRightsCount);
pSCClient->MACUpdate(hMAC, (BYTE*)(&nRightsCount),
sizeof(nRightsCount));
pSCClient->MACFinal(hMAC, (BYTE*)abMACVerify);
if (memcmp(abMACVerify, abMAC, sizeof(abMAC)) != 0)
{
hr = WMDM_E_MAC_CHECK_FAILED;
}
}
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | mswmdm.h |
Library | Mssachlp.lib |