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

ISCPSecureQuery

COM
IID1dcb3a0d-33ed-11d3-8470-00c04f79dbc0継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ISCPSecureQuery インターフェイスは、保護されたコンテンツの所有権を判断するために Windows Media Device Manager から照会されます。

メソッド 4

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

vtbl 3 HRESULT GetDataDemands(DWORD* pfuFlags, DWORD* pdwMinRightsData, DWORD* pdwMinExamineData, DWORD* pdwMinDecideData, BYTE* abMac)

GetDataDemands メソッドは、指定されたコンテンツに対する権利と責任を判断するためにセキュア コンテンツ プロバイダーが必要とするデータを報告します。

pfuFlagsDWORD*out

セキュア コンテンツ プロバイダーが判断を行うために必要とするデータを示すフラグです。このパラメーターは、出力メッセージ認証コードに含まれます。次のフラグのうち少なくとも 1 つを使用する必要があります。

フラグ 説明
WMDM_SCP_RIGHTS_DATA セキュア コンテンツ プロバイダーは、コンテンツの権利を判断するためのデータを必要とします。
WMDM_SCP_EXAMINE_DATA セキュア コンテンツ プロバイダーは、そのコンテンツに対して責任を持つかどうかを判断するためのデータを必要とします。
WMDM_SCP_DECIDE_DATA セキュア コンテンツ プロバイダーは、コンテンツのダウンロードを許可するかどうかを判断するためのデータを必要とします。
WMDM_SCP_EXAMINE_EXTENSION セキュア コンテンツ プロバイダーは、コンテンツのダウンロードを許可するかどうかを判断するために、ファイル名拡張子を調べる必要があります。
WMDM_SCP_PROTECTED_OUTPUT セキュア コンテンツ プロバイダーは、保護された出力を必要とします。
WMDM_SCP_UNPROTECTED_OUTPUT セキュア コンテンツ プロバイダーは、保護されていない出力を必要とします。
pdwMinRightsDataDWORD*outこのコンテンツの権利を判断するために必要な最小のデータ量を示す DWORD へのポインターです。このパラメーターは、出力メッセージ認証コードに含まれます。
pdwMinExamineDataDWORD*outセキュア コンテンツ プロバイダーがそのコンテンツに対して責任を持つかどうかを判断するために必要な最小のデータ バイト数を格納する DWORD へのポインターです。このパラメーターは、出力メッセージ認証コードに含まれます。
pdwMinDecideDataDWORD*outセキュア コンテンツ プロバイダーがコンテンツのダウンロードを許可するかどうかを判断するために必要な最小のデータ バイト数を格納する DWORD へのポインターです。このパラメーターは、出力メッセージ認証コードに含まれます。
abMacBYTE*inoutこのメソッドのパラメーター データに対するメッセージ認証コードを格納する 8 バイトの配列です。(WMDM_MAC_LENGTH は 8 として定義されています。)

戻り値

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

戻り値 説明
WMDM_E_MAC_CHECK_FAILED
メッセージ認証コードが無効です。
E_INVALIDARG
パラメーターが無効であるか、NULL ポインターです。
E_FAIL
原因不明のエラーが発生しました。

解説(Remarks)

このメソッドは、ISCPSecureQuery の他のメソッドを呼び出す前に呼び出す必要があります。

このメソッドは、証明書の交換が正常に完了した後に呼び出されます。セキュア コンテンツ プロバイダーは、コンテンツに関する判断を行うための要件を示すフラグとデータを、各パラメーターに設定します。

セキュア コンテンツ プロバイダーが WMDM_SCP_RIGHTS_DATA フラグを設定した場合、Windows Media Device Manager は ISCPSecureQuery::GetRights を呼び出して、pdwMinRightsData で指定された量のデータを送信します。

セキュア コンテンツ プロバイダーが WMDM_SCP_EXAMINE_DATA フラグを設定した場合、Windows Media Device Manager は ISCPSecureQuery::ExamineData を呼び出して、pdwMinExamineData で指定された量のデータを送信します。

セキュア コンテンツ プロバイダーが WMDM_SCP_DECIDE_DATA フラグを設定した場合、Windows Media Device Manager は ISCPSecureQuery::MakeDecision を呼び出して、pdwMinDecideData で指定された量のデータを送信します。

examine 系のフラグが 1 つも設定されていない場合、Windows Media Device Manager はそれ以上の呼び出しを行いません。decide 系のフラグが設定されていない場合でも、Windows Media Device Manager は ISCPSecureQuery::ExamineData を呼び出します。

このメソッドが S_OK を返さない場合、Windows Media Device Manager はこのセキュア コンテンツ プロバイダーに対してそれ以上の呼び出しを行いません。

vtbl 4 HRESULT ExamineData(DWORD fuFlags, LPWSTR pwszExtension, BYTE* pData, DWORD dwSize, BYTE* abMac)

ExamineData メソッドは、Windows Media Device Manager から渡されたデータを調べて、コンテンツに対する権利と責任を判断します。

