Condividi tramite


Metodo IWMDMEnumStorage::Next (mswmdm.h)

Il metodo Next recupera un puntatore alla successiva risorsa di archiviazione di pari livello.

Sintassi

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

Parametri

[in] celt

Numero di archivi richiesti.

[out] ppStorage

Puntatore alla matrice allocata dal chiamante di puntatori all'interfaccia IWMDMStorage . Le dimensioni di questa matrice devono essere IWMDMStorage *[celt]. Il chiamante deve rilasciare queste interfacce al termine dell'operazione. Per evitare di allocare un'intera matrice, è sufficiente passare l'indirizzo di un puntatore a un'interfaccia IWMDMStorage , come illustrato nelle osservazioni.

[out] pceltFetched

Numero di archivi enumerati.

Valore restituito

Il metodo restituisce un valore HRESULT. Tutti i metodi di interfaccia in Windows Media Gestione dispositivi possono restituire una delle classi di codici di errore seguenti:

  • Codici di errore COM standard
  • Codici di errore di Windows convertiti in valori HRESULT
  • Codici di errore di Windows Media Gestione dispositivi
Per un elenco completo dei codici di errore possibili, vedere Codici di errore.

Commenti

Windows Media Gestione dispositivi delega l'enumerazione di archiviazione al provider di servizi corrispondente. Per informazioni sull'enumerazione di archiviazione del provider di servizi, vedere l'interfaccia IMDSPEnumStorage .

L'enumeratore di archiviazione potrebbe non riflettere l'effetto dell'inserimento e della rimozione dei supporti. In tal caso, l'applicazione deve ottenere un nuovo oggetto enumeratore di archiviazione chiamando IWMDMDevice::EnumStorage per ottenere l'elenco aggiornato. Se si vuole recuperare una singola interfaccia alla volta, non è necessario allocare una matrice per questo metodo, come illustrato nel codice seguente.

Esempio

Le due funzioni C++ seguenti esplorano in modo ricorsivo un dispositivo. Il primo è una funzione di kickoff che ottiene l'interfaccia IWMDMEnumStorage dell'archiviazione del dispositivo radice. Viene passato alla funzione ricorsiva che esamina tutte le funzioni annidate.


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

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione mswmdm.h
Libreria Mssachlp.lib

Vedi anche

Esplorazione di un dispositivo

IWMDMDevice::EnumStorage

Interfaccia IWMDMEnumStorage