Método IWMDMStorage::GetRights (mswmdm.h)
O método GetRights recupera informações de direitos para um armazenamento licenciado.
Sintaxe
HRESULT GetRights(
[out] PWMDMRIGHTS *ppRights,
[out] UINT *pnRightsCount,
[in, out] BYTE [8] abMac
);
Parâmetros
[out] ppRights
Ponteiro para uma matriz de estruturas WMDMRIGHTS que contêm os direitos de armazenamento. Esse parâmetro está incluído no código de autenticação de mensagem. O Windows Media Gerenciador de Dispositivos aloca essa memória e o aplicativo deve liberá-la com CoTaskMemFree.
[out] pnRightsCount
Ponteiro para o número de estruturas WMDMRIGHTS na matriz ppRights . Esse parâmetro está incluído no código de autenticação de mensagem.
[in, out] abMac
Matriz de bytes que contém o MAC (código de autenticação de mensagem) para os dados de parâmetro desse método.
Retornar valor
O método retorna um HRESULT. Todos os métodos de interface no Windows Media Gerenciador de Dispositivos podem retornar qualquer uma das seguintes classes de códigos de erro:
- Códigos de erro COM padrão
- Códigos de erro do Windows convertidos em valores HRESULT
- Códigos de erro do Windows Media Gerenciador de Dispositivos
Comentários
Os direitos de objeto descrevem as permissões de uso para conteúdo de mídia digital. Por exemplo, a estrutura WMDMRIGHTS pode conter informações sobre quantas vezes um arquivo pode ser reproduzido e quem pode reproduzi-lo. Esse método falhará se este não for um arquivo licenciado.
A matriz ppRights é alocada por esse método e deve ser liberada pelo aplicativo usando CoTaskMemFree, uma função padrão do Win32.
Para receber eventos de progresso para essa chamada, use IWMDMStorage4::GetRightsWithProgress.
Depois de chamar esse método, um aplicativo pode calcular os valores de mac (código de autenticação de mensagem) de parâmetros e compará-los com valores MAC de saída para garantir que os parâmetros não tenham sido adulterados. O código de exemplo a seguir mostra uma maneira de fazer isso.
Exemplos
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;
}
}
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | mswmdm.h |
Biblioteca | Mssachlp.lib |