XPackageEnumeratePackages

Finds packages that are already installed, or being installed, and are related to the calling process.

Syntax

HRESULT XPackageEnumeratePackages(  
         XPackageKind kind,  
         XPackageEnumerationScope scope,  
         void* context,  
         XPackageEnumerationCallback* callback  
)  

Parameters

kind   _In_
Type: XPackageKind

The type of installation packages to be enumerated.

scope   _In_
Type: XPackageEnumerationScope

The scope of the installation packages.

context   _In_opt_
Type: void*

Context to be passed to the callback specified in the callback parameter.

callback   _In_
Type: XPackageEnumerationCallback*

A callback to be called on completion.

Return value

Type: HRESULT

HRESULT success or error code.

Remarks

Note

This function isn't safe to call on a time-sensitive thread. For more information, see Time-sensitive threads.

Use XPackageEnumeratePackages to find packages that are already installed, or being installed, and are related to the calling process. This function can find content packages as well as app packages. It provides details about an installation, through an XPackageDetails structure.

If the package is still installing, the installing property is set to true and you can create an installation monitor to let the package's identifier monitor the progress of installation.

There are no generic installation queue notifications; the intent is to use XPackageEnumeratePackages to show and track items in flight. Nor is there an API to stop, start, or cancel an installation. From a game's perspective, the installation should take care of itself. Errors are automatically retried and are invisible to the game.

The output of the API, when called with value XPackageKind::Game depending on the XPackageEnumerationScope value will be:

Scope Franchise game hub Hub-aware game Hub-unaware game
ThisOnly Only the franchise game hub Only the hub-aware game Only the hub-unaware game
ThisAndRelated The franchise game hub, all the hub-aware games associated with it and all the RelatedProducts The hub-aware game and all the RelatedProducts The hub-unaware game and all the RelatedProducts
ThisPublisher All the game products belonging to the same publisher as the current process All the game products belonging to the same publisher as the current process All the game products belonging to the same publisher as the current process

The output of the API, when called with value XPackageKind::Content depending on the XPackageEnumerationScope value will be:

Scope Franchise game hub Hub-aware game Hub-unaware game
ThisOnly The DLCs related to this franchise game hub The DLCs related to this hub-aware game The DLCs related to this hub-unaware game
ThisAndRelated The DLCs related to this franchise game hub, to its hub-aware titles and to all its RelatedProducts The DLCs related to this hub-aware game and to all its RelatedProducts The DLCs related to this hub-unaware game and to all its RelatedProducts
ThisPublisher All DLCs (from the same publisher or from other publishers) related to a base game from the same publisher as the current process All DLCs (from the same publisher or from other publishers) related to a base game from the same publisher as the current process All DLCs (from the same publisher or from other publishers) related to a base game from the same publisher as the current process

Example:

bool CALLBACK ListDlcCallback(
    void* /* context */,
    const XPackageDetails* details)
{
    printf("Found dlc: %s\n", details->displayName);
    return true; // continue enumerating
}

HRESULT ListDlc()
{
    HRESULT hr = XPackageEnumeratePackages(
        XPackageKind::Content,                      /* Looking for content packages (DLC) */
        XPackageEnumerationScope::ThisAndRelated,   /* For this game and related games*/
        nullptr, ListDlcCallback);
    return hr;
}

Requirements

Header: XPackage.h

Library: xgameruntime.lib

Supported platforms: Windows, Xbox One family consoles and Xbox Series consoles

See also

XPackage
Franchise Game Hubs
How to create and use Downloadable Content Packages (DLC) for PC and Xbox One