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

IWMDMProgress3

COM
IID21de01cb-3bb4-4929-b21a-17af3f80f658継承元IWMDMProgress2自前メソッド開始 vtbl7

公式ドキュメント

省略可能で、アプリケーションが実装する IWMDMProgress3 インターフェイスは、監視対象のイベントを指定するための追加の入力パラメーターと、コンテキスト固有の情報を渡す手段を提供することで IWMDMProgress2 を拡張します。このコールバックインターフェイスを実装するアプリケーションは、新しいメソッドに加えて、下位互換性のために IWMDMProgress および IWMDMProgress2 に対応するメソッドも実装する必要があります。

メソッド 3

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

vtbl 7 HRESULT Begin3(GUID EventId, DWORD dwEstimatedTicks, OPAQUECOMMAND* pContext)

Begin3 メソッドは、操作が開始されようとしていることを示すために Windows Media Device Manager から呼び出されます。

EventIdGUIDin

開始される操作を識別する GUID です。指定できる値を次の表に示します。

イベント 説明
SCP_EVENTID_ACQSECURECLOCK Windows Media Device Manager がサーバーからセキュアクロックを取得しています。
SCP_EVENTID_NEEDTOINDIV デバイスの個別化 (individualization) が行われています。現在は使用されていません。
SCP_EVENTID_DRMINFO このイベント ID は、各ファイルのコンテンツ内で見つかった DRM ヘッダーのバージョンをアプリケーションに通知するために使用されます。

返される OPAQUECOMMAND 構造体では、guidCommand メンバーが SCP_PARAMID_DRMVERSION に設定されます。

さらに、OPAQUECOMMAND は次のいずれかのフラグを指定します。

WMDM_SCP_DRMINFO_NOT_DRMPROTECTED

WMDM_SCP_DRMINFO_V1HEADER

WMDM_SCP_DRMINFO_V2HEADER

EVENT_WMDM_CONTENT_TRANSFER コンテンツがデバイスとの間で転送されています。
dwEstimatedTicksDWORDin操作の完了に必要と見積もられるティック数を指定する DWORD です。dwEstimatedTicks に渡されるティック数は、操作の完了に必要なティック数の推定値です。操作の実行中は Progress3 メソッドが呼び出され、経過したティック数が通知されます。アプリケーションはこの推定値を利用して、進行状況を表示する仕組みを構成できます。
pContextOPAQUECOMMAND*inoutoptionalWindows Media Device Manager によって処理されずにデバイスへ送信されたコマンドを格納する OPAQUECOMMAND 構造体へのポインターです。このパラメーターは省略可能で、NULL を指定できます。

戻り値

アプリケーションは、次のいずれかの HRESULT 値を返す必要があります。

戻り値 説明
S_OK
操作を続行します。
WMDM_E_USER_CANCELLED
Windows Media Device Manager は、現在の操作が完了するのを待たずにキャンセルします。アプリケーションがブロックモードを使用している場合、Windows Media Device Manager はこのエラーをアプリケーションに返します。

解説(Remarks)

アプリケーションは、操作を続行することを示す場合は S_OK を返し、操作をキャンセルすることを示す場合は WMDM_E_USER_CANCELLED を返します。アプリケーションがブロックモードを使用していて WMDM_E_USER_CANCELLED を返した場合、Windows Media Device Manager は同じエラーをアプリケーションに返します。

次の C++ コードは、Begin3 の実装例を示します。


HRESULT Begin3(GUID  EventId, DWORD  dwEstimatedTicks, OPAQUECOMMAND*  pContext)
{
    WCHAR strGuid[64];
    StringFromGUID2(reinterpret_cast<GUID&>(EventId),(LPOLESTR)strGuid, 64);
    // TODO: Display the message "IWMDMProgress3::Begin3 called." 
    // followed by the strGuid value.
    return S_OK;
}
vtbl 8 HRESULT Progress3(GUID EventId, DWORD dwTranspiredTicks, OPAQUECOMMAND* pContext)

Progress3 メソッドは、進行中の処理の状況を示すために Windows Media Device Manager から呼び出されます。

EventIdGUIDin

進行状況の通知が送信されるイベント ID を指定する GUID です。指定できる値を次の表に示します。

イベント 説明
SCP_EVENTID_ACQSECURECLOCK Windows Media Device Manager がサーバーからセキュアクロックを取得しています。
SCP_EVENTID_NEEDTOINDIV デバイスの個別化 (individualization) が行われています。現在は使用されていません。
SCP_EVENTID_DRMINFO このイベント ID は、各ファイルのコンテンツ内で見つかった DRM ヘッダーのバージョンをアプリケーションに通知するために使用されます。

返される OPAQUECOMMAND 構造体では、guidCommand パラメーターが SCP_PARAMID_DRMVERSION に設定されます。

さらに、データは次のいずれかのフラグを指定します。

WMDM_SCP_DRMINFO_NOT_DRMPROTECTED

WMDM_SCP_DRMINFO_V1HEADER

WMDM_SCP_DRMINFO_V2HEADER

