次の方法で共有


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 を返します。 有効な値を次の表に示しますが、これ以外にもあります。

リターン コード 説明
S_OK
メソッドが成功しました。
DRM_E_INVALIDARG
入力引数が無効です。
NS_E_DRM_INVALID_CERTIFICATE
デバイスから取得したデバイス証明書が無効です。
NS_E_DRM_UNABLE_TO_GET_DEVICE_CERT
デバイスからデバイス証明書を取得できませんでした。

解説

このメソッドは、DRM コンテンツに対して制限付きアクション (デバイスへの DRM コンテンツの転送や使用状況測定情報の取得など) を実行する前に呼び出す必要があります。 pdwStatus によって取得された値が、何らかのアクション (デスクトップの個別化やデバイスのクロックの取得など) を実行する必要があることを示している場合、アプリケーションは AcquireDeviceData を呼び出し、この関数から取得した pdwStatus 値を AcquireDeviceDatadwFlags パラメーターに渡す必要があります。 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;    
}

要件

要件
ヘッダー
WMDRMDeviceApp.h (WMDRMDeviceApp.idl からビルドされたWmdrmdeviceapp_i.c も必要です)
ライブラリ
Mssachlp.lib

関連項目

アプリケーションでの保護されたコンテンツの処理

IWMDRMDeviceApp インターフェイス

IWMDRMDeviceApp2::QueryDeviceStatus2