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

# DRM básico y comprobaciones de licencia

> Describe las consideraciones y medidas preventivas que los títulos de PC deben adoptar para evitar la piratería y garantizar que el juego se ejecuta con una licencia válida.

El sistema de licencias de Microsoft Store realiza una comprobación de licencia cuando se inicia un juego distribuido a través de Microsoft Store. El sistema operativo no inicia el juego a menos que el usuario tenga una licencia válida para el producto, lo que incluye la propiedad directa, una [licencia compartida](/publishing/xstore-commerce/xstore-product-sharing) o una licencia de disco (solo en consolas XBOX). Sin embargo, en los equipos PC, una vez que un usuario tiene una licencia válida, puede descifrar fácilmente el contenido, ejecutarlo fuera del contexto de Microsoft Store, compartirlo con otras personas y eludir el sistema de licencias de Microsoft Store. Por lo tanto, se recomienda agregar una comprobación de licencia básica a cualquier juego de PC que quiera protegerse contra este comportamiento.

## Niveles de protección de administración de derechos digitales (DRM)

El sistema de licencias de Microsoft Store en PC solo protege contra los ataques más básicos. Se recomienda no confiar exclusivamente en él para el contenido que requiere protección. A continuación se indican varios pasos que pueden agregar capas de protección contra ataques más avanzados.

1. Comprobación de licencia iniciada por el juego al iniciarse el juego
2. Protección antimanipulación para la comprobación de licencia del juego
3. Verificación de licencia en el lado del servicio mediante un [token de licencia](/publishing/xstore-commerce/xstore-license-tokens)

### Comprobación de licencia básica

Como mínimo, se recomienda agregar una comprobación de licencia básica a cualquier juego que quiera protección DRM. En el ejemplo de código siguiente se muestra una implementación básica para realizar esta comprobación, incluso si no usa ninguna otra llamada a las API relacionadas con Gaming Runtime. Puede agregar el código a su ruta de inicio y agregar una interfaz de usuario específica que se muestre cuando falle la comprobación de licencia.

```cpp theme={null}
void CALLBACK LicenseCheck(XAsyncBlock *async)
{
    XStoreGameLicense license;
    HRESULT hr = XStoreQueryGameLicenseResult(async, &license);
    if (SUCCEEDED(hr))
    {
        if (!license.isActive)
        {
            // Failed to retrieve a license
            // Consider the title to be unlicensed
        }
        else
        {
            if (license.isTrial)
            {
                // Validated that the user has a trial license
                // Check additional attributes to ensure active trial
                // See "Implementing Trials for your game"
            }
            else
            {
                // Validated that the user has a real license
                // Consider the title to be licensed and continue
            }
        }
    }
    else
    {
        // Failed to retrieve a license
        // Consider the title to be unlicensed
    }

    delete async;
}

void CheckLicense()
{
    auto async = new XAsyncBlock{};
    async->context = this;
    async->queue = m_asyncQueue;
    async->callback = LicenseCheck;

    HRESULT hr = XStoreQueryGameLicenseAsync(
        storeContext,
        async);

    if (FAILED(hr))
    {
        // StoreContext may be invalid
        // If loose deployed or side-loaded package, check that the game configured to be licensed
        // See "Enabling XStore development and testing"

        delete async;
    }
}
```

<Note>
  Una licencia concedida a través de XBOX Game Pass devuelve `isActive = true`, igual que una licencia comprada. La estructura [XStoreGameLicense](/reference/system/xstore/structs/xstoregamelicense) no incluye un campo que identifique cómo se adquirió la licencia, por lo que una comprobación de licencia en el cliente no puede distinguir el acceso a través de Game Pass de una compra directa. Para hacer esa distinción, use la consulta en el lado del servicio que se describe en [Detección del acceso a la suscripción a XBOX Game Pass desde su servicio](/publishing/xstore-commerce/xstore-detecting-game-pass).
</Note>

### Protección antimanipulación de terceros

Aunque el ejemplo de comprobación de licencia básica proporciona cierta protección, es habitual que los atacantes eludan este tipo de protección modificando los archivos ejecutables del juego para omitir esta comprobación. Por lo tanto, el siguiente paso para proteger su juego es usar un producto antimanipulación de terceros para impedir estas líneas de ataque. Hay opciones disponibles para los juegos de PC de GDK. Trabaje con su proveedor de soluciones antimanipulación para obtener instrucciones detalladas sobre cómo incorporar esta protección a su juego.

### Verificación de licencia en el lado del servicio

Las protecciones antimanipulación hacen un buen trabajo protegiendo los títulos en el inicio pero, con el tiempo, muchas de ellas acaban siendo eludidas. Para ir un paso más allá, los juegos con conexión pueden realizar una comprobación de verificación de licencia en el lado del servicio y bloquear muchos ataques del lado del cliente. Para obtener más información, consulte [Información general sobre los tokens de licencia](/publishing/xstore-commerce/xstore-license-tokens).

El esquema básico es el siguiente.

1. El servicio del juego solicita un token de licencia al cliente del juego e incluye un GUID generado por el servicio del juego que representa esa solicitud única.
2. A continuación, el cliente llama a la API de cliente [XStoreQueryLicenseTokenAsync](/reference/system/xstore/xstore_members).
3. La API llama al servicio de licencias y determina si el juego debe devolver una licencia a ese usuario.
4. Si la API puede obtener una licencia válida, se devuelve un token de licencia firmado que contiene el identificador de sesión proporcionado por el servicio.
5. A continuación, el cliente devuelve el token de licencia al servicio del juego.
6. El servicio del juego valida la firma, lo que garantiza que la licencia procede de Microsoft Store y no se ha modificado
7. A continuación, el servicio del juego comprueba que el GUID de sesión coincide con el que se pasó al cliente en el paso 1.
8. El servicio del juego puede entonces confiar en que la información de licencia del token es válida

Esta técnica solo funciona en línea y requiere que el juego tenga su propio servicio. Proporciona el nivel de protección más alto disponible actualmente.

## Documentación de referencia de la API

* [XStore (contenido de la API)](/reference/system/xstore/xstore_members)
  * Funciones
    * [XStoreQueryLicenseTokenAsync](/reference/system/xstore/xstore_members)

## Referencias

[Información de comercio específica para títulos habilitados para PC](/publishing/xstore-commerce/xstore-pc)

[Modelo de uso compartido de productos para juegos](/publishing/xstore-commerce/xstore-product-sharing)

[Información general sobre los tokens de licencia](/publishing/xstore-commerce/xstore-license-tokens)

[Información general sobre comercio](/publishing/xstore-commerce/xstore-commerce-overview)

[Referencia de la API de XStore](/reference/system/xstore/xstore_members)


## Related topics

- [XStore en PC: DRM, tokens de licencia y sandboxes](/es/publishing/xstore-commerce/xstore-pc.md)
- [Detección del acceso a la suscripción a XBOX Game Pass desde su servicio](/es/publishing/xstore-commerce/xstore-detecting-game-pass.md)
- [Compatibilidad con mods para títulos del GDK en PC](/es/build/core-features/common/packaging/packaging-mods.md)
- [Autenticación de usuarios y propiedad](/es/build/steam-porting-guide/features/user-authentication-and-ownership.md)
- [XStoreQueryLicenseTokenAsync](/es/reference/system/xstore/functions/xstorequerylicensetokenasync.md)
