共用方式為


IWMDMStorage2::GetStorage 方法 (mswmdm.h)

GetStorage 方法會直接從目前記憶體擷取子記憶體,而不需要列舉所有子系。

語法

HRESULT GetStorage(
  [in]  LPCWSTR      pszStorageName,
  [out] IWMDMStorage **ppStorage
);

參數

[in] pszStorageName

指定記憶體名稱之 Null 終止字串的指標。 這是 IWMDMStorage::GetName 所擷取的名稱。

[out] ppStorage

所擷取儲存物件的指標,如果沒有找到記憶體, 則為 NULL 。 呼叫端必須在完成此介面時釋放此介面。

傳回值

方法會傳回 HRESULT。 Windows Media 裝置管理員 中的所有介面方法都可以傳回下列任何一種錯誤碼類別:

  • 標準 COM 錯誤碼
  • 轉換成 HRESULT 值的 Windows 錯誤碼
  • Windows Media 裝置管理員 錯誤碼
如需可能錯誤碼的廣泛清單,請參閱 錯誤碼

備註

IWMDMStorage2::GetStorage 不支援通配符。 它不是遞歸的;也就是說,它只會尋找目前記憶體的立即子系記憶體。 若要尋找多個層級的記憶體,請嘗試 IWMDMDevice3::FindStorage

範例

下列 C++ 函式會以遞歸方式搜尋記憶體。 它會使用 GetStorage 來搜尋立即子系;如果找不到要求的記憶體,則會迴圈查看所有子系,然後以遞歸方式搜尋資料夾。


HRESULT myFindStorageRecursively(LPCWSTR storageName, IWMDMStorage* pCurrentStorage, IWMDMStorage** ppFoundStorage)
{
    HRESULT hr = S_OK;

    // Start with a quick check of all storages inside the storage.
    // If we found it, stop now and return.
    CComQIPtr<IWMDMStorage2> pStorage2(pCurrentStorage);
    hr = pStorage2->GetStorage(storageName, ppFoundStorage);
    if (*ppFoundStorage != NULL)
        return hr;

    //
    // Otherwise, enumerate through and dive into all child folders.
    //

    // First get enumerator.
    CComPtr<IWMDMEnumStorage> pEnumStorage;
    hr = pCurrentStorage->EnumStorage(&pEnumStorage);
    if (hr != S_OK && pEnumStorage != NULL)
        return hr;

    // Now enumerate all folders until found the right item, or out of folders.
    CComPtr<IWMDMStorage> pThisStorage;
    DWORD numRetrieved = 0;
    DWORD attr = 0;
    while(pEnumStorage->Next(1, &pThisStorage, &numRetrieved) == S_OK)
    {
        pThisStorage->GetAttributes(&attr, NULL);
        if (attr & WMDM_FILE_ATTR_FOLDER)
        {
            hr = myFindStorageRecursively(storageName, pThisStorage, ppFoundStorage);
            if (*ppFoundStorage != NULL)
                return hr;
        }
        pThisStorage.Release();
    }

    return hr;
}

規格需求

需求
目標平台 Windows
標頭 mswmdm.h
程式庫 Mssachlp.lib

另請參閱

IWMDMStorage2 介面