IMDSPStorageGlobals
COM公式ドキュメント
IMDSPStorageGlobals インターフェイスは IMDSPStorage インターフェイスから取得され、記憶メディアに関するグローバルな情報を取得するためのメソッドを提供します。これには空き容量やメディアのシリアル番号などが含まれます。
メソッド 9
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetCapabilities メソッドは、このインターフェイスのインスタンスが関連付けられている記憶メディアの機能を取得します。
| pdwCapabilities | DWORD* | out | 記憶メディアの機能を格納する DWORD へのポインター。 pdwCapabilities パラメーターには次のフラグが返される場合があります。
セキュリティ保護されたデバイスの実装では、メディアの権利 (rights) に関する機能を示す次のフラグも返される場合があります。
|
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
IMDSPObject インターフェイスを使用して記憶メディアでサポートされていない操作を実行しようとすると、エラーコードが返されます。GetCapabilities メソッドを呼び出すと、通常の状況下でその操作が成功すると期待できるかどうかを判断できます。
WMDM_STORAGECAP_FILELIMITEXISTS フラグまたは WMDM_STORAGECAP_FOLDERLIMITEXISTS フラグが true の場合、作成できるファイル数またはフォルダー数に任意の上限があります。これらの上限を超える IMDSPObject インターフェイス経由の操作は失敗します。
このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはなりません。詳細については、必須インターフェイスとオプションのインターフェイスを参照してください。
GetSerialNumber メソッドは、記憶メディアを一意に識別するシリアル番号を取得します。このメソッドは保護されたコンテンツを転送する場合には実装する必要がありますが、それ以外の場合は省略可能です。詳細については、「必須インターフェイスとオプションのインターフェイス」を参照してください。
| pSerialNum | WMDMID* | out | シリアル番号の情報を格納する WMDMID 構造体へのポインター。このパラメーターは出力のメッセージ認証コードに含まれます。 |
| abMac | BYTE* | inout | このメソッドのパラメーターデータに対するメッセージ認証コードを格納する 8 バイトの配列。(WMDM_MAC_LENGTH は 8 として定義されています。) |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
すべての記憶メディアがシリアル番号をサポートしているわけではありません。記憶メディアがこの機能をサポートしているかどうかを判断するため、戻り値のコードを必ず確認してください。記憶メディアが一意のシリアル番号の返却をサポートしていない場合、保護されたコンテンツをそのメディアに転送することはできません。対象のストレージがリムーバブルメディアである場合、返されるシリアル番号はストレージのシリアル番号でなければならず、デバイスのシリアル番号とは区別される必要があります。
GetTotalSize メソッドは、この IMDSPStorageGlobals インターフェイスに関連付けられているメディアの合計サイズをバイト単位で取得します。
| pdwTotalSizeLow | DWORD* | out | メディアの合計サイズの下位バイトを格納する DWORD へのポインター。 |
| pdwTotalSizeHigh | DWORD* | out | メディアの合計サイズの上位バイトを格納する DWORD へのポインター。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはなりません。詳細については、必須インターフェイスとオプションのインターフェイスを参照してください。
GetTotalFree メソッドは、記憶メディア上の合計空き容量をバイト単位で取得します。
| pdwFreeLow | DWORD* | out | 空き容量の下位バイトを格納する DWORD へのポインター。 |
| pdwFreeHigh | DWORD* | out | 空き容量の上位バイトを格納する DWORD へのポインター。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
メディアがファイル管理のために使用しているストレージ領域の量を求めるには、GetTotalFree で取得した空きバイト数から GetTotalBad で取得した不良バイト数を減算します。
このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはなりません。詳細については、必須インターフェイスとオプションのインターフェイスを参照してください。
GetTotalBad メソッドは、記憶メディア上で使用できない領域の合計量をバイト単位で取得します。(IMDSPStorageGlobals.GetTotalBad)
| pdwBadLow | DWORD* | out | 使用できない領域の下位バイトを格納する DWORD へのポインター。 |
| pdwBadHigh | DWORD* | out | 使用できない領域の上位バイトを格納する DWORD へのポインター。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
メディアがファイル管理のために使用しているストレージ領域の量を求めるには、GetTotalFree で取得した空きバイト数から GetTotalBad で取得した不良バイト数を減算します。
このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはなりません。詳細については、必須インターフェイスとオプションのインターフェイスを参照してください。
GetStatus メソッドは、記憶メディアの現在の状態を取得します。
| pdwStatus | DWORD* | out | 状態情報を格納する DWORD へのポインター。pdwStatus パラメーターには次の状態値が返される場合があります。
|
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
記憶メディアを操作する前に、必ずこのメソッドを呼び出す必要があります。他のインターフェイスが進行中の操作を開始している場合、返される状態値は WMDM_STATUS_BUSY になります。この呼び出しから返される値を評価することで、進行中の操作が IMDSPStorageGlobals インターフェイスから開始されたかどうかを判断できます。
このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはなりません。詳細については、必須インターフェイスとオプションのインターフェイスを参照してください。
Initialize メソッドは、記憶メディアをフォーマットします。(IMDSPStorageGlobals.Initialize)
| fuMode | DWORD | in | メディアの初期化に使用するモード。次の 2 つのモードのうち、いずれか 1 つのみを指定します。両方のモードを指定した場合はブロックモードが使用されます。
| ||||||
| pProgress | IWMDMProgress* | inoptional | フォーマット操作の進行状況を追跡するためにアプリケーションが実装する IWMDMProgress インターフェイスへのポインター。このパラメーターには NULL を指定できます。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
WMDM_MODE_BLOCK を指定した場合、Initialize はフォーマットが完了するまで戻りません。WMDM_MODE_THREAD を指定した場合、呼び出しはすぐに戻り、呼び出し元は IMDSPStorageGlobals::GetStatus メソッドを使用して初期化操作を追跡できます。
GetDevice メソッドは、このインターフェイスが関連付けられている記憶メディアがマウントされているデバイスへのポインターを取得します。
| ppDevice | IMDSPDevice** | out | IMDSPDevice インターフェイスで識別されるデバイスへのポインター。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはなりません。詳細については、必須インターフェイスとオプションのインターフェイスを参照してください。
GetRootStorage メソッドは、記憶メディアのルートストレージに対する IMDSPStorage インターフェイスへのポインターを取得します。
| ppRoot | IMDSPStorage** | out | ルートストレージを受け取る IMDSPStorage ポインターへのポインター。 |
戻り値
このメソッドは HRESULT を返します。Windows Media Device Manager のすべてのインターフェイスメソッドは、次のいずれかの種類のエラーコードを返す可能性があります。
- 標準的な COM エラーコード
- HRESULT 値に変換された Windows エラーコード
- Windows Media Device Manager のエラーコード
解説(Remarks)
このメソッドは実装する必要があります。WMDM_E_NOTSUPPORTED や E_NOTIMPL を返してはなりません。詳細については、必須インターフェイスとオプションのインターフェイスを参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMDSPStorageGlobals "{1DCB3A17-33ED-11D3-8470-00C04F79DBC0}" #usecom global IMDSPStorageGlobals IID_IMDSPStorageGlobals "{}" #comfunc global IMDSPStorageGlobals_GetCapabilities 3 var #comfunc global IMDSPStorageGlobals_GetSerialNumber 4 var,var #comfunc global IMDSPStorageGlobals_GetTotalSize 5 var,var #comfunc global IMDSPStorageGlobals_GetTotalFree 6 var,var #comfunc global IMDSPStorageGlobals_GetTotalBad 7 var,var #comfunc global IMDSPStorageGlobals_GetStatus 8 var #comfunc global IMDSPStorageGlobals_Initialize 9 int,sptr #comfunc global IMDSPStorageGlobals_GetDevice 10 sptr #comfunc global IMDSPStorageGlobals_GetRootStorage 11 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMDSPStorageGlobals "{1DCB3A17-33ED-11D3-8470-00C04F79DBC0}" #usecom global IMDSPStorageGlobals IID_IMDSPStorageGlobals "{}" #comfunc global IMDSPStorageGlobals_GetCapabilities 3 sptr #comfunc global IMDSPStorageGlobals_GetSerialNumber 4 sptr,sptr #comfunc global IMDSPStorageGlobals_GetTotalSize 5 sptr,sptr #comfunc global IMDSPStorageGlobals_GetTotalFree 6 sptr,sptr #comfunc global IMDSPStorageGlobals_GetTotalBad 7 sptr,sptr #comfunc global IMDSPStorageGlobals_GetStatus 8 sptr #comfunc global IMDSPStorageGlobals_Initialize 9 int,sptr #comfunc global IMDSPStorageGlobals_GetDevice 10 sptr #comfunc global IMDSPStorageGlobals_GetRootStorage 11 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。