IMDSPStorage
COM公式ドキュメント
IMDSPStorage インターフェイスは、デバイス上のストレージメディアとのインスタンス単位の関連付けを提供します。
メソッド 10
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
SetAttributes メソッドは、ストレージオブジェクトの属性を設定します。
| dwAttributes | DWORD | in | IWMDMStorage::SetAttributes メソッドで定義されている、設定する属性を格納した DWORD。 |
| pFormat | WAVEFORMATEX* | inoptional | オブジェクトの属性情報を格納する _WAVEFORMATEX 構造体へのポインター。このパラメーターは省略可能で、ファイルがオーディオでない場合は無視されます。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。
- 標準の COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
GetAttributes が返す属性の多く(IWMDMStorage::GetAttributes の属性表に記載されているもの)は設定できないため、IWMDMStorage::SetAttributes の属性表には記載されていません。
このメソッドは省略可能です。詳細については、Mandatory and Optional Interfaces を参照してください。
GetStorageGlobals メソッドは、ストレージメディアに関するグローバル情報へアクセスするための IMDSPStorageGlobals インターフェイスを取得します。
| ppStorageGlobals | IMDSPStorageGlobals** | out | ストレージメディアに関するグローバル情報へのアクセスを提供する IMDSPStorageGlobals インターフェイスへのポインター。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。
- 標準の COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
IMDSPStorageGlobals インターフェイスは、グローバルビューの取得元となる IMDSPStorage インターフェイスの入れ子のレベルに関係なく、メディアに関するグローバル情報へアクセスするためのメソッドを提供します。IMDSPStorage のどのインスタンスからでも IMDSPStorageGlobals インターフェイスを取得できます。
このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはいけません。詳細については、Mandatory and Optional Interfaces を参照してください。
GetAttributes メソッドは、このストレージオブジェクトの属性を取得します。
| pdwAttributes | DWORD* | out | IWMDMStorage::GetAttributes メソッドで定義されている属性を格納する DWORD へのポインター。 |
| pFormat | WAVEFORMATEX* | inoutoptional | オブジェクトの属性情報が格納される _WAVEFORMATEX 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。
- 標準の COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
属性の評価は、メディアデバイスの内容を公開する際の重要な手順です。デバイスによっては、ストレージメディア上でのデータの階層的な格納をサポートしていない場合があります。GetAttributes メソッドを使用すると、アプリケーションはオブジェクトの属性を通じてファイルシステムの構造を調べ、そのサポート状況と形式を判断できます。
たとえば、最上位の IMDSPStorage インターフェイスの属性はストレージメディアを示し、IMDSPEnumStorage がそのメディアの内容を公開します。.mp3 ファイルの場合、属性はファイルであることを示し、その種類は属性とファイル名の両方をさらに調べることで判別できます。階層構造を持つメディアでは、属性がディレクトリであることを示すことがあり、その内容は IMDSPStorage::EnumStorage で公開できます。
_WAVEFORMATEX パラメーターは省略可能です。オーディオファイルに対して有効な _WAVEFORMATEX ポインターを渡すと、GetAttributes はその構造体に説明情報を返します。ただし、ファイルがオーディオでない場合、_WAVEFORMATEX パラメーターは無視されます。
このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはいけません。詳細については、Mandatory and Optional Interfaces を参照してください。
GetName メソッドは、ストレージオブジェクトの表示名を取得します。
| pwszName | LPWSTR | out | オブジェクト名を格納する、null で終わるワイド文字(Unicode)文字列へのポインター。 |
| nMaxChars | DWORD | in | 名前文字列にコピーできる最大文字数を示す整数。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。
- 標準の COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
オブジェクトの表示名は、パス情報を含まないファイル名です。階層構造を持つメディアでは、表示名を上位の IMDSPStorage インターフェイスのインスタンスの名前と連結して、完全なパス付きの名前を作成します。
LPWSTR 文字列型は 16 ビットの Unicode 文字列であり、バイトサイズの文字は受け付けません。
このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはいけません。詳細については、Mandatory and Optional Interfaces を参照してください。
GetDate メソッドは、ストレージオブジェクト(ファイルまたはフォルダー)が最後に変更された日付を取得します。
| pDateTimeUTC | WMDMDATETIME* | out | ファイルまたはフォルダーが最後に変更された日付を格納する WMDMDATETIME 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。
- 標準の COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
時刻は協定世界時 (UTC) で指定されます。
このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはいけません。詳細については、Mandatory and Optional Interfaces を参照してください。
GetSize メソッドは、ストレージオブジェクトのサイズをバイト単位で取得します。
| pdwSizeLow | DWORD* | out | ストレージオブジェクトのサイズの下位部分を格納する DWORD へのポインター。 |
| pdwSizeHigh | DWORD* | out | ストレージオブジェクトのサイズの上位部分を格納する DWORD へのポインター。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。
- 標準の COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
オブジェクトのサイズはバイト単位で報告されます。フォルダーオブジェクトの場合、サイズは 0 です。
このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはいけません。詳細については、Mandatory and Optional Interfaces を参照してください。
GetRights メソッドは、オブジェクトの権利情報を取得します。
| ppRights | WMDMRIGHTS** | out | ストレージオブジェクトの権利情報を格納する WMDMRIGHTS 構造体の配列へのポインター。このパラメーターは出力メッセージ認証コードに含まれます。 |
| pnRightsCount | DWORD* | out | ppRights 配列に含まれる WMDMRIGHTS 構造体の数へのポインター。このパラメーターは出力メッセージ認証コードに含まれます。 |
| abMac | BYTE* | inout | このメソッドのパラメーターデータに対するメッセージ認証コードを格納する 8 バイトの配列。(WMDM_MAC_LENGTH は 8 として定義されています。) |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。
- 標準の COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
オブジェクトの権利は、メディアコンテンツの使用許諾を表します。たとえば、WMDMRIGHTS 構造体には、ファイルを再生できる回数や再生できるユーザーに関する情報を格納できます。
ppRights 配列はこのメソッドによって割り当てられるため、アプリケーションは標準の Win32 関数である CoTaskMemFree を使用して解放する必要があります。
このメソッドは省略可能です。詳細については、Mandatory and Optional Interfaces を参照してください。
CreateStorage メソッドは、新しいストレージを作成し、新しく作成されたストレージの IMDSPStorage インターフェイスへのポインターを返します。
| dwAttributes | DWORD | in | 新しいストレージの属性を格納した DWORD。次の表に、使用できるストレージ属性を示します。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
| pFormat | WAVEFORMATEX* | inoptional | オブジェクトがオーディオファイルである場合に、そのオブジェクトに関する情報を格納する _WAVEFORMATEX 構造体へのポインター。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| pwszName | LPWSTR | in | 新しいストレージの名前を格納する、null で終わるワイド文字文字列へのポインター。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| ppNewStorage | IMDSPStorage** | out | 新しく作成されたストレージの IMDSPStorage インターフェイスを受け取る、IMDSPStorage ポインターへのポインター。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。
- 標準の COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
WMDM_FILE_ATTR_FOLDER 属性と WMDM_FILE_ATTR_FILE 属性の両方が設定されている場合、フォルダー属性がファイル属性より優先され、新しいストレージはフォルダーとして作成されます。
クライアントが指定できるのは、WMDM_STORAGECONTROL_INSERTBEFORE、WMDM_STORAGECONTROL_INSERTAFTER、WMDM_STORAGECONTROL_INSERTINTO のいずれか 1 つだけです。
新しいストレージは同じレベルに作成することも、現在のストレージがフォルダーであれば、その中に挿入することもできます。これは dwAttributes パラメーターの値で制御します。WMDM_STORAGECONTROL_INSERTBEFORE または WMDM_STORAGECONTROL_INSERTAFTER を指定した場合、新しいストレージは現在のストレージと同じレベルに作成されます。WMDM_STORAGECONTROL_INSERTINTO を指定した場合、新しいストレージは現在のストレージ内に挿入されます。
WMDM_STORAGECONTROL_INSERTBEFORE と WMDM_STORAGECONTROL_INSERAFTER は、ファイルシステム上でのコンテンツの順序付けを前提としています。ファイルシステムが順序付けをサポートしていない場合(FAT32 など)、どちらのフラグも、新しいストレージを現在のストレージと同じレベルに挿入するという同一の効果になります。現在のストレージがストレージメディアのルートを表しており、これら 2 つのフラグのいずれかが指定された場合、操作は失敗します。
WMDM_STORAGECONTROL_INSERTINTO は、現在のストレージがフォルダーである場合にのみ有効です。現在のストレージがファイルであるときにこのフラグを指定すると、操作は失敗します。
EnumStorage メソッドは、デバイス上の個々のストレージメディアを列挙するために IMDSPEnumStorage インターフェイスにアクセスします。
| ppEnumStorage | IMDSPEnumStorage** | out | IMDSPEnumStorage インターフェイスへのポインター。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。
- 標準の COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
返される IMDSPEnumStorage インターフェイスは、その IMDSPStorage が対応するストレージ内に入れ子になっているストレージを列挙します。したがって、階層構造内のすべてのストレージオブジェクトを再帰的に取得できます。
このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはいけません。詳細については、Mandatory and Optional Interfaces を参照してください。
SendOpaqueCommands メソッドは、Windows Media Device Manager を介してコマンドを送信します。Windows Media Device Manager はそのコマンドに対して何も処理を行わず、デバイスへそのまま渡します。
| pCommand | OPAQUECOMMAND* | inout | コマンドの実行に必要な情報を格納する OPAQUECOMMAND 構造体へのポインター。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次の種類のエラーコードのいずれかを返す可能性があります。
- 標準の COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
このメソッドは、Windows Media Device Manager に影響を与えず、変更されずにそのまま渡されるデバイスコマンドで使用します。
このメソッドは省略可能です。詳細については、Mandatory and Optional Interfaces を参照してください。
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 指定が可能。#define global IID_IMDSPStorage "{1DCB3A16-33ED-11D3-8470-00C04F79DBC0}" #usecom global IMDSPStorage IID_IMDSPStorage "{}" #comfunc global IMDSPStorage_SetAttributes 3 int,sptr #comfunc global IMDSPStorage_GetStorageGlobals 4 sptr #comfunc global IMDSPStorage_GetAttributes 5 sptr,sptr #comfunc global IMDSPStorage_GetName 6 sptr,int #comfunc global IMDSPStorage_GetDate 7 sptr #comfunc global IMDSPStorage_GetSize 8 sptr,sptr #comfunc global IMDSPStorage_GetRights 9 sptr,sptr,sptr #comfunc global IMDSPStorage_CreateStorage 10 int,sptr,wstr,sptr #comfunc global IMDSPStorage_EnumStorage 11 sptr #comfunc global IMDSPStorage_SendOpaqueCommand 12 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。