IWMDeviceRegistration
COM公式ドキュメント
IWMDeviceRegistration インターフェースは、セキュアなデータ配信のために再生デバイスを登録します。WMCreateDeviceRegistration 関数を呼び出すことで、デバイス登録オブジェクトを作成し、その IWMDeviceRegistration インターフェースへのポインターを取得できます。
解説(Remarks)
デバイス登録データベースの主な目的は、Windows Media DRM 10 for Network Devices プロトコル向けにエンコードされたストリーミングメディアを受信できる接続済みデバイスに関するデータを格納することです。必要に応じて、その他のデバイスをデータベースに登録することもできます。
デバイス登録データベースは、クライアントコンピューター上のセキュアなデータベースです。データベースとのすべてのやり取りは内部で管理され、アプリケーションが直接アクセスすることはできません。
すべてのアプリケーションが同一のデバイス登録データベースを使用します。
データベース内のデバイスは種類ごとに登録されます。Windows Media DRM 10 for Network Devices をサポートするデバイスは、DRM_DEVICE_REGISTER_TYPE_STREAMING 登録種別を使用します。その他の種別は将来のバージョンでサポートされる可能性があります。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
RegisterDevice メソッドは、デバイスをデバイス一覧に追加します。
| dwRegisterType | DWORD | in | 登録するデバイスの種類。Windows Media DRM 10 for Network Devices をサポートするデバイスは DRM_DEVICE_REGISTER_TYPE_STREAMING を使用します。Windows Media DRM 10 for Network Devices を使用しないデバイスを登録するには、このパラメーターを 0 に設定します。 |
| pbCertificate | BYTE* | in | メモリ内のデバイス証明書のアドレス。 |
| cbCertificate | DWORD | in | 証明書データのサイズ(バイト単位)。 |
| SerialNumber | DRM_VAL16 | in | 128 ビットのデバイス識別子。DRM_VAL16 構造体に格納されます。 |
| ppDevice | IWMRegisteredDevice** | out | 新しく登録されたデバイスの IWMRegisteredDevice インターフェースへのポインターを受け取る変数のアドレス。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
|
pbCertificate パラメーターが NULL ですが、cbCertificate パラメーターが 0 より大きい値です。
または dwRegisterType パラメーターが DRM_DEVICE_REGISTER_TYPE_STREAMING に設定されていますが、証明書が指定されていません。 |
|
| 内部変数のためのメモリを割り当てられませんでした。 |
解説(Remarks)
登録は、デバイスからアプリケーションに送信される登録要求メッセージによって開始されます。このメッセージを受信したら、まず IWMDRMMessageParser::ParseRegistrationReqMsg を呼び出して、メッセージから証明書とデバイス識別子を抽出する必要があります。メッセージを解析した後、証明書とデバイス識別子をこのメソッドに渡します。
デバイスを登録した後、保護されたメディアデータを送信する前に近接検出を実行する必要があります。
DRM_DEVICE_REGISTER_TYPE_STORAGE 登録種別は定義されていますが、本リリースでは使用されません。
UnregisterDevice メソッドは、デバイス登録データベースからデバイスを削除します。
| dwRegisterType | DWORD | in | 削除するデバイスの種類を格納する DWORD。Windows Media DRM 10 for Network Devices をサポートするデバイスは DRM_DEVICE_REGISTER_TYPE_STREAMING 登録種別を使用します。 |
| pbCertificate | BYTE* | in | メモリ内のデバイス証明書のアドレス。 |
| cbCertificate | DWORD | in | 証明書データのサイズ(バイト単位)。 |
| SerialNumber | DRM_VAL16 | in | 128 ビットのデバイス識別子。DRM_VAL16 構造体に格納されます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| pbCertificate パラメーターが NULL ですが、cbCertificate パラメーターが 0 より大きい値です。 |
解説(Remarks)
DRM_DEVICE_REGISTER_TYPE_STORAGE 登録種別は定義されていますが、本リリースでは使用されません。
GetRegistrationStats メソッドは、デバイス登録データベース内で指定された種類を持つデバイスの数を取得します。
| dwRegisterType | DWORD | in | 数を取得する対象のデバイスの種類。Windows Media DRM 10 for Network Devices をサポートするデバイスは DRM_DEVICE_REGISTER_TYPE_STREAMING 登録種別を使用します。 |
| pcRegisteredDevices | DWORD* | out | 指定された種類の登録済みデバイスの数を受け取る変数のアドレス。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| pcRegisteredDevices パラメーターが NULL です。 |
解説(Remarks)
DRM_DEVICE_REGISTER_TYPE_STORAGE 登録種別は定義されていますが、本リリースでは使用されません。
GetFirstRegisteredDevice メソッドは、デバイス登録データベース内にある指定された種類の最初のデバイスに関する情報を取得します。
| dwRegisterType | DWORD | in | 情報を取得する対象のデバイスの種類。Windows Media DRM 10 for Network Devices をサポートするデバイスは DRM_DEVICE_REGISTER_TYPE_STREAMING 登録種別を使用します。 |
| ppDevice | IWMRegisteredDevice** | out | IWMRegisteredDevice インターフェースへのポインターを受け取る変数のアドレス。このインターフェースは、dwRegisterType で指定された種類に一致する、データベース内の最初の登録済みデバイスに関する情報へのアクセスを提供します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| ppDevice パラメーターが NULL です。 | |
| 列挙する登録済みデバイスがありません。この値が返された場合、ppDevice が指すアドレスは NULL に設定されます。 |
解説(Remarks)
指定された種類の登録済みデバイスを列挙するには、まずこのメソッドを呼び出して最初のデバイスエントリを取得します。その後、GetNextRegisteredDevice を繰り返し呼び出して、データベースから後続のデバイスエントリを取得します。
DRM_DEVICE_REGISTER_TYPE_STORAGE 登録種別は定義されていますが、本リリースでは使用されません。
GetNextRegisteredDevice メソッドは、指定された種類の登録済みデバイスを列挙します。
| ppDevice | IWMRegisteredDevice** | out | IWMRegisteredDevice インターフェースへのポインターを受け取る変数のアドレス。このインターフェースは、GetFirstRegisteredDevice の呼び出しで使用した dwRegisterType パラメーターで指定された種類に一致する、データベース内の登録済みデバイスに関する情報へのアクセスを提供します。この情報は、一覧内の次のデバイス(前回取得したデバイスの次)に適用されます。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
| 一覧内に指定された種類のデバイスがこれ以上ありません。この値が返された場合、ppDevice が指すアドレスは NULL に設定されます。 | |
| ppDevice パラメーターが NULL です。 |
解説(Remarks)
指定された種類の登録済みデバイスを列挙するには、まず GetFirstRegisteredDevice を呼び出して最初のデバイスを取得します。その後、このメソッドを繰り返し呼び出して、一覧から後続のデバイスを取得します。指定された種類のすべてのデバイスを取得した後、次の GetNextRegisteredDevice の呼び出しは S_FALSE を返し、ppDevice が指すアドレスは NULL に設定されます。
GetRegisteredDeviceByID メソッドは、デバイス識別子を使用して登録済みデバイスに関する情報を取得します。
| dwRegisterType | DWORD | in | 情報を取得する対象のデバイスの種類。Windows Media DRM 10 for Network Devices をサポートするデバイスは DRM_DEVICE_REGISTER_TYPE_STREAMING 登録種別を使用します。 |
| pbCertificate | BYTE* | in | メモリ内のデバイス証明書のアドレス。 |
| cbCertificate | DWORD | in | 証明書データのサイズ(バイト単位)。 |
| SerialNumber | DRM_VAL16 | in | 128 ビットのデバイス識別子。DRM_VAL16 構造体に格納されます。 |
| ppDevice | IWMRegisteredDevice** | out | IWMRegisteredDevice インターフェースへのポインターを受け取る変数のアドレス。このインターフェースは、他の識別パラメーターに一致する、一覧内の登録済みデバイスに関する情報へのアクセスを提供します。 |
戻り値
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
|
ppDevice パラメーターが NULL です。
または pbCertificate パラメーターが NULL ですが、cbCertificate パラメーターが 0 より大きい値です。 |
|
| 指定されたデバイスは登録されていません。 |
解説(Remarks)
アプリケーションがデバイスからメッセージを受信すると、IWMDRMMessageParser インターフェースのメソッドを使用して、デバイス証明書とデバイス識別子を抽出できます。そのデータをこのメソッドの入力として使用することで、デバイスを識別できます。
DRM_DEVICE_REGISTER_TYPE_STORAGE 登録種別は定義されていますが、本リリースでは使用されません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWMDeviceRegistration "{F6211F03-8D21-4E94-93E6-8510805F2D99}" #usecom global IWMDeviceRegistration IID_IWMDeviceRegistration "{}" #comfunc global IWMDeviceRegistration_RegisterDevice 3 int,var,int,int,sptr #comfunc global IWMDeviceRegistration_UnregisterDevice 4 int,var,int,int #comfunc global IWMDeviceRegistration_GetRegistrationStats 5 int,var #comfunc global IWMDeviceRegistration_GetFirstRegisteredDevice 6 int,sptr #comfunc global IWMDeviceRegistration_GetNextRegisteredDevice 7 sptr #comfunc global IWMDeviceRegistration_GetRegisteredDeviceByID 8 int,var,int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IWMDeviceRegistration "{F6211F03-8D21-4E94-93E6-8510805F2D99}" #usecom global IWMDeviceRegistration IID_IWMDeviceRegistration "{}" #comfunc global IWMDeviceRegistration_RegisterDevice 3 int,sptr,int,int,sptr #comfunc global IWMDeviceRegistration_UnregisterDevice 4 int,sptr,int,int #comfunc global IWMDeviceRegistration_GetRegistrationStats 5 int,sptr #comfunc global IWMDeviceRegistration_GetFirstRegisteredDevice 6 int,sptr #comfunc global IWMDeviceRegistration_GetNextRegisteredDevice 7 sptr #comfunc global IWMDeviceRegistration_GetRegisteredDeviceByID 8 int,sptr,int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。