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
Library Mssachlp.lib

另请参阅

IWMDMStorage2 接口