IWMDRMDeviceApp::QueryDeviceStatus メソッド
QueryDeviceStatus メソッドは、現在の DRM の状態と機能をデバイスに照会します。
構文
HRESULT QueryDeviceStatus(
[in] IWMDMDevice *pDevice,
[out] DWORD *pdwStatus
);
パラメーター
-
pDevice [in]
-
IWMDMDevice オブジェクトへのポインター。
-
pdwStatus [out]
-
デバイスの DRM の側面を説明する次の DWORD 値のうち、ビットごとの OR と組み合わせた 0 個以上の DWORD 値。 「解説」を参照してください。
Status 説明 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 パラメーターに渡す必要があります。 0 が返された場合、デバイスはポータブル デバイス用の 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;
}
要件
要件 | 値 |
---|---|
ヘッダー |
|
ライブラリ |
|