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

IWMDRMTranscryptor

COM
IID69059850-6e6f-4bb2-806f-71863ddfc471継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IWMDRMTranscryptor インターフェイスは、DRM で保護された ASF ファイルを、Windows Media DRM 10 for Network Devices プロトコルに準拠したセキュアなデータストリームに変換します。

解説(Remarks)

DRM トランスクリプター(transcryptor)は、デバイスからポリシー要求メッセージが送信された後に初期化されます。IWMDRMMessageParser::ParseLicenseRequestMsg を呼び出すことで、ライセンス要求を解析し、デバイス証明書、デバイスのシリアル番号、および要求されたアクションを取得できます。

IWMDRMTranscryptor インターフェイスのメソッドは、IWMStatusCallback::OnStatus コールバックメソッドを使用して、進行状況をアプリケーションに通知します。詳細については、Using the Callback Methods を参照してください。

メソッド 4

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

vtbl 3 HRESULT Initialize(LPWSTR bstrFileName, BYTE* pbLicenseRequestMsg, DWORD cbLicenseRequestMsg, INSSBuffer** ppLicenseResponseMsg, IWMStatusCallback* pCallback, void* pvContext)

Initialize メソッドは、ファイルを DRM トランスクリプターに読み込みます。トランスクリプターがデータを処理するには、事前にファイルを読み込んでおく必要があります。

bstrFileNameLPWSTRin読み込むファイルの名前。DRM で暗号化された ASF ファイルを指定してください。
pbLicenseRequestMsgBYTE*inoutメモリ内のライセンス要求メッセージのアドレス。このメッセージはデバイスからアプリケーションに送信されます。
cbLicenseRequestMsgDWORDinライセンス要求メッセージのサイズ(バイト単位)。
ppLicenseResponseMsgINSSBuffer**outライセンス応答メッセージのアドレスを受け取る変数のアドレス。アプリケーションは、暗号化されたデータを送信する前に、このメッセージをデバイスに送信する必要があります。
pCallbackIWMStatusCallback*inトランスクリプターからステータスメッセージを受け取る IWMStatusCallback 実装のアドレス。
pvContextvoid*inアプリケーションが使用する汎用ポインター。これは IWMStatusCallback::OnStatus コールバックの呼び出し時にアプリケーションへ渡されます。単一のステータスコールバックを共有する場合、このパラメーターを使用して異なるオブジェクトからのメッセージを区別できます。このパラメーターには NULL を指定できます。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
1 つ以上のポインターパラメーターが NULL です。

または

cbPolicyRequestMsg パラメーターが 0 です。

NS_E_INVALID_REQUEST
別のトランスクリプション(transcription)が進行中です。
E_OUTOFMEMORY
内部オブジェクト用のメモリを割り当てられませんでした。

解説(Remarks)

このメソッドは非同期です。ただちに戻りますが、WMT_TRANSCRYPTOR_INIT メッセージが IWMStatusCallback::OnStatus コールバックメソッドに送信されるまで処理は完了しません。このメッセージとともに送信される HRESULT には、初期化の戻り値が格納されます。

vtbl 4 HRESULT Seek(ULONGLONG hnsTime)

Seek メソッドは、読み込んだファイルのデータストリーム内の指定した位置から読み取るように DRM トランスクリプターを設定します。以降の Read 呼び出しは、その位置からデータを生成します。

hnsTimeULONGLONGinシーク時間(100 ナノ秒単位)。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。
NS_E_INVALID_REQUEST
トランスクリプターに読み込まれているファイルがありません。

解説(Remarks)

このメソッドは非同期です。ただちに戻りますが、WMT_TRANSCRYPTOR_SEEKED メッセージが IWMStatusCallback::OnStatus コールバックメソッドに送信されるまで処理は完了しません。

シーク操作が失敗した場合、メッセージは送信されません。

Seek の最初の呼び出しが成功すると、トランスクリプターはコンテンツの ASF ヘッダーを読み取ります。以降の Seek 呼び出しはデータセクション内の読み取り位置を変更しますが、ヘッダーや ASF Data Object(データセクションに関する最上位情報を含む ASF オブジェクト)は生成しません。

ファイル全体を変換するには、プレゼンテーション時間 0 を指定して Seek を呼び出します。

vtbl 5 HRESULT Read(BYTE* pbData, DWORD* pcbData)

Read メソッドは、トランスクリプターに読み込まれたファイルからデータを読み取り、Windows Media DRM 10 for Network Devices をサポートするデバイスへのストリーミング用に暗号化します。

pbDataBYTE*inデータを受け取るバッファーのアドレス。
pcbDataDWORD*inpbData が指すデータバッファーのサイズを格納する変数のアドレス。入力時にはバッファーのサイズを設定します。出力時には、実際に読み取られたバイト数に値が変更されます。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。
NS_E_INVALID_REQUEST
トランスクリプターは読み取りの準備ができていません。

または

別の読み取りが進行中です。

解説(Remarks)

このメソッドは非同期です。ただちに戻りますが、WMT_TRANSCRYPTOR_READ メッセージが IWMStatusCallback::OnStatus コールバックメソッドに送信されるまで処理は完了しません。pbData が参照するバッファーも、pcbData が参照するバッファー長も、WMT_TRANSCRYPTOR_READ メッセージが送信されるまで更新されません。

WMT_TRANSCRYPTOR_READ メッセージとともに送信される HRESULT には、読み取り操作の戻り値が格納されます。この読み取り操作のデータにファイルの終端が含まれることを示すために、特別な成功コード NS_S_TRANSCRYPTOR_EOF が送信されます。

vtbl 6 HRESULT Close()

Close メソッドは、DRM トランスクリプターからファイルをアンロードし、関連するすべてのリソースを解放します。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値コード 説明
S_OK
メソッドは成功しました。

解説(Remarks)

このメソッドは非同期です。ただちに戻りますが、WMT_TRANSCRYPTOR_CLOSED メッセージが IWMStatusCallback::OnStatus コールバックメソッドに送信されるまで処理は完了しません。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IWMDRMTranscryptor "{69059850-6E6F-4BB2-806F-71863DDFC471}"
#usecom global IWMDRMTranscryptor IID_IWMDRMTranscryptor "{}"
#comfunc global IWMDRMTranscryptor_Initialize  3 wstr,var,int,sptr,sptr,sptr
#comfunc global IWMDRMTranscryptor_Seek        4 int64
#comfunc global IWMDRMTranscryptor_Read        5 var,var
#comfunc global IWMDRMTranscryptor_Close       6
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。