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.
- Compartilhe superfícies e cercas com o Direct3D 12 usando ID3D12Device::OpenSharedHandle.
- Compartilhe superfícies com o Direct3D 11 usando ID3D11Device1::OpenSharedResource.
- Compartilhe cercas com o Direct3D 11 usando ID3D11Device5::OpenSharedFence.
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 |