IWMDRMDeviceApp::QueryDeviceStatus 方法
QueryDeviceStatus方法會查詢裝置目前的 DRM 狀態和功能。
語法
HRESULT QueryDeviceStatus(
[in] IWMDMDevice *pDevice,
[out] DWORD *pdwStatus
);
參數
-
pDevice [in]
-
IWMDMDevice物件的指標。
-
pdwStatus [out]
-
下列描述裝置 DRM 層面的零或多個 DWORD 值,結合位 OR。 請參閱<備註>。
狀態 描述 WMDRM_DEVICE_ISWMDRM 裝置支援 Windows Media DRM。 WMDRM_DEVICE_NEEDCLOCK 裝置沒有安全時鐘。 WMDRM_DEVICE_REVOKED 裝置已撤銷。 WMDRM_CLIENT_NEEDINDIV DRM 安全性必須個別化。 WMDRM_DEVICE_REFRESHCLOCK 時鐘必須重新整理。
傳回值
方法會傳回 HRESULT。 可能的值包括 (但不限於) 下表中的這些值。
傳回碼 | 描述 |
---|---|
|
此方法已成功。 |
|
輸入引數無效。 |
|
從裝置擷取的裝置憑證無效。 |
|
無法從裝置擷取裝置憑證。 |
備註
在 DRM 內容上執行任何受限制的動作之前,應該先呼叫這個方法,例如將 DRM 內容傳輸至裝置,或取得計量資訊。 如果pdwStatus所擷取的值指出必須執行某些動作 (,例如桌面的個別化,或取得裝置) 時鐘,應用程式應該呼叫AcquireDeviceData並將擷取的pdwStatus值從此函式傳遞至AcquireDeviceData中的dwFlags參數。 如果傳回零,裝置不支援適用于可攜式裝置的 Windows Media DRM 10,不需要採取任何動作。 如需詳細資訊 ,請參閱在應用程式中處理受保護的內容 。
範例
下列 C++ 程式碼範例會建立 WMDRMDeviceApp 物件、確認裝置是 Windows Media DRM 10 裝置、其時鐘正確,然後要求計量資料。
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;
}
規格需求
需求 | 值 |
---|---|
標頭 |
|
程式庫 |
|