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

IMDSPStorage

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

公式ドキュメント

IMDSPStorage インターフェイスは、デバイス上のストレージメディアとのインスタンス単位の関連付けを提供します。

メソッド 10

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

vtbl 3 HRESULT SetAttributes(DWORD dwAttributes, WAVEFORMATEX* pFormat)

SetAttributes メソッドは、ストレージオブジェクトの属性を設定します。

dwAttributesDWORDinIWMDMStorage::SetAttributes メソッドで定義されている、設定する属性を格納した DWORD
pFormatWAVEFORMATEX*inoptionalオブジェクトの属性情報を格納する _WAVEFORMATEX 構造体へのポインター。このパラメーターは省略可能で、ファイルがオーディオでない場合は無視されます。

戻り値

このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。

発生しうるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

GetAttributes が返す属性の多く(IWMDMStorage::GetAttributes の属性表に記載されているもの)は設定できないため、IWMDMStorage::SetAttributes の属性表には記載されていません。

このメソッドは省略可能です。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 4 HRESULT GetStorageGlobals(IMDSPStorageGlobals** ppStorageGlobals)

GetStorageGlobals メソッドは、ストレージメディアに関するグローバル情報へアクセスするための IMDSPStorageGlobals インターフェイスを取得します。

ppStorageGlobalsIMDSPStorageGlobals**outストレージメディアに関するグローバル情報へのアクセスを提供する IMDSPStorageGlobals インターフェイスへのポインター。

戻り値

このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。

発生しうるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

IMDSPStorageGlobals インターフェイスは、グローバルビューの取得元となる IMDSPStorage インターフェイスの入れ子のレベルに関係なく、メディアに関するグローバル情報へアクセスするためのメソッドを提供します。IMDSPStorage のどのインスタンスからでも IMDSPStorageGlobals インターフェイスを取得できます。

このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTEDE_NOTIMPL を返してはいけません。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 5 HRESULT GetAttributes(DWORD* pdwAttributes, WAVEFORMATEX* pFormat)

GetAttributes メソッドは、このストレージオブジェクトの属性を取得します。

pdwAttributesDWORD*outIWMDMStorage::GetAttributes メソッドで定義されている属性を格納する DWORD へのポインター。
pFormatWAVEFORMATEX*inoutoptionalオブジェクトの属性情報が格納される _WAVEFORMATEX 構造体へのポインター。

戻り値

このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。

発生しうるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

属性の評価は、メディアデバイスの内容を公開する際の重要な手順です。デバイスによっては、ストレージメディア上でのデータの階層的な格納をサポートしていない場合があります。GetAttributes メソッドを使用すると、アプリケーションはオブジェクトの属性を通じてファイルシステムの構造を調べ、そのサポート状況と形式を判断できます。

たとえば、最上位の IMDSPStorage インターフェイスの属性はストレージメディアを示し、IMDSPEnumStorage がそのメディアの内容を公開します。.mp3 ファイルの場合、属性はファイルであることを示し、その種類は属性とファイル名の両方をさらに調べることで判別できます。階層構造を持つメディアでは、属性がディレクトリであることを示すことがあり、その内容は IMDSPStorage::EnumStorage で公開できます。

_WAVEFORMATEX パラメーターは省略可能です。オーディオファイルに対して有効な _WAVEFORMATEX ポインターを渡すと、GetAttributes はその構造体に説明情報を返します。ただし、ファイルがオーディオでない場合、_WAVEFORMATEX パラメーターは無視されます。

このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTEDE_NOTIMPL を返してはいけません。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 6 HRESULT GetName(LPWSTR pwszName, DWORD nMaxChars)

GetName メソッドは、ストレージオブジェクトの表示名を取得します。

pwszNameLPWSTRoutオブジェクト名を格納する、null で終わるワイド文字(Unicode)文字列へのポインター。
nMaxCharsDWORDin名前文字列にコピーできる最大文字数を示す整数。

戻り値

このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。

発生しうるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

オブジェクトの表示名は、パス情報を含まないファイル名です。階層構造を持つメディアでは、表示名を上位の IMDSPStorage インターフェイスのインスタンスの名前と連結して、完全なパス付きの名前を作成します。

LPWSTR 文字列型は 16 ビットの Unicode 文字列であり、バイトサイズの文字は受け付けません。

このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTEDE_NOTIMPL を返してはいけません。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 7 HRESULT GetDate(WMDMDATETIME* pDateTimeUTC)

GetDate メソッドは、ストレージオブジェクト(ファイルまたはフォルダー)が最後に変更された日付を取得します。

