Compartilhar via


Método IWMDMEnumStorage::Next (mswmdm.h)

O método Next recupera um ponteiro para o próximo armazenamento irmão.

Sintaxe

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

Parâmetros

[in] celt

Número de armazenamentos solicitados.

[out] ppStorage

Ponteiro para a matriz alocada pelo chamador de ponteiros de interface IWMDMStorage . O tamanho dessa matriz deve ser IWMDMStorage *[celt]. O chamador deve liberar essas interfaces quando terminar com elas. Para evitar alocar uma matriz inteira, basta passar o endereço de um ponteiro para uma interface IWMDMStorage , conforme mostrado em Comentários.

[out] pceltFetched

Número de armazenamentos enumerados.

Retornar valor

O método retorna um HRESULT. Todos os métodos de interface no Windows Media Gerenciador de Dispositivos podem retornar qualquer uma das seguintes classes de códigos de erro:

  • Códigos de erro COM padrão
  • Códigos de erro do Windows convertidos em valores HRESULT
  • Códigos de erro de Gerenciador de Dispositivos do Windows Media
Para obter uma ampla lista de possíveis códigos de erro, consulte Códigos de erro.

Comentários

O Windows Media Gerenciador de Dispositivos delega a enumeração de armazenamento ao provedor de serviços correspondente. Para obter informações sobre a enumeração de armazenamento do provedor de serviços, consulte a interface IMDSPEnumStorage .

O enumerador de armazenamento pode não refletir o efeito da inserção e remoção de mídia. Nesse caso, o aplicativo deve obter um novo objeto enumerador de armazenamento chamando IWMDMDevice::EnumStorage para obter a lista atualizada. Se você quiser recuperar apenas uma única interface por vez, não será necessário alocar uma matriz para esse método, conforme mostrado no código a seguir.

Exemplos

As duas funções C++ a seguir exploram recursivamente um dispositivo. A primeira é uma função inicial que obtém a interface IWMDMEnumStorage do armazenamento do dispositivo raiz. Ele passa isso para a função recursiva que examina todas as funções aninhadas.


// 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;
}

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho mswmdm.h
Biblioteca Mssachlp.lib

Confira também

Explorando um dispositivo

IWMDMDevice::EnumStorage

IWMDMEnumStorage Interface