IWMDMEnumStorage::Next 方法 (mswmdm.h)
Next 方法會擷取下一個同層級記憶體的指標。
語法
HRESULT Next(
[in] ULONG celt,
[out] IWMDMStorage **ppStorage,
[out] ULONG *pceltFetched
);
參數
[in] celt
要求的記憶體數目。
[out] ppStorage
呼叫端配置的 IWMDMStorage 介面指標數位指標的指標。 此陣列的大小必須是 IWMDMStorage *[celt]。 呼叫端必須在使用這些介面時釋放這些介面。 若要避免配置整個陣列,只要傳入 IWMDMStorage 介面指標的位址,如所示。
[out] pceltFetched
列舉的記憶體數目。
傳回值
方法會傳回 HRESULT。 Windows Media 裝置管理員 中的所有介面方法都可以傳回下列任何一種錯誤碼類別:
- 標準 COM 錯誤碼
- 轉換成 HRESULT 值的 Windows 錯誤碼
- Windows Media 裝置管理員 錯誤碼
備註
Windows Media 裝置管理員 將記憶體列舉委派給對應的服務提供者。 如需服務提供者記憶體列舉的詳細資訊,請參閱 IMDSPEnumStorage 介面。
儲存列舉值可能不會反映媒體插入和移除的效果。 在此情況下,應用程式應該藉由呼叫 IWMDMDevice::EnumStorage 來取得新的記憶體列舉值物件,以取得重新整理的清單。 如果您一次只想要擷取單一介面,就不需要配置這個方法的陣列,如下列程式代碼所示。
範例
下列兩個 C++ 函式會以遞歸方式探索裝置。 第一個函式是一個啟動函式,可取得根裝置記憶體的 IWMDMEnumStorage 介面。 它會將此傳遞至遞歸函式,以檢查所有巢狀函式。
// 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;
}
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
標頭 | mswmdm.h |
程式庫 | Mssachlp.lib |