> ## 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 e verificações de licença

> Descreve considerações e medidas preventivas que os títulos de PC devem adotar para evitar pirataria e garantir que o jogo seja executado com uma licença válida.

O sistema de licenciamento da Microsoft Store executa uma verificação de licença quando um jogo distribuído pela Microsoft Store é iniciado. O sistema operacional não inicia o jogo, a menos que o usuário tenha uma licença válida para o produto, incluindo propriedade direta, uma [licença compartilhada](/pt-BR/publishing/xstore-commerce/xstore-product-sharing) ou uma licença de disco (somente console XBOX). No entanto, em PCs, depois que um usuário tem uma licença válida, ele pode facilmente descriptografar o conteúdo, executá-lo fora do contexto da Microsoft Store, compartilhá-lo com outras pessoas e contornar o sistema de licenciamento da Microsoft Store. Portanto, recomendamos que você adicione uma verificação de licença básica a qualquer jogo de PC que queira se proteger contra esse comportamento.

## Níveis de proteção de gerenciamento de direitos digitais (DRM)

O sistema de licenciamento da Microsoft Store no PC protege apenas contra os ataques mais básicos. Recomendamos que você não dependa exclusivamente dele para conteúdo que exija proteção. Veja a seguir várias etapas que podem adicionar camadas de proteção contra ataques mais avançados.

1. Verificação de licença iniciada pelo jogo na inicialização do jogo
2. Proteção antiadulteração para a verificação de licença do jogo
3. Verificação de licença no lado do serviço usando um [token de licença](/pt-BR/publishing/xstore-commerce/xstore-license-tokens)

### Verificação de licença básica

No mínimo, recomendamos que você adicione uma verificação de licença básica a qualquer jogo que queira proteção de DRM. O exemplo de código a seguir mostra uma implementação básica para executar essa verificação, mesmo que você não use nenhuma outra chamada de API relacionada ao Gaming Runtime. Você pode adicionar o código ao seu caminho de inicialização e adicionar uma interface do usuário específica que seja exibida quando a verificação de licença falhar.

```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>
  Uma licença concedida por meio do XBOX Game Pass retorna `isActive = true`, da mesma forma que uma licença comprada. A struct [XStoreGameLicense](/pt-BR/reference/system/xstore/structs/xstoregamelicense) não inclui um campo que identifique como a licença foi adquirida, portanto, uma verificação de licença no cliente não consegue distinguir o acesso pelo Game Pass de uma compra direta. Para fazer essa distinção, use a consulta no lado do serviço descrita em [Detectar o acesso por assinatura do XBOX Game Pass a partir do seu serviço](/pt-BR/publishing/xstore-commerce/xstore-detecting-game-pass).
</Note>

### Proteção antiadulteração que não é da Microsoft

Embora o exemplo de verificação de licença básica forneça alguma proteção, é comum que invasores contornem esse tipo de proteção modificando os executáveis do jogo para ignorar essa verificação. Assim, a próxima etapa para proteger seu jogo é usar um produto antiadulteração que não seja da Microsoft para impedir essas linhas de ataque. Há opções disponíveis para jogos de PC com GDK. Trabalhe com seu fornecedor de antiadulteração para obter instruções detalhadas sobre como incorporar essa proteção ao seu jogo.

### Verificação de licença no lado do serviço

As proteções antiadulteração fazem um bom trabalho protegendo os títulos no lançamento, mas, com o tempo, muitas delas são contornadas. Para ir um passo além, os jogos com recursos online podem executar uma verificação de licença no lado do serviço e bloquear muitos ataques no lado do cliente. Para obter mais informações, confira [Visão geral dos tokens de licença](/pt-BR/publishing/xstore-commerce/xstore-license-tokens).

O esboço básico é o seguinte.

1. O serviço do jogo solicita um token de licença ao cliente do jogo e inclui um GUID gerado pelo serviço do jogo que representa essa solicitação exclusiva.
2. Em seguida, o cliente chama uma API de cliente [XStoreQueryLicenseTokenAsync](/pt-BR/reference/system/xstore/xstore_members).
3. A API chama o serviço de licenciamento e determina se o jogo deve retornar uma licença para esse usuário.
4. Se a API obtiver uma licença válida, ela retornará um token de licença assinado que contém o identificador de sessão fornecido pelo serviço.
5. Em seguida, o cliente passa o token de licença de volta para o serviço do jogo.
6. O serviço do jogo valida a assinatura, garantindo que a licença veio da Microsoft Store e não foi modificada.
7. Em seguida, o serviço do jogo verifica se o GUID da sessão corresponde ao que foi passado ao cliente na etapa 1.
8. O serviço do jogo pode então confiar que as informações de licenciamento no token são válidas.

Essa técnica funciona somente online e exige que o jogo tenha seu próprio serviço. Ela fornece o nível mais alto de proteção disponível atualmente.

## Documentação de referência da API

* [XStore (conteúdo da API)](/pt-BR/reference/system/xstore/xstore_members)
  * Funções
    * [XStoreQueryLicenseTokenAsync](/pt-BR/reference/system/xstore/xstore_members)

## Referências

[Informações de comércio específicas para títulos habilitados para PC](/pt-BR/publishing/xstore-commerce/xstore-pc)

[Modelo de compartilhamento de produtos para jogos](/pt-BR/publishing/xstore-commerce/xstore-product-sharing)

[Visão geral dos tokens de licença](/pt-BR/publishing/xstore-commerce/xstore-license-tokens)

[Visão geral do comércio](/pt-BR/publishing/xstore-commerce/xstore-commerce-overview)

[Referência da API XStore](/pt-BR/reference/system/xstore/xstore_members)


## Related topics

- [XStore no PC: DRM, tokens de licença e áreas restritas](/pt-BR/publishing/xstore-commerce/xstore-pc.md)
- [XStoreQueryLicenseTokenAsync](/pt-BR/reference/system/xstore/functions/xstorequerylicensetokenasync.md)
- [Autenticação de usuários e propriedade](/pt-BR/build/steam-porting-guide/features/user-authentication-and-ownership.md)
- [Detectar o acesso à assinatura do XBOX Game Pass a partir do seu serviço](/pt-BR/publishing/xstore-commerce/xstore-detecting-game-pass.md)
- [Suporte a mods para títulos GDK para PC](/pt-BR/build/core-features/common/packaging/packaging-mods.md)