EVENT_WMDM_CONTENT_TRANSFER コンテンツがデバイスとの間で転送されています。
dwTranspiredTicksDWORDinこれまでに経過したティック数を指定する DWORD です。
pContextOPAQUECOMMAND*inoutoptionalWindows Media Device Manager によって処理されずにデバイスへ直接送信されたコマンドを格納する OPAQUECOMMAND 構造体へのポインターです。このパラメーターは省略可能で、NULL を指定できます。イベントが SCP_EVENTID_DRMINFO の場合、このパラメーターのデータには SCP_PARAMID_DRMVERSION GUID が含まれます。

戻り値

アプリケーションは、次のいずれかの HRESULT 値を返す必要があります。

戻り値 説明
S_OK
操作を続行します。
WMDM_E_USER_CANCELLED
Windows Media Device Manager は、現在の操作が完了するのを待たずにキャンセルします。アプリケーションがブロックモードを使用している場合、Windows Media Device Manager はこのエラーをアプリケーションに返します。

解説(Remarks)

操作を実装するメソッドを所有するインターフェイスは、そのメソッドで定義された操作の実行中に Progress3 メソッドを呼び出します。Progress3 は推定ティック 1 回につき 1 回呼び出されることを想定していますが、実行中の操作が推定ティックごとに 1 回の呼び出しを保証するとは限らないため、呼び出しのたびに dwTranspiredTicks パラメーターを確認する必要があります。

アプリケーションは、操作を続行することを呼び出し元のメソッドに示すために S_OK を返します。操作をキャンセルすることを示すには WMDM_E_USER_CANCELLED を返します。アプリケーションがブロックモードを使用していて WMDM_E_USER_CANCELLED を返した場合、Windows Media Device Manager は同じエラーをアプリケーションに返します。

次の C++ コードは、Progress3 の実装例を示します。


HRESULT Progress3(GUID  EventId, DWORD  dwTranspiredTicks, OPAQUECOMMAND*  pContext)
{
    WCHAR strGuid[64];
    ZeroMemory(strGuid, 64);
    StringFromGUID2(reinterpret_cast<GUID&>(EventId),(LPOLESTR)strGuid, 64);
    // TODO: Display the message: "Progress3 called. GUID value: " 
    // followed by the strGUID value.
    // TODO: Display the message: "Progress3 dwTranspiredTicks: " 
    // followed by the dwTranspiredTicks value.

    return S_OK;
}
vtbl 9 HRESULT End3(GUID EventId, HRESULT hrCompletionCode, OPAQUECOMMAND* pContext)

End3 メソッドは、操作が完了したことを示すために Windows Media Device Manager から呼び出されます。

EventIdGUIDin

終了するイベントを指定する GUID です。指定できる値を次の表に示します。

イベント 説明
SCP_EVENTID_ACQSECURECLOCK Windows Media Device Manager がサーバーからセキュアクロックを取得しています。
SCP_EVENTID_NEEDTOINDIV デバイスの個別化 (individualization) が行われています。現在は使用されていません。
SCP_EVENTID_DRMINFO このイベント ID は、各ファイルのコンテンツ内で見つかった DRM ヘッダーのバージョンをアプリケーションに通知するために使用されます。

返される OPAQUECOMMAND 構造体では、guidCommand メンバーが SCP_PARAMID_DRMVERSION に設定されます。

さらに、データは次のいずれかのフラグを指定します。

WMDM_SCP_DRMINFO_NOT_DRMPROTECTED

WMDM_SCP_DRMINFO_V1HEADER

WMDM_SCP_DRMINFO_V2HEADER

EVENT_WMDM_CONTENT_TRANSFER コンテンツがデバイスとの間で転送されています。
hrCompletionCodeHRESULTin進行中だった操作の完了コードを指定する HRESULT です。hrCompletionCode パラメーターは、終了した操作の戻り値です。このパラメーターには、標準の COM エラーコード、HRESULT に変換された Win32 エラーコード、Windows Media Device Manager のエラーコードなど、任意の HRESULT を指定できます。
pContextOPAQUECOMMAND*inoutoptionalWindows Media Device Manager によって処理されずにデバイスへ直接送信されたコマンドを格納する OPAQUECOMMAND 構造体へのポインターです。このパラメーターは省略可能で、NULL を指定できます。このコンテキスト構造体は、コンポーネントがイベントとともに関連するデータをアプリケーションへ送るための手段です。この構造体を送信するコンポーネントは、アプリケーションがこのデータ構造をどのように解釈できるかを定義する必要があります。

戻り値

このメソッドが呼び出される時点で現在の操作は完了またはキャンセルされているため、Windows Media Device Manager は End3 メソッドが返す戻り値を無視します。

解説(Remarks)

操作を実装するメソッドを所有するインターフェイスは、そのメソッドで定義された操作が完了したときに End3 を呼び出します。

次の C++ コードは、End3 の実装例を示します。


HRESULT End3(GUID  EventId, HRESULT  hrCompletionCode, OPAQUECOMMAND*  pContext)
{
    // TODO: Display the message "IWMDMProgress3::End3 called."
    return S_OK;
}
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IWMDMProgress3 "{21DE01CB-3BB4-4929-B21A-17AF3F80F658}"
#usecom global IWMDMProgress3 IID_IWMDMProgress3 "{}"
#comfunc global IWMDMProgress3_Begin3     7 int,int,var
#comfunc global IWMDMProgress3_Progress3  8 int,int,var
#comfunc global IWMDMProgress3_End3       9 int,int,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。