Share via


IWMDMEnumStorage::Next-Methode (mswmdm.h)

Die Next-Methode ruft einen Zeiger auf den nächsten gleichgeordneten Speicher ab.

Syntax

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

Parameter

[in] celt

Anzahl der angeforderten Speicher.

[out] ppStorage

Zeiger auf aufruferseitig zugeordnetes Array von IWMDMStorage-Schnittstellenzeigern . Die Größe dieses Arrays muss IWMDMStorage *[celt] sein. Der Aufrufer muss diese Schnittstellen freigeben, wenn er mit ihnen fertig ist. Um die Zuordnung eines ganzen Arrays zu vermeiden, übergeben Sie einfach die Adresse eines Zeigers an eine IWMDMStorage-Schnittstelle , wie unter Hinweise gezeigt.

[out] pceltFetched

Anzahl der aufgezählten Speicher.

Rückgabewert

Die Methode gibt ein HRESULT zurück. Alle Schnittstellenmethoden in Windows Media Geräte-Manager können eine der folgenden Klassen von Fehlercodes zurückgeben:

  • Com-Standardfehlercodes
  • In HRESULT-Werte konvertierte Windows-Fehlercodes
  • Windows Media Geräte-Manager Fehlercodes
Eine ausführliche Liste möglicher Fehlercodes finden Sie unter Fehlercodes.

Hinweise

Windows Media Geräte-Manager delegiert die Speicheraufzählung an den entsprechenden Dienstanbieter. Informationen zur Speicheraufzählung des Dienstanbieters finden Sie unter der IMDSPEnumStorage-Schnittstelle .

Der Speicher-Enumerator spiegelt möglicherweise nicht die Auswirkungen des Einfügens und Entfernens von Medien wider. In diesem Fall sollte die Anwendung ein neues Speicherenumeratorobjekt abrufen, indem sie IWMDMDevice::EnumStorage aufruft , um die aktualisierte Liste abzurufen. Wenn Sie nur eine einzelne Schnittstelle gleichzeitig abrufen möchten, müssen Sie für diese Methode kein Array zuordnen, wie im folgenden Code gezeigt.

Beispiele

Die folgenden beiden C++-Funktionen untersuchen ein Gerät rekursiv. Die erste ist eine Kickoff-Funktion, die die IWMDMEnumStorage-Schnittstelle des Stammgerätespeichers abruft. Dies wird an die rekursive Funktion übergeben, die alle geschachtelten Funktionen untersucht.


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

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile mswmdm.h
Bibliothek Mssachlp.lib

Weitere Informationen

Untersuchen eines Geräts

IWMDMDevice::EnumStorage

IWMDMEnumStorage-Schnittstelle