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
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 |