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

IWMDMStorageGlobals

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

公式ドキュメント

IWMDMStorageGlobals インターフェースは、デバイス上のストレージメディア (フラッシュ ROM カードなど) に関するグローバルな情報を取得するためのメソッドを提供します。

メソッド 7

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

vtbl 3 HRESULT GetCapabilities(DWORD* pdwCapabilities)

GetCapabilities メソッドは、ルートストレージメディアの機能を取得します。

pdwCapabilitiesDWORD*out

次の値のうち 0 個以上をビットごとの OR で組み合わせた値を格納する DWORD へのポインターです。

機能コード 説明
WMDM_STORAGECAP_FOLDERSINROOT メディアは、ストレージのルートにフォルダーを配置することをサポートします。
WMDM_STORAGECAP_FILESINROOT メディアは、ストレージのルートにファイルを配置することをサポートします。
WMDM_STORAGECAP_FOLDERSINFOLDERS メディアは、入れ子になったフォルダーをサポートします。
WMDM_STORAGECAP_FILESINFOLDERS メディアは、フォルダー内のファイルをサポートします。
WMDM_STORAGECAP_FOLDERLIMITEXISTS メディアがサポートするフォルダーの形態ごとに、許可されるフォルダー数に任意の上限が存在します。
WMDM_STORAGECAP_FILELIMITEXISTS メディアがサポートするファイルの形態ごとに、許可されるファイル数に任意の上限が存在します。
WMDM_STORAGECAP_NOT_INITIALIZABLE メディアを初期化できません。最上位のストレージは既定でフォーマット可能です。

戻り値

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

返される可能性のあるエラーコードの詳細な一覧については、Error Codes を参照してください。
vtbl 4 HRESULT GetSerialNumber(WMDMID* pSerialNum, BYTE* abMac)

GetSerialNumber メソッドは、ストレージメディアを一意に識別するシリアル番号を取得します。

pSerialNumWMDMID*outシリアル番号の情報を指定する WMDMID 構造体へのポインターです。
abMacBYTE*inoutこのメソッドのパラメーターデータに対するメッセージ認証コードを指定するバイト配列です。このメモリは呼び出し元が割り当てて解放します。

戻り値

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

返される可能性のあるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

すべてのストレージメディアがシリアル番号をサポートしているわけではありませんが、Microsoft のデジタル著作権管理をサポートするにはシリアル番号が必要です。ストレージメディアが一意のシリアル番号を報告できない場合、Microsoft のデジタル著作権管理で保護されたコンテンツをそのストレージメディアに転送することはできません。この機能がサポートされているかどうかを判断するには、戻り値のコードを確認してください。

次の C++ のコードは、ルートストレージオブジェクトのシリアル番号を取得し、MAC を検証します。


    hr = m_pStorageGlobals->GetSerialNumber(&m_SerialNumber, (BYTE*)abMAC);
    if (SUCCEEDED(hr))
    {
        // CSecureChannelClient のメンバーを使用して MAC を検証します。
        m_pSAC->MACInit(&hMAC);
        m_pSAC->MACUpdate(hMAC, (BYTE*)(&m_SerialNumber), sizeof(m_SerialNumber));
        m_pSAC->MACFinal(hMAC, (BYTE*)abMACVerify);
        if (memcmp(abMACVerify, abMAC, sizeof(abMAC)) != 0)
        {
            hr = E_FAIL;
        }
    }
vtbl 5 HRESULT GetTotalSize(DWORD* pdwTotalSizeLow, DWORD* pdwTotalSizeHigh)

GetTotalSize メソッドは、IWMDMStorageGlobals インターフェースに関連付けられたストレージメディアの合計サイズをバイト単位で取得します。

pdwTotalSizeLowDWORD*outメディアの合計サイズの下位の値を受け取る DWORD へのポインターです。
pdwTotalSizeHighDWORD*outメディアの合計サイズの上位の値を受け取る DWORD へのポインターです。

戻り値

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

返される可能性のあるエラーコードの詳細な一覧については、Error Codes を参照してください。
vtbl 6 HRESULT GetTotalFree(DWORD* pdwFreeLow, DWORD* pdwFreeHigh)

GetTotalFree メソッドは、ストレージメディア上の空き容量の合計をバイト単位で取得します。

pdwFreeLowDWORD*out空き容量の値の下位部分を受け取る DWORD へのポインターです。
pdwFreeHighDWORD*out空き容量の値の上位部分を受け取る DWORD へのポインターです。

