Compartir a través de


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

El método Next recupera un puntero al siguiente almacenamiento relacionado.

Sintaxis

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

Parámetros

[in] celt

Número de almacenamientos solicitados.

[out] ppStorage

Puntero a la matriz asignada por el autor de la llamada de punteros de interfaz IWMDMStorage . El tamaño de esta matriz debe ser IWMDMStorage *[celt]. El autor de la llamada debe liberar estas interfaces cuando haya terminado con ellas. Para evitar asignar una matriz completa, simplemente pase la dirección de un puntero a una interfaz IWMDMStorage , como se muestra en Comentarios.

[out] pceltFetched

Número de almacenamientos enumerados.

Valor devuelto

El método devuelve un valor HRESULT. Todos los métodos de interfaz de Windows Media Administrador de dispositivos pueden devolver cualquiera de las siguientes clases de códigos de error:

  • Códigos de error COM estándar
  • Códigos de error de Windows convertidos en valores HRESULT
  • Códigos de error de windows Media Administrador de dispositivos
Para obtener una lista extensa de posibles códigos de error, consulte Códigos de error.

Comentarios

Windows Media Administrador de dispositivos delega la enumeración de almacenamiento al proveedor de servicios correspondiente. Para obtener información sobre la enumeración de almacenamiento del proveedor de servicios, consulte la interfaz IMDSPEnumStorage .

Es posible que el enumerador de almacenamiento no refleje el efecto de la inserción y eliminación de medios. En ese caso, la aplicación debe obtener un nuevo objeto enumerador de almacenamiento llamando a IWMDMDevice::EnumStorage para obtener la lista actualizada. Si solo desea recuperar una sola interfaz a la vez, no es necesario asignar una matriz para este método, como se muestra en el código siguiente.

Ejemplos

Las dos funciones de C++ siguientes exploran de forma recursiva un dispositivo. La primera es una función de inicio que obtiene la interfaz IWMDMEnumStorage del almacenamiento del dispositivo raíz. Pasa esto a la función recursiva que examina todas las funciones anidadas.


// 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 Value
Plataforma de destino Windows
Encabezado mswmdm.h
Library Mssachlp.lib

Consulte también

Exploración de un dispositivo

IWMDMDevice::EnumStorage

Interfaz IWMDMEnumStorage