Condividi tramite


Metodo IDisplayDeviceInterop::CreateSharedHandle (windows.devices.display.core.interop.h)

Per un DisplaySurface o un oggetto DisplayFence, crea un handle condiviso che può essere usato per l'interoperabilità con Direct3D o altre API grafiche.

Sintassi

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

Parametri

pObject

Puntatore all'interfaccia IUnknown di un DisplaySurface o un oggetto displayFence .

pSecurityAttributes

Puntatore a una struttura SECURITY_ATTRIBUTES che contiene due membri dati separati ma correlati: un descrittore di sicurezza facoltativo e un valore booleano che determina se i processi figlio possono ereditare l'handle restituito.

Impostare questo parametro su nullptr se si desidera che i processi figlio creati dall'applicazione non ereditino l'handle restituito da CreateSharedHandlee se si vuole che la risorsa associata all'handle restituito ottenga un descrittore di sicurezza predefinito.

Il lpSecurityDescriptor membro della struttura specifica un SECURITY_DESCRIPTOR per la risorsa. Impostare questo membro su nullptr se si vuole che il runtime assegni un descrittore di sicurezza predefinito alla risorsa associata all'handle restituito. Gli elenchi di controllo di accesso (ACL) nel descrittore di sicurezza predefinito per la risorsa provengono dal token primario o di rappresentazione dell'autore. Per altre informazioni, vedere la sicurezza degli oggetti di sincronizzazione e i diritti di accesso.

Access

Diritti di accesso richiesti per la risorsa. Oltre ai diritti di accesso generico , una superficie può usare questi valori.

  • DXGI_SHARED_RESOURCE_READ (0x80000000L). Specifica l'accesso in lettura alla risorsa.
  • DXGI_SHARED_RESOURCE_WRITE (1). Specifica l'accesso in scrittura alla risorsa.

È possibile combinare questi valori usando un'operazione OR bit per bit.

Se pObject è un recinto, è necessario usare GENERIC_ALL.

Name

Tipo: LPCWSTR

Stringa Unicode con terminazione Null contenente il nome da associare all'heap condiviso. Il nome è limitato ai caratteri MAX_PATH. Il confronto tra nomi fa distinzione tra maiuscole e minuscole.

Se Nome corrisponde al nome di una risorsa esistente, CreateSharedHandle ha esito negativo con DXGI_ERROR_NAME_ALREADY_EXISTS. Ciò si verifica perché questi oggetti condividono lo stesso spazio dei nomi.

Il nome può avere un prefisso "Global" o "Local" per creare in modo esplicito l'oggetto nello spazio dei nomi globale o sessione. Il resto del nome può contenere qualsiasi carattere, ad eccezione del carattere barra rovesciata (\). Per altre informazioni, vedere gli spazi dei nomi degli oggetti kernel . Il passaggio rapido dell'utente viene implementato usando le sessioni di Servizi terminal. I nomi degli oggetti del kernel devono seguire le linee guida descritte per Servizi terminal in modo che le applicazioni possano supportare più utenti.

L'oggetto può essere creato in uno spazio dei nomi privato. Per altre informazioni, vedere spazi dei nomi Object.

pHandle

Puntatore a un HANDLE che riceve tale nuovo handle condiviso.

Valore restituito

Tipo: HRESULT

Questo metodo restituisce S_OK se ha avuto esito positivo; in caso contrario, un codice di errore che indica il motivo per cui ha avuto esito negativo. Se ha esito positivo, pHandle punterà sempre all'handle appena creato.

Osservazioni

L'handle restituito da CreateSharedHandle può essere usato in qualsiasi funzione che richiede un "handle NT" su una superficie o un recinto GPU (a seconda dell'oggetto passato), purché al chiamante sia stato concesso l'accesso. Ecco alcuni esempi.

Più processi possono avere handle dello stesso oggetto, consentendo l'uso dell'oggetto per la sincronizzazione o la condivisione interprocesso. Sono disponibili i meccanismi di condivisione di oggetti seguenti.

  • Un processo figlio creato dalla funzione CreateProcess può ereditare un handle in un oggetto superficie o recinto se il pSecurityAttributes parametro di CreateSharedHandle abilita l'ereditarietà.
  • Un processo può specificare l'handle dell'oggetto in una chiamata alla funzione DuplicateHandle per creare un handle duplicato che può essere usato da un altro processo.
  • Un processo può specificare il nome dell'oggetto in una chiamata alla OpenSharedHandle o FUNZIONE ID3D12Device::OpenSharedHandleByName.

Usare la funzione CloseHandle per chiudere l'handle. Il sistema chiude automaticamente l'handle al termine del processo. L'oggetto viene eliminato definitivamente quando l'ultimo handle è stato chiuso e l'ultimo riferimento all'interfaccia è stato rilasciato.

Fabbisogno

Requisito Valore
client minimo supportato Windows 10 Build 20348
server minimo supportato Windows 10 Build 20348
piattaforma di destinazione Finestre
intestazione windows.devices.display.core.interop.h
libreria d3d12.lib
dll d3d12.dll