Windows Media DRM-Enabled アプリケーションの要件
Windows Media Digital Rights Management (DRM) 対応アプリケーションを作成するには、このドキュメントの「 アプリケーション開発の一般的な要件」 セクションで説明されているヘッダーとライブラリが必要です。 さらに、アプリケーションでは、デバイスを開くときに、クライアント情報に追加のプロパティを指定する必要があります。
次の表では、Windows Media DRM で保護されたコンテンツ転送を有効にするために必要な 2 つの追加プロパティについて説明します。
プロパティ | 説明 |
---|---|
WPD_CLIENT_WMDRM_APPLICATION_PRIVATE_KEY | アプリケーションの秘密キーを指定します。 |
WPD_CLIENT_WMDRM_APPLICATION_CERTIFICATE | アプリケーションの証明書を指定します。 |
これらのプロパティは、 IPortableDevice::Open メソッドを使用してデバイスを開くときに、アプリケーションのクライアント情報で指定する必要があります。 これらのプロパティを指定すると、WPD API によって保護されたコンテンツ転送が許可されます。 アプリケーションで証明書と秘密キーが提供されている場合、API は保護された WMDRM コンテンツをデバイスに転送するセキュリティで保護されたチャネルを作成します。
Windows Media DRM をサポートする Windows ベースのアプリケーションの作成と配布については、「Windows ベースのアプリケーションのライセンス」を参照してください。
コンテンツの転送
WMDRM で保護されたコンテンツを転送するには、 IPortableDeviceContent::CreateObjectWithPropertiesAndData を使用します。 このメソッドは、追加のオプションなしで、保護されたコンテンツとクリアコンテンツの両方に使用できます。 WPD API は、コンテンツが保護されているかクリアであるかに応じて、保護されたチャネルまたはクリア チャネルを自動的に選択します。 WMDRM セキュア コンテンツ プロバイダーとインターフェイスして、WMDRM ライセンスを処理します。
既知のクリア コンテンツの転送
保護されたコンテンツを処理するようにアプリケーションを有効にしたが、特定のファイルが保護されていないことがわかっている場合は、IPortableDeviceContent::CreateObjectWithPropertiesAndData を呼び出すときに入力 IPortableDeviceValues で WPD_API_OPTION_USE_CLEAR_DATA_STREAM オプションを TRUE に設定して、DRM 処理をスキップするように WPD に指示できます。
IWMDRMDeviceApp を使用した測定操作へのアクセス
WPD は、ライセンス更新と使用状況測定データ取得のために IWMDRMDeviceApp API にアクセスするメカニズムを提供します。 WPD を介してこの API にアクセスするには、IPortableDeviceContent::CreateObjectWithPropertiesAndData から返された IStream から、IID_IWMDRMDeviceAppの QueryInterface を呼び出します。 この IWMDRMDeviceApp インスタンスは、IStream が取得された特定のコンテンツではなく、WMDRM 互換デバイスへの IPortableDevice 接続に関連付けられています。 WPD は、測定 API を内部的にラップし、アプリケーションからアクセスできるようにします。 アプリケーションでは、 IWMDMDevice* パラメーターに WMDRMDEVICEAPP_USE_WPD_DEVICE_PTR 定数を使用する必要があります。
次のコード スニペットは、これを示しています。
IStream* pDataStream = NULL;
IWMDRMDeviceApp* pWMDRMApp = NULL;
// ... Initialization
hr = pPortableDeviceContent->CreateObjectWithPropertiesAndData(pValues,
&pDataStream,
&dwOptimalWriteBufferSize,
NULL);
// ... Transfer the protected WMDRM content
pDataStream->Write(pData, cbData, &cbWritten);
pDataStream->Commit(0);
hr = pDataStream->QueryInterface(IID_IWMDRMDeviceApp,
(void**)&pWMDRMApp);
if (SUCCEEDED(hr))
{
DWORD dwStatus = 0;
// Call metering operations on the current device using the WPD device pointer
hr = pWMDRMApp->QueryDeviceStatus((IWMDMDevice *)WMDRMDEVICEAPP_USE_WPD_DEVICE_PTR,
&dwStatus);
}
アプリケーション秘密キーと証明書と同じ前提条件もここに適用されます。 キー/証明書が無効な場合、または WMDRM システムの初期化に失敗した場合、 QueryInferface 呼び出しは失敗します。
IStream ポインターから IWMDRMDeviceApp インターフェイスを取得する上記の方法は、アプリケーションが事前に保護されたコンテンツ転送を既に実行している場合に便利です。その後、測定とライセンス同期操作を実行します。
IWMDRMDeviceApp にアクセスする必要があるほとんどのアプリケーションに対する推奨事項は、IWMDRMDeviceApp を直接初期化することです。これは、デバイスの使用状況測定とライセンス同期を行うために、保護されたコンテンツを転送したり、転送インターフェイスに保持したりする必要がないためです。この方法では、Windows Media デバイス マネージャー (WMDM) API を使用する必要があります。 詳細とサンプル コードについては、WHDC サイトの WPD アプリケーションからの WMDRM API へのアクセス に関するホワイトペーパーを参照してください。
関連トピック