Метод ID3D12Device::CreateSharedHandle (d3d12.h)

Создает общий дескриптор для кучи, ресурса или объекта ограждения.

Синтаксис

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

Параметры

[in] pObject

Тип: ID3D12DeviceChild*

Указатель на интерфейс ID3D12DeviceChild , представляющий кучу, ресурс или объект ограждения, который необходимо создать для совместного использования. Поддерживаются следующие интерфейсы (производные от ID3D12DeviceChild):

[in, optional] pAttributes

Тип: const SECURITY_ATTRIBUTES*

Указатель на структуру SECURITY_ATTRIBUTES , содержащую два отдельных, но связанных элемента данных: необязательный дескриптор безопасности и логическое значение, определяющее, могут ли дочерние процессы наследовать возвращаемый дескриптор.

Задайте для этого параметра значение NULL , если требуется, чтобы дочерние процессы, создаваемые приложением, не наследовали дескриптор, возвращенный Командлетом CreateSharedHandle, и если требуется, чтобы ресурс, связанный с возвращенным дескриптором, мог получить дескриптор безопасности по умолчанию.

Элемент lpSecurityDescriptor структуры указывает SECURITY_DESCRIPTOR для ресурса. Присвойте этому элементу значение NULL , если требуется, чтобы среда выполнения назначила дескриптор безопасности по умолчанию ресурсу, связанному с возвращенным дескриптором. Списки управления доступом в дескрипторе безопасности по умолчанию для ресурса поступают из основного маркера или маркера олицетворения создателя. Дополнительные сведения см. в разделе Синхронизация безопасности объектов и прав доступа.

Access

Тип: DWORD

В настоящее время единственным значением, которое принимает этот параметр, является GENERIC_ALL.

[in, optional] Name

Тип: LPCWSTR

Строка ЮНИКОД, завершающаяся значением NULL, содержащая имя, которое необходимо связать с общей кучей. Имя ограничено MAX_PATH символами. При сравнении имен учитывается регистр.

Если имя соответствует имени существующего ресурса, createSharedHandle завершается сбоем с DXGI_ERROR_NAME_ALREADY_EXISTS. Это происходит потому, что эти объекты используют одно и то же пространство имен.

Имя может иметь префикс "Global" или "Local" для явного создания объекта в глобальном пространстве имен или пространстве имен сеанса. Оставшаяся часть имени может содержать любой символ, кроме символа обратной косой черты (\). Дополнительные сведения см. в разделе Пространства имен объектов ядра. Быстрое переключение пользователей реализуется с помощью сеансов служб терминалов. Имена объектов ядра должны соответствовать рекомендациям, описанным для служб терминалов, чтобы приложения могли поддерживать нескольких пользователей.

Объект можно создать в частном пространстве имен. Дополнительные сведения см. в разделе Пространства имен объектов.

[out] pHandle

Тип: HANDLE*

Указатель на переменную, которая получает значение NT HANDLE для ресурса для совместного использования. Этот дескриптор можно использовать в вызовах для доступа к ресурсу.

Возвращаемое значение

Тип: HRESULT

Возвращает S_OK в случае успешного выполнения; в противном случае возвращает одно из следующих значений:

  • DXGI_ERROR_INVALID_CALL , если один из параметров является недопустимым.
  • DXGI_ERROR_NAME_ALREADY_EXISTS , если указанное имя ресурса для совместного использования уже связано с другим ресурсом.
  • E_ACCESSDENIED, если объект создается в защищенном пространстве имен.
  • E_OUTOFMEMORY, если недостаточно памяти для создания дескриптора.
  • Возможно, другие коды ошибок, описанные в разделе Коды возврата Direct3D 12 .

Комментарии

Можно совместно использовать как кучи, так и зафиксированные ресурсы. Совместное использование зафиксированного ресурса использует неявную кучу вместе с описанием зафиксированного ресурса, чтобы совместимое описание ресурса можно было сопоставить с кучей с другого устройства.

Для сценариев взаимодействия Direct3D 11 и Direct3D 12 в DirectX 11 открывается общий забор с помощью метода ID3D11Device5::OpenSharedFence , а общий ресурс открывается с помощью метода ID3D11Device::OpenSharedResource1 .

Для Direct3D 12 общий дескриптор открывается с помощью метода ID3D12Device::OpenSharedHandle или ID3D12Device::OpenSharedHandleByName.

Требования

   
Целевая платформа Windows
Header d3d12.h
Библиотека D3D12.lib
DLL D3D12.dll

См. также раздел

ID3D12Device