Метод 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*
Указатель на структуру
Присвойте этому параметру значение NULL, если требуется, чтобы дочерние процессы, которые приложение может создать, чтобы не наследовать дескриптор безопасности, возвращенный CreateSharedHandle, и если требуется, чтобы ресурс, связанный с возвращаемым дескриптором безопасности по умолчанию.
Элемент lpSecurityDescriptor структуры указывает SECURITY_DESCRIPTOR для ресурса. Задайте этому члену значение NULL, если требуется, чтобы среда выполнения назначила дескриптор безопасности по умолчанию ресурсу, связанному с возвращаемым дескриптором. Списки управления доступом в дескрипторе безопасности по умолчанию для ресурса получены из первичного или олицетворения маркера создателя. Дополнительные сведения см. в разделе Безопасность объектов синхронизации иправ доступа.
Access
Тип: DWORD
В настоящее время единственным значением, которое принимает этот параметр, является GENERIC_ALL.
[in, optional] Name
Тип: LPCWSTR
Строка NULL, завершаемаяЮНИКОДе, которая содержит имя для связывания с общей кучей. Имя ограничено MAX_PATH символами. Сравнение имен учитывает регистр.
Если имя соответствует имени существующего ресурса, CreateSharedHandle завершается ошибкой с DXGI_ERROR_NAME_ALREADY_EXISTS. Это происходит, так как эти объекты используют одно и то же пространство имен.
Имя может иметь префикс "Глобальный" или "Локальный", чтобы явно создать объект в глобальном или пространстве имен сеанса. Оставшаяся часть имени может содержать любой символ, кроме символа обратной косой черты (\). Дополнительные сведения см. в разделе пространства имен объектов ядра. Быстрое переключение пользователей реализуется с помощью сеансов служб терминалов. Имена объектов ядра должны соответствовать рекомендациям, описанным для служб терминалов, чтобы приложения могли поддерживать несколько пользователей.
Объект можно создать в частном пространстве имен. Дополнительные сведения см. в пространствах имен объектов.
[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.
Требования
Требование | Ценность |
---|---|
целевая платформа | Виндоус |
заголовка | d3d12.h |
библиотеки |
D3D12.lib |
DLL | D3D12.dll |