戻り値

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

返される可能性のあるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

メディアがファイル管理のために使用しているストレージ容量を求めるには、GetTotalFree で取得した空きバイト数から、GetTotalBad で取得した不良バイト数を差し引きます。

vtbl 7 HRESULT GetTotalBad(DWORD* pdwBadLow, DWORD* pdwBadHigh)

GetTotalBad メソッドは、ストレージメディア上の使用できない領域の合計をバイト単位で取得します。(IWMDMStorageGlobals.GetTotalBad)

pdwBadLowDWORD*out使用できない領域の下位バイトを受け取る DWORD へのポインターです。
pdwBadHighDWORD*out使用できない領域の上位バイトを受け取る DWORD へのポインターです。

戻り値

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

返される可能性のあるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

メディアがファイル管理のために使用しているストレージ容量を求めるには、GetTotalFree で取得した空きバイト数から、GetTotalBad で取得した不良バイト数を差し引きます。

vtbl 8 HRESULT GetStatus(DWORD* pdwStatus)

GetStatus メソッドは、ストレージメディアの現在の状態を取得します。

pdwStatusDWORD*out

メソッドから制御が戻るときに状態情報を受け取る DWORD へのポインターです。pdwStatus パラメーターには次の値が返される場合があります。

状態 説明
WMDM_STATUS_READY メディアはアイドル状態または準備完了状態です。
WMDM_STATUS_BUSY 操作が進行中です。状態の値を評価して、進行中の操作を判断してください。
WMDM_STATUS_STORAGE_NOTPRESENT ストレージメディアが存在しません。複数のメディアをサポートするデバイスの場合、この値は IWMDMStorageGlobals インターフェースからのみ報告されます。
WMDM_STATUS_STORAGE_INITIALIZING デバイスは現在、デバイス上のストレージメディアのフォーマット処理を実行中です。
WMDM_STATUS_STORAGE_BROKEN ストレージメディアが破損しています。複数のメディアをサポートするデバイスの場合、この値は IWMDMStorageGlobals インターフェースからのみ報告されます。
WMDM_STATUS_STORAGE_NOTSUPPORTED ストレージメディアがデバイスでサポートされていません。複数のメディアをサポートするデバイスの場合、この値は IWMDMStorageGlobals インターフェースからのみ返されます。
WMDM_STATUS_STORAGE_UNFORMATTED ストレージメディアがフォーマットされていません。複数のメディアをサポートするデバイスの場合、この値は IWMDMStorageGlobals インターフェースからのみ報告されます。

戻り値

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

返される可能性のあるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

ストレージメディアを操作しようとする前に、必ずこのメソッドを呼び出す必要があります。他のインターフェースが進行中の操作を開始している場合、取得される状態値は WMDM_STATUS_BUSY になります。この呼び出しで取得した値を評価することで、進行中の操作が IWMDMStorageGlobals インターフェースから開始されたものかどうかを判断できます。

vtbl 9 HRESULT Initialize(DWORD fuMode, IWMDMProgress* pProgress)

Initialize メソッドは、ストレージメディアをフォーマットします。(IWMDMStorageGlobals.Initialize)

fuModeDWORDin

メディアの初期化に使用するモードです。次の 2 つのモードのうち、いずれか 1 つだけを指定します。両方のモードを指定した場合は、ブロックモードが使用されます。

モード 説明
WMDM_MODE_BLOCK 操作はブロックモード処理で実行されます。操作が完了するまで呼び出しから制御は戻りません。
WMDM_MODE_THREAD 操作はスレッドモード処理で実行されます。呼び出しはすぐに制御を返し、操作はバックグラウンドスレッドで実行されます。
pProgressIWMDMProgress*inoptionalフォーマット操作の進行状況を追跡するためにアプリケーションが実装した IWMDMProgress インターフェースへのポインターです。

戻り値

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

返される可能性のあるエラーコードの詳細な一覧については、Error Codes を参照してください。

解説(Remarks)

アプリケーションが WMDM_MODE_THREAD を使用し、pProgress パラメーターに null 以外の値を渡す場合、Windows Media Device Manager がこのオブジェクトに進行状況の通知を送信するため、アプリケーションは読み取り操作が完了するまで pProgress が属するオブジェクトが破棄されないようにする必要があります。このオブジェクトを破棄できるのは、End 通知を受け取った後だけです。これを怠るとアクセス違反が発生します。

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