Méthode IWMDMEnumStorage ::Next (mswmdm.h)
La méthode Next récupère un pointeur vers le stockage frère suivant.
Syntaxe
HRESULT Next(
[in] ULONG celt,
[out] IWMDMStorage **ppStorage,
[out] ULONG *pceltFetched
);
Paramètres
[in] celt
Nombre de stockages demandés.
[out] ppStorage
Pointeur vers un tableau alloué par l’appelant de pointeurs d’interface IWMDMStorage . La taille de ce tableau doit être IWMDMStorage *[celt]. L’appelant doit libérer ces interfaces lorsqu’il les a terminés. Pour éviter d’allouer un tableau entier, il vous suffit de passer l’adresse d’un pointeur vers une interface IWMDMStorage , comme indiqué dans Remarques.
[out] pceltFetched
Nombre de stockages énumérés.
Valeur retournée
Cette méthode retourne un code HRESULT. Toutes les méthodes d’interface dans Windows Media Gestionnaire de périphériques peuvent retourner l’une des classes de codes d’erreur suivantes :
- Codes d’erreur COM standard
- Codes d’erreur Windows convertis en valeurs HRESULT
- Codes d’erreur Gestionnaire de périphériques Windows Media
Remarques
Windows Media Gestionnaire de périphériques délègue l’énumération de stockage au fournisseur de services correspondant. Pour plus d’informations sur l’énumération du stockage du fournisseur de services, consultez l’interface IMDSPEnumStorage .
L’énumérateur de stockage peut ne pas refléter l’effet de l’insertion et de la suppression du média. Dans ce cas, l’application doit obtenir un nouvel objet énumérateur de stockage en appelant IWMDMDevice ::EnumStorage pour obtenir la liste actualisée. Si vous souhaitez récupérer une seule interface à la fois, vous n’avez pas besoin d’allouer un tableau pour cette méthode, comme indiqué dans le code suivant.
Exemples
Les deux fonctions C++ suivantes explorent de manière récursive un appareil. La première est une fonction de lancement qui obtient l’interface IWMDMEnumStorage du stockage d’appareil racine. Il le transmet à la fonction récursive qui examine toutes les fonctions imbriquées.
// 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;
}
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Windows |
En-tête | mswmdm.h |
Bibliothèque | Mssachlp.lib |