Metodo ID3D12Device::CreateSharedHandle (d3d12.h)

Crea un handle condiviso in un heap, una risorsa o un oggetto di recinzione.

Sintassi

HRESULT CreateSharedHandle(
  [in]           ID3D12DeviceChild         *pObject,
  [in, optional] const SECURITY_ATTRIBUTES *pAttributes,
                 DWORD                     Access,
  [in, optional] LPCWSTR                   Name,
  [out]          HANDLE                    *pHandle
);

Parametri

[in] pObject

Tipo: ID3D12DeviceChild*

Puntatore all'interfaccia ID3D12DeviceChild che rappresenta l'heap, la risorsa o l'oggetto di recinzione da creare per la condivisione. Le interfacce seguenti (derivate da ID3D12DeviceChild) sono supportate:

[in, optional] pAttributes

Tipo: const SECURITY_ATTRIBUTES*

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 NULL se si desidera che l'applicazione crei per non ereditare l'handle restituito da CreateSharedHandle e se si vuole che la risorsa associata all'handle restituito ottenga un descrittore di sicurezza predefinito.

Il membro lpSecurityDescriptor della struttura specifica un SECURITY_DESCRIPTOR per la risorsa. Impostare questo membro su NULL se si vuole che il runtime assegna un descrittore di sicurezza predefinito alla risorsa associata all'handle restituito. Gli ACL nel descrittore di sicurezza predefinito per la risorsa provengono dal token primario o di rappresentazione del creatore. Per altre informazioni, vedere Sicurezza oggetti di sincronizzazione e diritti di accesso.

Access

Tipo: DWORD

Attualmente l'unico valore accettato da questo parametro è GENERIC_ALL.

[in, optional] Name

Tipo: LPCWSTR

Stringa UNICODE con terminazione NULL contenente il nome da associare all'heap condiviso. Il nome è limitato a MAX_PATH caratteri. Il confronto tra nomi è distinzione tra maiuscole e minuscole.

Se Name 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 Spazi dei nomi degli oggetti kernel. Il passaggio rapido degli utenti viene implementato usando le sessioni di Servizi terminal. I nomi degli oggetti 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 degli oggetti.

[out] pHandle

Tipo: HANDLE*

Puntatore a una variabile che riceve il valore NT HANDLE nella risorsa da condividere. È possibile usare questo handle nelle chiamate per accedere alla risorsa.

Valore restituito

Tipo: HRESULT

Restituisce S_OK se ha esito positivo; in caso contrario, restituisce uno dei valori seguenti:

  • DXGI_ERROR_INVALID_CALL se uno dei parametri non è valido.
  • DXGI_ERROR_NAME_ALREADY_EXISTS se il nome specificato della risorsa da condividere è già associato a un'altra risorsa.
  • E_ACCESSDENIED se l'oggetto viene creato in uno spazio dei nomi protetto.
  • E_OUTOFMEMORY se la memoria sufficiente non è disponibile per creare l'handle.
  • Eventualmente altri codici di errore descritti nell'argomento Codici restituiti Direct3D 12 .

Commenti

È possibile condividere sia gli heaps che le risorse commit. La condivisione di una risorsa con commit condivide l'heap implicito insieme alla descrizione della risorsa con commit, in modo che una descrizione della risorsa compatibile possa essere mappata all'heap da un altro dispositivo.

Per scenari di interoperabilità Direct3D 11 e Direct3D 12, un recinto condiviso viene aperto in DirectX 11 con il metodo ID3D11Device5::OpenSharedFence e una risorsa condivisa viene aperta con il metodo ID3D11Device::OpenSharedResource1 .

Per Direct3D 12, viene aperto un handle condiviso con il metodo ID3D12Device::OpenSharedHandle o ID3D12Device::OpenSharedHandleByName .

Requisiti

   
Piattaforma di destinazione Windows
Intestazione d3d12.h
Libreria D3D12.lib
DLL D3D12.dll

Vedi anche

ID3D12Device