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

另请参阅

IWMDMStorage 接口

使用经过身份验证的安全通道

WMDMRIGHTS