Método ID3D12Device::CreateSharedHandle (d3d12.h)
Cria um identificador compartilhado para um heap, recurso ou objeto fence.
Sintaxe
HRESULT CreateSharedHandle(
[in] ID3D12DeviceChild *pObject,
[in, optional] const SECURITY_ATTRIBUTES *pAttributes,
DWORD Access,
[in, optional] LPCWSTR Name,
[out] HANDLE *pHandle
);
Parâmetros
[in] pObject
Tipo: ID3D12DeviceChild*
Um ponteiro para a interface ID3D12DeviceChild que representa o heap, o recurso ou o objeto fence a ser criado para compartilhamento. Há suporte para as seguintes interfaces (derivadas de ID3D12DeviceChild):
[in, optional] pAttributes
Tipo: const SECURITY_ATTRIBUTES*
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 NULL se desejar 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 NULL se quiser que o runtime atribua um descritor de segurança padrão ao recurso associado ao identificador retornado. As ACLs 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 Segurança do objeto de sincronização e direitos de acesso.
Access
Tipo: DWORD
Atualmente, o único valor que esse parâmetro aceita é GENERIC_ALL.
[in, optional] Name
Tipo: LPCWSTR
Uma cadeia de caracteres UNICODE terminada em NULL 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 alternância rápida de usuário é implementada usando sessões de Serviços de Terminal. Os nomes de objeto 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.
[out] pHandle
Tipo: HANDLE*
Um ponteiro para uma variável que recebe o valor NT HANDLE para o recurso a ser compartilhado. Você pode usar esse identificador em chamadas para acessar o recurso.
Valor retornado
Tipo: HRESULT
Retorna S_OK se tiver êxito; caso contrário, retorna um dos seguintes valores:
- DXGI_ERROR_INVALID_CALL se um dos parâmetros for inválido.
- DXGI_ERROR_NAME_ALREADY_EXISTS se o nome fornecido do recurso a ser compartilhado já estiver associado a outro recurso.
- E_ACCESSDENIED se o objeto estiver sendo criado em um namespace protegido.
- E_OUTOFMEMORY se não houver memória suficiente disponível para criar o identificador.
- Possivelmente outros códigos de erro descritos no tópico Códigos de Retorno do Direct3D 12 .
Comentários
Os heaps e os recursos confirmados podem ser compartilhados. Compartilhar um recurso confirmado compartilha o heap implícito junto com a descrição do recurso confirmado, de modo que uma descrição de recurso compatível possa ser mapeada para o heap de outro dispositivo.
Para cenários de interoperabilidade direct3D 11 e Direct3D 12, uma cerca compartilhada é aberta no DirectX 11 com o método ID3D11Device5::OpenSharedFence e um recurso compartilhado é aberto com o método ID3D11Device::OpenSharedResource1 .
Para o Direct3D 12, um identificador compartilhado é aberto com o método ID3D12Device::OpenSharedHandle ou o método ID3D12Device::OpenSharedHandleByName.
Requisitos
Plataforma de Destino | Windows |
Cabeçalho | d3d12.h |
Biblioteca | D3D12.lib |
DLL | D3D12.dll |