fuFlagsDWORDin

セキュア コンテンツ プロバイダーが判断を行うために提供されるデータを示すフラグです。次のフラグを指定できます。

フラグ 説明
WMDM_SCP_EXAMINE_DATA pData パラメーターは、調査対象のデータを指します。
pwszExtensionLPWSTRinoptionalセキュア コンテンツ プロバイダーが GetDataDemands の呼び出しで拡張子を要求した場合に、調査対象となるファイル名拡張子へのポインターです。
pDataBYTE*in調査対象となるファイルの先頭部分のデータへのポインターです。このパラメーターは入力メッセージ認証コードに含める必要があり、暗号化されている必要があります。
dwSizeDWORDin調査対象データの長さ (バイト単位) を格納する DWORD です。このパラメーターは、入力メッセージ認証コードに含める必要があります。
abMacBYTE*inoutこのメソッドのパラメーター データに対するメッセージ認証コードを格納する 8 バイトの配列です。(WMDM_MAC_LENGTH は 8 として定義されています。)

戻り値

このメソッドは HRESULT を返します。指定できる値には、次の表に示す値などがありますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。セキュア コンテンツ プロバイダーは、このコンテンツに対して責任を持ちます。
WMDM_E_CALL_OUT_OF_SEQUENCE
このメソッドが正しい順序で呼び出されませんでした。先に GetDataDemands を呼び出す必要があります。
WMDM_E_MAC_CHECK_FAILED
メッセージ認証コードが無効です。
WMDM_E_MOREDATA
Windows Media Device Manager は、別のデータ パケットを指定してこのメソッドを再度呼び出す必要があります。パケットのサイズは、GetDataDemands メソッドの pdwMinExamineData パラメーターによって決まります。
S_FALSE
セキュア コンテンツ プロバイダーは、このコンテンツに対して責任を持ちません。セキュア コンテンツ プロバイダーとのやり取りを終了してください。
E_INVALIDARG
パラメーターが無効であるか、NULL ポインターです。
E_FAIL
原因不明のエラーが発生しました。

解説(Remarks)

このメソッドは、GetDataDemands メソッドの後に呼び出されます。セキュア コンテンツ プロバイダーは、このメソッドで渡された情報を使用して、そのコンテンツに対して責任を持つかどうかを判断します。fuFlags パラメーターを参照して、どのデータが調査用に提示されたかを判断します。pData パラメーターは、権利と責任に関するデータの先頭を指します。dwSize パラメーターには、権利と責任に関するデータの長さ (バイト単位) が格納されます。

WMDM_SCP_EXAMINE_DATA フラグが設定されている場合、pDataBuffer パラメーターには、セキュア コンテンツ プロバイダーが調査するための dwDataLength バイトのデータが格納されます。

このメソッドが S_OK または WMDM_E_MOREDATA を返さない場合、Windows Media Device Manager はこのセキュア コンテンツ プロバイダーに対してそれ以上の呼び出しを行いません。

vtbl 5 HRESULT MakeDecision(DWORD fuFlags, BYTE* pData, DWORD dwSize, DWORD dwAppSec, BYTE* pbSPSessionKey, DWORD dwSessionKeyLen, IMDSPStorageGlobals* pStorageGlobals, ISCPSecureExchange** ppExchange, BYTE* abMac)

MakeDecision メソッドは、コンテンツへのアクセスが許可されるかどうかを判断します。アクセスが許可される場合、このメソッドはコンテンツへのアクセスに使用されるインターフェイスを返します。

fuFlagsDWORDin

セキュア コンテンツ プロバイダーが判断を行うために提供されるデータを示すフラグです。このパラメーターは、入力メッセージ認証コードに含める必要があります。次のフラグを指定できます。

