> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XPackageEnumerateChunkAvailability

> XPackageEnumerateChunkAvailability

# XPackageEnumerateChunkAvailability

检查安装程序包并枚举与指定选择器匹配的所有区块的可用性。

## 语法

```cpp theme={null}
HRESULT XPackageEnumerateChunkAvailability(  
         const char* packageIdentifier,  
         XPackageChunkSelectorType type,  
         void* context,  
         XPackageChunkAvailabilityCallback* callback  
)  
```

### 参数

*packageIdentifier*   \_In\_z\_\
类型：char\*

唯一标识磁盘上已安装程序包的字符串。有关程序包标识符的详细信息，请参阅[管理和许可可下载内容 (DLC)](https://learn.microsoft.com/gaming/gdk/docs/store/commerce/fundamentals/xstore-manage-and-license-optional-packages)。

*type*   \_In\_\
类型：[XPackageChunkSelectorType](/reference/system/xpackage/enums/xpackagechunkselectortype)

要枚举的属性类型。

*context*   \_In\_\
类型：void\*

要传递给 *callback* 参数中指定的回调的上下文。

*callback*   \_In\_\
类型：[XPackageChunkAvailabilityCallback\*](/reference/system/xpackage/functions/xpackagechunkavailabilitycallback)

在完成时要调用的回调。

### 返回值

类型：HRESULT

HRESULT 成功或错误代码。

## 备注

<Note>此函数在时间敏感线程上调用不安全。有关详细信息，请参阅[时间敏感线程](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)。</Note>

**XPackageEnumerateChunkAvailability** 用于检查程序包并枚举特定类型所有选择器的可用性。例如，使用 **XPackageChunkSelectorType::Language** 调用此函数将枚举程序包中的所有语言属性及其可用性。

在下面的示例中，一款游戏会显示其支持的所有语言，并允许用户安装或删除某种语言。为此，游戏将查询程序包以确定哪些语言可用以及它们是否已安装。

```cpp theme={null}
HRESULT GetPackageLanguages(_Out_ std::map<std::string, bool>& languages)
{
    char id[XPACKAGE_IDENTIFIER_MAX_LENGTH];

    HRESULT hr = XPackageGetCurrentProcessPackageIdentifier(_countof(id), id);
    if (FAILED(hr)) return hr;

    hr = XPackageEnumerateChunkAvailability(id,
        XPackageChunkSelectorType::Language, &languages,
        [](void* context, const XPackageChunkSelector* sel, XPackageChunkAvailability av)
    {
        auto languages = static_cast<std::map<std::string, bool>*>(context);
        switch (av)
        {
        case XPackageChunkAvailability::Ready:
        case XPackageChunkAvailability::Pending:
            languages->emplace(sel->language, true);
            break;

        case XPackageChunkAvailability::Installable:
            languages->emplace(sel->language, false);
            break;

        case XPackageChunkAvailability::Unavailable:
        default:
            break;
        }
        return true;
    });

    return hr;
}
```

## 要求

**头文件：** XPackage.h

**库：** xgameruntime.lib

**支持的平台：** Windows、XBOX One 系列主机和 XBOX Series 主机

## 概念性文档

* [时间敏感线程](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)

## 另请参阅

[XPackage](/reference/system/xpackage/xpackage_members)\
[流式安装和智能交付](/build/core-features/common/packaging/overviews/streaming_install-intelligent_delivery)


## Related topics

- [XPackageChunkAvailabilityCallback](/zh-CN/reference/system/xpackage/functions/xpackagechunkavailabilitycallback.md)
- [XPackage](/zh-CN/reference/system/xpackage/xpackage_members.md)
- [面向 GDK 的 Unity C# API 包装器](/zh-CN/build/gdk-and-engines/unity/unity-api-wrappers.md)
- [XPackageChunkAvailability](/zh-CN/reference/system/xpackage/enums/xpackagechunkavailability.md)
- [XPackageFindChunkAvailability](/zh-CN/reference/system/xpackage/functions/xpackagefindchunkavailability.md)
