ID3D12Device::CreateSharedHandle-Methode (d3d12.h)

Erstellt ein freigegebenes Handle für ein Heap-, Ressourcen- oder Zaunobjekt.

Syntax

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

Parameter

[in] pObject

Typ: ID3D12DeviceChild*

Ein Zeiger auf die ID3D12DeviceChild-Schnittstelle , die das Heap-, Ressourcen- oder Zaunobjekt darstellt, das für die Freigabe erstellt werden soll. Die folgenden Schnittstellen (abgeleitet von ID3D12DeviceChild) werden unterstützt:

[in, optional] pAttributes

Typ: const SECURITY_ATTRIBUTES*

Ein Zeiger auf eine SECURITY_ATTRIBUTES-Struktur , die zwei separate, aber verwandte Datenmember enthält: einen optionalen Sicherheitsdeskriptor und einen booleschen Wert, der bestimmt, ob untergeordnete Prozesse das zurückgegebene Handle erben können.

Legen Sie diesen Parameter auf NULL fest, wenn untergeordnete Prozesse, die die Anwendung möglicherweise erstellt, das von CreateSharedHandle zurückgegebene Handle nicht erben sollen, und wenn sie möchten, dass die Ressource, die dem zurückgegebenen Handle zugeordnet ist, eine Standardsicherheitsbeschreibung erhält.

Das lpSecurityDescriptor-Element der -Struktur gibt einen SECURITY_DESCRIPTOR für die Ressource an. Legen Sie dieses Element auf NULL fest, wenn die Runtime der Ressource, die dem zurückgegebenen Handle zugeordnet ist, einen Standardsicherheitsdeskriptor zuweisen soll. Die ACLs im Standardsicherheitsdeskriptor für die Ressource stammen aus dem primären Token oder identitätswechsel des Erstellers. Weitere Informationen finden Sie unter Synchronisierungsobjektsicherheit und Zugriffsrechte.

Access

Typ: DWORD

Derzeit ist der einzige Wert, den dieser Parameter akzeptiert, GENERIC_ALL.

[in, optional] Name

Typ: LPCWSTR

Eine MIT NULL beendete UNICODE-Zeichenfolge , die den Namen enthält, der dem freigegebenen Heap zugeordnet werden soll. Der Name ist auf MAX_PATH Zeichen beschränkt. Beim Namenvergleich wird die Groß-/Kleinschreibung beachtet.

Wenn Name mit dem Namen einer vorhandenen Ressource übereinstimmt, schlägt CreateSharedHandle mit DXGI_ERROR_NAME_ALREADY_EXISTS fehl. Dies tritt auf, weil diese Objekte denselben Namespace verwenden.

Der Name kann ein Präfix "Global" oder "Local" aufweisen, um das Objekt explizit im globalen Oder Sitzungsnamespace zu erstellen. Der Rest des Namens kann ein beliebiges Zeichen mit Ausnahme des umgekehrten Schrägstrichs (\) enthalten. Weitere Informationen finden Sie unter Kernelobjektnamespaces. Der schnelle Benutzerwechsel wird mithilfe von Terminaldienstesitzungen implementiert. Kernelobjektnamen müssen den für Terminaldienste beschriebenen Richtlinien entsprechen, damit Anwendungen mehrere Benutzer unterstützen können.

Das Objekt kann in einem privaten Namespace erstellt werden. Weitere Informationen finden Sie unter Objektnamespaces.

[out] pHandle

Typ: HANDLE*

Ein Zeiger auf eine Variable, die den NT HANDLE-Wert auf die zu freigebende Ressource empfängt. Sie können dieses Handle in Aufrufen verwenden, um auf die Ressource zuzugreifen.

Rückgabewert

Typ: HRESULT

Gibt bei erfolgreicher Ausführung S_OK zurück. Gibt andernfalls einen der folgenden Werte zurück:

  • DXGI_ERROR_INVALID_CALL , wenn einer der Parameter ungültig ist.
  • DXGI_ERROR_NAME_ALREADY_EXISTS , wenn der angegebene Name der ressource, die freigegeben werden soll, bereits einer anderen Ressource zugeordnet ist.
  • E_ACCESSDENIED, wenn das Objekt in einem geschützten Namespace erstellt wird.
  • E_OUTOFMEMORY, wenn nicht genügend Arbeitsspeicher zum Erstellen des Handles verfügbar ist.
  • Möglicherweise andere Fehlercodes, die im Thema Direct3D 12-Rückgabecodes beschrieben werden.

Hinweise

Sowohl Heaps als auch festgelegte Ressourcen können gemeinsam genutzt werden. Beim Freigeben einer gebundenen Ressource wird der implizite Heap zusammen mit der Beschreibung der zugesagten Ressource freigegeben, sodass eine kompatible Ressourcenbeschreibung dem Heap von einem anderen Gerät zugeordnet werden kann.

Für Direct3D 11- und Direct3D 12-Interop-Szenarien wird in DirectX 11 ein freigegebener Zaun mit der ID3D11Device5::OpenSharedFence-Methode geöffnet, und eine freigegebene Ressource wird mit der ID3D11Device::OpenSharedResource1-Methode geöffnet.

Für Direct3D 12 wird ein freigegebenes Handle mit der ID3D12Device::OpenSharedHandle-Methode oder der ID3D12Device::OpenSharedHandleByName-Methode geöffnet.

Anforderungen

   
Zielplattform Windows
Kopfzeile d3d12.h
Bibliothek D3D12.lib
DLL D3D12.dll

Weitere Informationen

ID3D12Device