Win32 API 日本語リファレンス
ホームMedia.WindowsMediaFormat › IWMDRMWriter

IWMDRMWriter

COM
IIDd6ea5dd0-12a0-43f4-90ab-a3fd451e6a07継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IWMDRMWriter インターフェイスは、ASF ファイル内のコンテンツに DRM 保護を適用するためのサポートを提供します。

メソッド 4

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GenerateKeySeed(LPWSTR pwszKeySeed, DWORD* pcwchLength)

GenerateKeySeed メソッドは、DRM キーシードを生成します。

pwszKeySeedLPWSTRoutキーシードを格納するワイド文字の null 終端文字列へのポインター。文字列のサイズを取得するには NULL を設定します。サイズは pcwchLength に返されます。
pcwchLengthDWORD*inoutpwszKeySeed のサイズ(ワイド文字単位)を格納する DWORD へのポインター。このサイズには終端の null 文字が含まれます。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

解説(Remarks)

同じキーシードを複数のファイルで使用すべきであるため、このメソッドが使用されることはまれです。アプリケーションによって作成されるすべてのファイル、または同じサーバーから配信されるすべてのファイルに対して同じキーシードを使用することも、ファイルの一部のサブセットに対して使用することもできます。

vtbl 4 HRESULT GenerateKeyID(LPWSTR pwszKeyID, DWORD* pcwchLength)

GenerateKeyID メソッドは、DRM キー ID を生成します。

pwszKeyIDLPWSTRoutキー識別子を格納するワイド文字の null 終端文字列へのポインター。文字列のサイズを取得するには NULL を設定します。サイズは pcwchLength に返されます。
pcwchLengthDWORD*inoutpwszKeyID のサイズ(ワイド文字単位)を格納する DWORD へのポインター。このサイズには終端の null 文字が含まれます。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

解説(Remarks)

各ファイルは、それぞれ独自のキー ID を持つ必要があります。

vtbl 5 HRESULT GenerateSigningKeyPair(LPWSTR pwszPrivKey, DWORD* pcwchPrivKeyLength, LPWSTR pwszPubKey, DWORD* pcwchPubKeyLength)

GenerateSigningKeyPair メソッドは、DRM ヘッダーオブジェクトの署名に使用される公開キーと秘密キーのペアを生成します。

pwszPrivKeyLPWSTRout秘密キーを格納するワイド文字の null 終端文字列へのポインター。文字列のサイズを取得するには NULL を設定します。サイズは pcwchPrivKeyLength に返されます。このキーを使用して DRM_HeaderSignPrivKey プロパティを設定します。
pcwchPrivKeyLengthDWORD*inoutpwszPrivKey のサイズ(ワイド文字単位)を格納する DWORD へのポインター。このサイズには終端の null 文字が含まれます。
pwszPubKeyLPWSTRout公開キーを格納するワイド文字の null 終端文字列へのポインター。文字列のサイズを取得するには NULL を設定します。サイズは pcwchPubKeyLength に返されます。このキーはライセンスサーバーとのみ共有されます。これにより、ユーザーがファイルのコンテンツライセンスを取得しようとするときに、ライセンスサーバーが DRM ヘッダーオブジェクトの署名を検証できるようになります。
pcwchPubKeyLengthDWORD*inoutpwsPubKey のサイズ(ワイド文字単位)を格納する DWORD へのポインター。このサイズには終端の null 文字が含まれます。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

解説(Remarks)

これらのキーを使用して ASF ヘッダーオブジェクトに適用される署名を、DRM_LASignaturePrivKey やファイル内のデジタル署名オブジェクトを構成するその他のプロパティを使用して DRM ヘッダーオブジェクトに適用される署名と混同しないでください。

このメソッドで生成されるキーは失効リストの基礎となるため、使用する異なるキーペアの数は個々のビジネスニーズに基づきます。一般に、論理的なグループを形成し、同じ失効リストを共有する一連のコンテンツに対しては、同じキーペアを使用する必要があります。

vtbl 6 HRESULT SetDRMAttribute(WORD wStreamNum, LPWSTR pszName, WMT_ATTR_DATATYPE Type, BYTE* pValue, WORD cbLength)

SetDRMAttribute メソッドは、DRM ヘッダー属性のほか、その他の DRM 実行時プロパティを設定します。

wStreamNumWORDin属性が適用されるストリーム番号を格納する WORD
pszNameLPWSTRin属性名を格納する null 終端文字列へのポインター。サポートされる属性については「解説」を参照してください。
TypeWMT_ATTR_DATATYPEin属性データのデータ型を指定する WMT_ATTR_DATATYPE 列挙型の値。
pValueBYTE*in属性データを格納するバイト配列へのポインター。
cbLengthWORDinpValue が指す属性データのサイズ(バイト単位)。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、書き込み可能な DRM ファイル属性(DRM 属性一覧を参照)だけでなく、DRM 実行時コンポーネントによって使用されるものの、ファイル内の DRM ヘッダーには書き込まれない特定の DRM プロパティ(DRM プロパティを参照)の設定にも使用されるため、名前がやや適切ではありません。

プロパティ Use_Advanced_DRM および Use_DRM は、プロファイルを設定する前に指定できます。それ以外のプロパティは、プロファイルを設定する前に設定することはできません。次のコードスニペットは、DRM_ContentID プロパティを例として、この関数を呼び出す方法を示しています。pDRMWriterIWMDRMWriter インターフェイスポインター、wszContentIDWCHAR 型の配列であるものとします。


hr = pDRMWriter->SetDRMAttribute( 0, g_wszWMDRM_ContentID, 
        WMT_TYPE_STRING, (BYTE *)wszContentID, 
        ( wcslen( wszContentID ) + 1 ) * sizeof( WCHAR ) );
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IWMDRMWriter "{D6EA5DD0-12A0-43F4-90AB-A3FD451E6A07}"
#usecom global IWMDRMWriter IID_IWMDRMWriter "{}"
#comfunc global IWMDRMWriter_GenerateKeySeed         3 var,var
#comfunc global IWMDRMWriter_GenerateKeyID           4 var,var
#comfunc global IWMDRMWriter_GenerateSigningKeyPair  5 var,var,var,var
#comfunc global IWMDRMWriter_SetDRMAttribute         6 int,wstr,int,var,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。