フラグ 説明
WMDM_SCP_DECIDE_DATA pData パラメーターは、調査対象のデータを指します。
WMDM_MODE_TRANSFER_PROTECTED ISCPSecureExchange インターフェイスからの出力オブジェクト データは、保護されている必要があります。Windows Media Device Manager がこれらのモード フラグをどちらも設定しない場合、または両方を設定した場合は、ISCPSecureExchange インターフェイスからの出力オブジェクト データを保護するかどうかを DRM が判断します。
WMDM_MODE_TRANSFER_UNPROTECTED ISCPSecureExchange インターフェイスからの出力オブジェクト データは、保護されていない必要があります。Windows Media Device Manager がこれらのモード フラグをどちらも設定しない場合、または両方を設定した場合は、ISCPSecureExchange インターフェイスからの出力オブジェクト データを保護するかどうかを DRM が判断します。
pDataBYTE*in調査対象のデータを格納するデータ オブジェクトへのポインターです。このパラメーターは入力メッセージ認証コードに含める必要があり、暗号化されている必要があります。
dwSizeDWORDin調査対象データの長さ (バイト単位) を格納する DWORD です。このパラメーターは、入力メッセージ認証コードに含める必要があります。
dwAppSecDWORDinWindows Media Device Manager の現在のセキュリティ レベルを示す DWORD です。これは、アプリケーションと対象のサービス プロバイダーの現在のセキュリティ レベルのうち、小さい方の値です。このパラメーターは、入力メッセージ認証コードに含める必要があります。
pbSPSessionKeyBYTE*inpStgGlobals が指すサービス プロバイダーとの通信を保護するためのセッション キーを格納するバイト配列へのポインターです。このパラメーターは入力メッセージ認証コードに含める必要があり、暗号化されている必要があります。
dwSessionKeyLenDWORDinpbSPSessionKey が指すバイト配列の長さです。このパラメーターは、入力メッセージ認証コードに含める必要があります。
pStorageGlobalsIMDSPStorageGlobals*inoptionalファイルの転送元または転送先となるメディアまたはデバイスのルート ストレージ上の IWMDMStorageGlobals インターフェイスへのポインターです。このパラメーターは、入力メッセージ認証コードに含める必要があります。
ppExchangeISCPSecureExchange**out交換インターフェイスを受け取る交換オブジェクトへのポインターです。
abMacBYTE*inoutこのメソッドのパラメーター データに対するメッセージ認証コードを格納する 8 バイトの配列です。(WMDM_MAC_LENGTH は 8 として定義されています。)

戻り値

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

戻り値 説明
WMDM_E_CALL_OUT_OF_SEQUENCE
このメソッドが正しい順序で呼び出されませんでした。
WMDM_E_MAC_CHECK_FAILED
メッセージ認証コードが無効です。
WMDM_E_MOREDATA
Windows Media Device Manager は、別のデータ パケットを指定してこのメソッドを再度呼び出す必要があります。パケットのサイズは、ISCPSecureQuery::GetDataDemands メソッドの pdwMinDecisionData パラメーターによって決まります。
S_FALSE
呼び出し元は、要求された転送を実行するために必要な権利を持っていません。
E_INVALIDARG
パラメーターが無効であるか、NULL ポインターです。
E_FAIL
原因不明のエラーが発生しました。

解説(Remarks)

このメソッドは ISCPSecureQuery::ExamineData メソッドの後に呼び出され、コンテンツへのアクセスを許可するかどうかの最終的な判断を行います。

vtbl 6 HRESULT GetRights(BYTE* pData, DWORD dwSize, BYTE* pbSPSessionKey, DWORD dwSessionKeyLen, IMDSPStorageGlobals* pStgGlobals, WMDMRIGHTS** ppRights, DWORD* pnRightsCount, BYTE* abMac)

GetRights メソッドは、現在のコンテンツに関する権利情報を取得します。権利はファイルごとに固有です。

pDataBYTE*inGetDataDemands によって要求されたデータへのポインターです。このパラメーターは入力メッセージ認証コードに含める必要があり、暗号化されている必要があります。
dwSizeDWORDinpData バッファー内のデータのバイト数です。このパラメーターは、入力メッセージ認証コードに含める必要があります。
pbSPSessionKeyBYTE*inpStgGlobals が指すサービス プロバイダーとの通信を保護するためのセッション キーを格納するバイト配列へのポインターです。このパラメーターは入力メッセージ認証コードに含める必要があり、暗号化されている必要があります。
dwSessionKeyLenDWORDinpbSPSessionKey が指すバイト配列の長さです。このパラメーターは、入力メッセージ認証コードに含める必要があります。
pStgGlobalsIMDSPStorageGlobals*inoptionalファイルの転送元または転送先となるメディアまたはデバイスのルート ストレージ上の IWMDMStorageGlobals インターフェイスへのポインターです。
ppRightsWMDMRIGHTS**outこのオブジェクトの権利情報を格納する WMDMRIGHTS 構造体の配列へのポインターです。この配列はこのメソッドによって割り当てられるため、CoTaskMemFree を使用して解放する必要があります。このパラメーターは、出力メッセージ認証コードに含まれます。
pnRightsCountDWORD*outppRights 配列内の WMDMRIGHTS 構造体の数です。このパラメーターは、出力メッセージ認証コードに含まれます。
abMacBYTE*inoutこのメソッドのパラメーター データに対するメッセージ認証コードを格納する 8 バイトの配列です。(WMDM_MAC_LENGTH は 8 として定義されています。)

戻り値

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

戻り値 説明
WMDM_E_CALL_OUT_OF_SEQUENCE
このメソッドが正しい順序で呼び出されませんでした。先に GetDataDemands、次に ExamineData を、この順序で呼び出す必要があります。
WMDM_E_MAC_CHECK_FAILED
メッセージ認証コードが無効です。
WMDM_E_NORIGHTS
呼び出し元は、要求された操作を実行するために必要な権利を持っていません。
E_INVALIDARG
パラメーターが無効であるか、NULL ポインターです。
E_FAIL
原因不明のエラーが発生しました。

解説(Remarks)

このメソッドは、GetDataDemandsExamineData の順に呼び出しが行われるまで呼び出してはなりません。

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