pDateTimeUTCWMDMDATETIME*outファイルまたはフォルダーが最後に変更された日付を格納する WMDMDATETIME 構造体へのポインター。

戻り値

このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。

発生しうるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

時刻は協定世界時 (UTC) で指定されます。

このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTEDE_NOTIMPL を返してはいけません。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 8 HRESULT GetSize(DWORD* pdwSizeLow, DWORD* pdwSizeHigh)

GetSize メソッドは、ストレージオブジェクトのサイズをバイト単位で取得します。

pdwSizeLowDWORD*outストレージオブジェクトのサイズの下位部分を格納する DWORD へのポインター。
pdwSizeHighDWORD*outストレージオブジェクトのサイズの上位部分を格納する DWORD へのポインター。

戻り値

このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。

発生しうるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

オブジェクトのサイズはバイト単位で報告されます。フォルダーオブジェクトの場合、サイズは 0 です。

このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTEDE_NOTIMPL を返してはいけません。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 9 HRESULT GetRights(WMDMRIGHTS** ppRights, DWORD* pnRightsCount, BYTE* abMac)

GetRights メソッドは、オブジェクトの権利情報を取得します。

ppRightsWMDMRIGHTS**outストレージオブジェクトの権利情報を格納する WMDMRIGHTS 構造体の配列へのポインター。このパラメーターは出力メッセージ認証コードに含まれます。
pnRightsCountDWORD*outppRights 配列に含まれる WMDMRIGHTS 構造体の数へのポインター。このパラメーターは出力メッセージ認証コードに含まれます。
abMacBYTE*inoutこのメソッドのパラメーターデータに対するメッセージ認証コードを格納する 8 バイトの配列。(WMDM_MAC_LENGTH は 8 として定義されています。)

戻り値

このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。

発生しうるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

オブジェクトの権利は、メディアコンテンツの使用許諾を表します。たとえば、WMDMRIGHTS 構造体には、ファイルを再生できる回数や再生できるユーザーに関する情報を格納できます。

ppRights 配列はこのメソッドによって割り当てられるため、アプリケーションは標準の Win32 関数である CoTaskMemFree を使用して解放する必要があります。

このメソッドは省略可能です。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 10 HRESULT CreateStorage(DWORD dwAttributes, WAVEFORMATEX* pFormat, LPWSTR pwszName, IMDSPStorage** ppNewStorage)

CreateStorage メソッドは、新しいストレージを作成し、新しく作成されたストレージの IMDSPStorage インターフェイスへのポインターを返します。

dwAttributesDWORDin

新しいストレージの属性を格納した DWORD。次の表に、使用できるストレージ属性を示します。

属性 説明
WMDM_STORAGECONTROL_INSERTBEFORE 新しいストレージオブジェクトは、対象オブジェクトの前に作成されます。
WMDM_STORAGECONTROL_INSERTAFTER 新しいストレージオブジェクトは、対象オブジェクトの後に作成されます。
WMDM_STORAGECONTROL_INSERTINTO 新しいストレージオブジェクトは、対象オブジェクトのフォルダー内に作成されます。
WMDM_STORAGECONTROL_OVERWRITE 同じ名前のストレージが既に存在する場合、それは破棄され、新しいストレージが作成されます。
WMDM_STORAGE_ATTR_FILESYSTEM このオブジェクトは最上位のストレージメディアです(ストレージカードやその他のオンボードストレージなど)。
WMDM_STORAGE_ATTR_REMOVABLE このストレージメディアはリムーバブルです。
WMDM_STORAGE_ATTR_CANEDITMETADATA このストレージはメタデータを編集できます。
WMDM_STORAGE_ATTR_FOLDERS このストレージメディアはフォルダーとファイル階層をサポートします。
WMDM_FILE_ATTR_FOLDER これはストレージメディア上のフォルダーです。
WMDM_FILE_ATTR_LINK これは複数のファイル間の関連付けを作成するリンクです。
WMDM_FILE_ATTR_FILE これはストレージメディア上のファイルです。
WMDM_FILE_ATTR_AUDIO このファイルはオーディオデータです。
WMDM_FILE_ATTR_DATA このファイルはオーディオ以外のデータです。
WMDM_FILE_ATTR_CANPLAY このオーディオファイルはデバイスで再生できます。
WMDM_FILE_ATTR_CANDELETE このファイルは削除できます。
WMDM_FILE_ATTR_CANMOVE このファイルまたはフォルダーは、ストレージメディア上で移動できます。
WMDM_FILE_ATTR_CANRENAME このファイルまたはフォルダーは名前を変更できます。
WMDM_FILE_ATTR_CANREAD このファイルはホストコンピューターから読み取ることができます。
WMDM_FILE_ATTR_MUSIC このオーディオファイルは音楽です。
WMDM_FILE_ATTR_VIDEO このファイルにはビデオデータが含まれます。
WMDM_FILE_ATTR_HIDDEN このファイルはファイルシステム上で隠しファイルです
WMDM_FILE_ATTR_SYSTEM これはシステムファイルです
WMDM_FILE_ATTR_READONLY これは読み取り専用ファイルです。
WMDM_STORAGE_IS_DEFAULT このストレージは、新しいメディアを配置する既定のストレージです。
WMDM_STORAGE_CONTAINS_DEFAULT このストレージは、新しいメディアを配置する既定のストレージを含んでいます。
pFormatWAVEFORMATEX*inoptionalオブジェクトがオーディオファイルである場合に、そのオブジェクトに関する情報を格納する _WAVEFORMATEX 構造体へのポインター。
pwszNameLPWSTRin新しいストレージの名前を格納する、null で終わるワイド文字文字列へのポインター。
ppNewStorageIMDSPStorage**out新しく作成されたストレージの IMDSPStorage インターフェイスを受け取る、IMDSPStorage ポインターへのポインター。

