Compartilhar via


Método IDisplayDeviceInterop::CreateSharedHandle (windows.devices.display.core.interop.h)

Para um objeto DisplaySurface ou DisplayFence , cria um identificador compartilhado que pode ser usado para interoperabilidade com o Direct3D ou outras APIs gráficas.

Sintaxe

HRESULT CreateSharedHandle(
  IInspectable              *pObject,
  const SECURITY_ATTRIBUTES *pSecurityAttributes,
  DWORD                     Access,
  HSTRING                   Name,
  HANDLE                    *pHandle
);

Parâmetros

pObject

Um ponteiro para a interface IUnknown de um objeto DisplaySurface ou DisplayFence .

pSecurityAttributes

Um ponteiro para uma estrutura SECURITY_ATTRIBUTES que contém dois membros de dados separados, mas relacionados: um descritor de segurança opcional e um valor booliano que determina se os processos filho podem herdar o identificador retornado.

Defina esse parâmetro como nullptr se você quiser que os processos filho que o aplicativo possa criar não herdem o identificador retornado por CreateSharedHandle e se você quiser que o recurso associado ao identificador retornado obtenha um descritor de segurança padrão.

O membro lpSecurityDescriptor da estrutura especifica um SECURITY_DESCRIPTOR para o recurso. Defina esse membro como nullptr se você quiser que o runtime atribua um descritor de segurança padrão ao recurso associado ao identificador retornado. As ACLs (listas de controle de acesso) no descritor de segurança padrão para o recurso vêm do token primário ou de representação do criador. Para obter mais informações, consulte Direitos de acesso e segurança do objeto de sincronização.

Access

Os direitos de acesso solicitados ao recurso. Além dos direitos de acesso genéricos, uma superfície pode usar esses valores.

  • DXGI_SHARED_RESOURCE_READ (0x80000000L). Especifica o acesso de leitura ao recurso.
  • DXGI_SHARED_RESOURCE_WRITE (1). Especifica o acesso de gravação ao recurso.

Você pode combinar esses valores usando uma operação OR bit a bit.

Se pObject for uma cerca, você deverá usar GENERIC_ALL.

Name

Tipo: LPCWSTR

Uma cadeia de caracteres Unicode terminada em nulo que contém o nome a ser associado ao heap compartilhado. O nome é limitado a MAX_PATH caracteres. A comparação de nomes diferencia maiúsculas de minúsculas.

Se Name corresponder ao nome de um recurso existente, CreateSharedHandle falhará com DXGI_ERROR_NAME_ALREADY_EXISTS. Isso ocorre porque esses objetos compartilham o mesmo namespace.

O nome pode ter um prefixo "Global" ou "Local" para criar explicitamente o objeto no namespace global ou de sessão. O restante do nome pode conter qualquer caractere, exceto o caractere de barra invertida (\). Para obter mais informações, consulte Namespaces de objeto kernel. A troca rápida de usuário é implementada usando sessões dos Serviços de Terminal. Os nomes de objetos kernel devem seguir as diretrizes descritas para os Serviços de Terminal para que os aplicativos possam dar suporte a vários usuários.

O objeto pode ser criado em um namespace privado. Para obter mais informações, consulte Namespaces de objeto.

pHandle

Um ponteiro para um HANDLE que recebe esse novo identificador compartilhado.

Retornar valor

Tipo: HRESULT

Esse método retornará S_OK se tiver sido bem-sucedido, caso contrário, um código de falha indicando por que ele falhou. Se tiver êxito, o pHandle sempre apontará para o identificador recém-criado.

Comentários

O identificador retornado por CreateSharedHandle pode ser usado em qualquer função que exija um "identificador NT" para uma superfície ou cerca de GPU (dependendo de qual objeto foi passado), desde que o chamador tenha recebido acesso. Aqui estão alguns exemplos.

Vários processos podem ter identificadores do mesmo objeto, permitindo o uso do objeto para sincronização ou compartilhamento entre processos. Os mecanismos de compartilhamento de objetos a seguir estão disponíveis.

  • Um processo filho criado pela função CreateProcess pode herdar um identificador para um objeto de superfície ou cerca se o parâmetro pSecurityAttributes de CreateSharedHandle habilitar a herança.
  • Um processo pode especificar o identificador de objeto em uma chamada para a função DuplicateHandle para criar um identificador duplicado que pode ser usado por outro processo.
  • Um processo pode especificar o nome do objeto em uma chamada para a função OpenSharedHandle ou ID3D12Device::OpenSharedHandleByName .

Use a função CloseHandle para fechar o identificador. O sistema fecha o identificador automaticamente quando o processo é encerrado. O objeto é destruído quando seu último identificador foi fechado e sua última referência de interface foi lançada.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10 Build 20348
Servidor mínimo com suporte Windows 10 Build 20348
Plataforma de Destino Windows
Cabeçalho windows.devices.display.core.interop.h
Biblioteca d3d12.lib
DLL d3d12.dll