共用方式為


IWMDMEnumStorage::Next 方法 (mswmdm.h)

Next 方法會擷取下一個同層級記憶體的指標。

語法

HRESULT Next(
  [in]  ULONG        celt,
  [out] IWMDMStorage **ppStorage,
  [out] ULONG        *pceltFetched
);

參數

[in] celt

要求的記憶體數目。

[out] ppStorage

呼叫端配置的 IWMDMStorage 介面指標數位指標的指標。 此陣列的大小必須是 IWMDMStorage *[celt]。 呼叫端必須在使用這些介面時釋放這些介面。 若要避免配置整個陣列,只要傳入 IWMDMStorage 介面指標的位址,如所示。

[out] pceltFetched

列舉的記憶體數目。

傳回值

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

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

備註

Windows Media 裝置管理員 將記憶體列舉委派給對應的服務提供者。 如需服務提供者記憶體列舉的詳細資訊,請參閱 IMDSPEnumStorage 介面。

儲存列舉值可能不會反映媒體插入和移除的效果。 在此情況下,應用程式應該藉由呼叫 IWMDMDevice::EnumStorage 來取得新的記憶體列舉值物件,以取得重新整理的清單。 如果您一次只想要擷取單一介面,就不需要配置這個方法的陣列,如下列程式代碼所示。

範例

下列兩個 C++ 函式會以遞歸方式探索裝置。 第一個函式是一個啟動函式,可取得根裝置記憶體的 IWMDMEnumStorage 介面。 它會將此傳遞至遞歸函式,以檢查所有巢狀函式。


// Kickoff function to explore a device.
void ExploreDevice(IWMDMDevice* pDevice)
{
    HRESULT hr = S_OK;

    // Get a root enumerator.
    CComPtr<IWMDMEnumStorage> pEnumStorage;
    hr = pDevice->EnumStorage(&pEnumStorage);
    RecursiveExploreStorage(pEnumStorage);

    HANDLE_HR(hr, "Got a root storage in ExploreDevice.","Couldn't get a root storage in ExploreDevice.");

e_Exit:
    return;
}

void RecursiveExploreStorage(IWMDMEnumStorage* pEnumStorage)
{
    HRESULT hr = S_OK;
    CComPtr<IWMDMStorage> pStorage;
    ULONG numRetrieved = 0;
    // Loop through all storages in the current storage.
    // We don't need to allocate an array to retrieve one 
    // interface at a time.
    while(pEnumStorage->Next(1, &pStorage, &numRetrieved) == S_OK && numRetrieved == 1)
    {
        // Get the name of the object. The first time this is called on a 
        // device, it will retrieve '\' as the root folder name.
        const UINT MAX_LEN = 255;
        WCHAR name[MAX_LEN];
        hr = pStorage->GetName((LPWSTR)&name, MAX_LEN);
        // TODO: Display the storage name.

    
        // Get metadata for the storage.
        if (SUCCEEDED(hr))
            GetMetadata(pStorage);

        // Find out something about the item.
        DWORD attributes = 0;
        _WAVEFORMATEX audioFormat;
        hr = pStorage->GetAttributes(&attributes, &audioFormat);
        HANDLE_HR(hr, "Got storage attributes in RecursivelyExploreStorage.","Couldn't get storage attributes in RecursivelyExploreStorage.");

        // If this is a folder, recurse into it.
        if (attributes & WMDM_FILE_ATTR_FILE)
            // TODO: Display a message indicating that this is a file.
        if (attributes & WMDM_FILE_ATTR_FOLDER)
        {
            // TODO: Display a message indicating that this is a folder.
            CComPtr<IWMDMEnumStorage> pEnumSubStorage;
            hr = pStorage->EnumStorage(&pEnumSubStorage);
            RecursiveExploreStorage(pEnumSubStorage);
        }

        // Some other useful attributes to check include:
        // WMDM_FILE_ATTR_CANDELETE and WMDM_FILE_ATTR_CANPLAY and others to determine what can be done with a storage.
        // WMDM_FILE_ATTR_HIDDEN and other attributes to determine display characteristics,
        // WMDM_STORAGE_IS_DEFAULT to see if this is the default save location for new files.
        pStorage.Release();
    } // Get the next storage pointer.

e_Exit:
    return;
}

規格需求

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

另請參閱

探索裝置

IWMDMDevice::EnumStorage

IWMDMEnumStorage 介面