Método IWMDRMDeviceApp::QueryDeviceStatus
O método QueryDeviceStatus consulta um dispositivo em busca de seus recursos e status DRM atuais.
Sintaxe
HRESULT QueryDeviceStatus(
[in] IWMDMDevice *pDevice,
[out] DWORD *pdwStatus
);
Parâmetros
-
pDevice [in]
-
Ponteiro para um objeto IWMDMDevice .
-
pdwStatus [out]
-
Zero ou mais dos valores DWORD a seguir que descrevem os aspectos drm do dispositivo, combinados com um OR bit a bit. Consulte Observações.
Status Descrição WMDRM_DEVICE_ISWMDRM O dispositivo dá suporte ao DRM do Windows Media. WMDRM_DEVICE_NEEDCLOCK O dispositivo não tem um relógio seguro. WMDRM_DEVICE_REVOKED O dispositivo foi revogado. WMDRM_CLIENT_NEEDINDIV A segurança do DRM precisa ser individualizada. WMDRM_DEVICE_REFRESHCLOCK O relógio precisa ser atualizado.
Valor retornado
O método retorna um HRESULT. Os possíveis valores incluem, mas sem limitação, aqueles na tabela a seguir.
Código de retorno | Descrição |
---|---|
|
O método foi bem-sucedido. |
|
O argumento de entrada não é válido. |
|
O certificado do dispositivo recuperado do dispositivo não é válido. |
|
Falha ao recuperar o certificado do dispositivo do dispositivo. |
Comentários
Esse método deve ser chamado antes de executar qualquer ação restrita no conteúdo drm, como transferir conteúdo DRM para o dispositivo ou adquirir informações de medição. Se os valores recuperados por pdwStatus indicarem que alguma ação precisa ser executada (como a individualização da área de trabalho ou a aquisição de um relógio para o dispositivo), o aplicativo deverá chamar AcquireDeviceData e passar o valor de pdwStatus recuperado dessa função para o parâmetro dwFlags em AcquireDeviceData. Se zero for retornado, o dispositivo não oferecerá suporte ao DRM 10 do Windows Media para Dispositivos Portáteis e nenhuma ação será tomada. Consulte Manipulando conteúdo protegido no aplicativo para obter mais informações.
Exemplos
O exemplo de código C++ a seguir cria um objeto WMDRMDeviceApp , verifica se o dispositivo é um dispositivo DRM 10 do Windows Media, se seu relógio é preciso e solicita os dados de medição.
HRESULT hr = S_OK;
// Create the WMDRMDeviceApp object.
CComPtr<IWMDRMDeviceApp> pDRM;
hr = pDRM.CoCreateInstance(CLSID_WMDRMDeviceApp, 0, CLSCTX_ALL);
// Find out first if the device is a WMDRM 10 device, and if it requires
// any clock updates.
DWORD status = 0;
hr = pDRM->QueryDeviceStatus(pDevice, &status);
if (!(WMDRM_DEVICE_ISWMDRM & status)) // Device is not WMDRM 10. Nothing can be updated,
return E_FAIL; // and metering cannot be performed.
else if (status & WMDRM_DEVICE_REVOKED) // Device is revoked.
return E_FAIL;
else if (status & WMDRM_DEVICE_NEEDCLOCK ||
status & WMDRM_CLIENT_NEEDINDIV ||
status & WMDRM_DEVICE_REFRESHCLOCK)
{
// Need to update device clock.
// Using custom function, which is synchronous.
hr = myAcquireDeviceData(pDRM, pDevice, this, status, &result);
if (hr != S_OK || result != 0) // Couldn't perform the updates.
return E_FAIL;
}
Requisitos
Requisito | Valor |
---|---|
parâmetro |
|
Biblioteca |
|