戻り値

このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。

発生しうるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

WMDM_FILE_ATTR_FOLDER 属性と WMDM_FILE_ATTR_FILE 属性の両方が設定されている場合、フォルダー属性がファイル属性より優先され、新しいストレージはフォルダーとして作成されます。

クライアントが指定できるのは、WMDM_STORAGECONTROL_INSERTBEFOREWMDM_STORAGECONTROL_INSERTAFTERWMDM_STORAGECONTROL_INSERTINTO のいずれか 1 つだけです。

新しいストレージは同じレベルに作成することも、現在のストレージがフォルダーであれば、その中に挿入することもできます。これは dwAttributes パラメーターの値で制御します。WMDM_STORAGECONTROL_INSERTBEFORE または WMDM_STORAGECONTROL_INSERTAFTER を指定した場合、新しいストレージは現在のストレージと同じレベルに作成されます。WMDM_STORAGECONTROL_INSERTINTO を指定した場合、新しいストレージは現在のストレージ内に挿入されます。

WMDM_STORAGECONTROL_INSERTBEFORE と WMDM_STORAGECONTROL_INSERAFTER は、ファイルシステム上でのコンテンツの順序付けを前提としています。ファイルシステムが順序付けをサポートしていない場合(FAT32 など)、どちらのフラグも、新しいストレージを現在のストレージと同じレベルに挿入するという同一の効果になります。現在のストレージがストレージメディアのルートを表しており、これら 2 つのフラグのいずれかが指定された場合、操作は失敗します。

WMDM_STORAGECONTROL_INSERTINTO は、現在のストレージがフォルダーである場合にのみ有効です。現在のストレージがファイルであるときにこのフラグを指定すると、操作は失敗します。

vtbl 11 HRESULT EnumStorage(IMDSPEnumStorage** ppEnumStorage)

EnumStorage メソッドは、デバイス上の個々のストレージメディアを列挙するために IMDSPEnumStorage インターフェイスにアクセスします。

ppEnumStorageIMDSPEnumStorage**outIMDSPEnumStorage インターフェイスへのポインター。

戻り値

このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。

発生しうるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

返される IMDSPEnumStorage インターフェイスは、その IMDSPStorage が対応するストレージ内に入れ子になっているストレージを列挙します。したがって、階層構造内のすべてのストレージオブジェクトを再帰的に取得できます。

このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTEDE_NOTIMPL を返してはいけません。詳細については、Mandatory and Optional Interfaces を参照してください。

vtbl 12 HRESULT SendOpaqueCommand(OPAQUECOMMAND* pCommand)

SendOpaqueCommands メソッドは、Windows Media Device Manager を介してコマンドを送信します。Windows Media Device Manager はそのコマンドに対して何も処理を行わず、デバイスへそのまま渡します。

pCommandOPAQUECOMMAND*inoutコマンドの実行に必要な情報を格納する OPAQUECOMMAND 構造体へのポインター。

戻り値

このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。

発生しうるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

このメソッドは、Windows Media Device Manager に影響を与えず、変更されずにそのまま渡されるデバイスコマンドで使用します。

このメソッドは省略可能です。詳細については、Mandatory and Optional Interfaces を参照してください。

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