IDisplayDeviceInterop::CreateSharedHandle 메서드(windows.devices.display.core.interop.h)
DisplaySurface 또는 DisplayFence 개체의 경우 Direct3D 또는 기타 그래픽 API와의 interop에 사용할 수 있는 공유 핸들을 만듭니다.
구문
HRESULT CreateSharedHandle(
IInspectable *pObject,
const SECURITY_ATTRIBUTES *pSecurityAttributes,
DWORD Access,
HSTRING Name,
HANDLE *pHandle
);
매개 변수
pObject
DisplaySurface 또는 DisplayFence 개체의 IUnknown 인터페이스에 대한 포인터입니다.
pSecurityAttributes
별도의 두 개의 관련 데이터 멤버인 선택적 보안 설명자 및 자식 프로세스가 반환된 핸들을 상속할 수 있는지 여부를 결정하는 부울 값이 포함된 SECURITY_ATTRIBUTES 구조체에 대한 포인터입니다.
CreateSharedHandle에서 반환된 핸들을 상속하지 않도록 애플리케이션에서 만들 수 있는 자식 프로세스를 원하는 경우 및 반환된 핸들과 연결된 리소스가 기본 보안 설명자를 가져오도록 하려면 이 매개 변수 nullptr
를 로 설정합니다.
구조체의 lpSecurityDescriptor 멤버는 리소스에 대한 SECURITY_DESCRIPTOR 지정합니다. 런타임에서 반환된 핸들과 연결된 리소스에 기본 보안 설명자를 할당하려면 이 멤버 nullptr
를 로 설정합니다. 리소스에 대한 기본 보안 설명자의 ACL(액세스 제어 목록)은 작성자의 기본 또는 가장 토큰에서 가져옵니다. 자세한 내용은 동기화 개체 보안 및 액세스 권한을 참조하세요.
Access
리소스에 대한 요청된 액세스 권한입니다. 일반 액세스 권한 외에도 표면에서 이러한 값을 사용할 수 있습니다.
- DXGI_SHARED_RESOURCE_READ (0x80000000L). 리소스에 대한 읽기 권한을 지정합니다.
- DXGI_SHARED_RESOURCE_WRITE (1). 리소스에 대한 쓰기 액세스를 지정합니다.
비트 OR 연산을 사용하여 이러한 값을 결합할 수 있습니다.
pObject가 펜스인 경우 GENERIC_ALL 사용해야 합니다.
Name
형식: LPCWSTR
공유 힙과 연결할 이름을 포함하는 null로 종료된 유니코드 문자열입니다. 이름은 MAX_PATH 문자로 제한됩니다. 이름 비교는 대/소문자를 구분합니다.
Name이 기존 리소스의 이름과 일치하면 CreateSharedHandle이DXGI_ERROR_NAME_ALREADY_EXISTS 실패합니다. 이 문제는 이러한 개체가 동일한 네임스페이스를 공유하기 때문에 발생합니다.
이름에는 전역 또는 세션 네임스페이스에 개체를 명시적으로 만드는 "전역" 또는 "로컬" 접두사를 가질 수 있습니다. 이름의 나머지 부분에는 백슬래시 문자(\
)를 제외한 모든 문자가 포함될 수 있습니다. 자세한 내용은 커널 개체 네임스페이스를 참조하세요. 빠른 사용자 전환은 터미널 서비스 세션을 사용하여 구현됩니다. 커널 개체 이름은 애플리케이션이 여러 사용자를 지원할 수 있도록 터미널 서비스에 대해 설명된 지침을 따라야 합니다.
개체는 프라이빗 네임스페이스에서 만들 수 있습니다. 자세한 내용은 개체 네임스페이스를 참조하세요.
pHandle
새 공유 핸들을 수신하는 HANDLE 에 대한 포인터입니다.
반환 값
형식: HRESULT
이 메서드는 성공하면 S_OK 반환하고, 그렇지 않으면 실패한 이유를 나타내는 오류 코드를 반환합니다. 성공하면 pHandle 은 항상 새로 만든 핸들을 가리킵니다.
설명
CreateSharedHandle에서 반환된 핸들은 호출자에게 액세스 권한이 부여된 경우 GPU 표면 또는 펜스에 "NT 핸들"이 필요한 모든 함수에서 사용할 수 있습니다(전달된 개체에 따라 다름). 다음은 몇 가지 예제입니다.
- ID3D12Device::OpenSharedHandle을 사용하여 Direct3D 12와 표면 및 펜스를 공유합니다.
- ID3D11Device1::OpenSharedResource를 사용하여 Direct3D 11과 표면을 공유합니다.
- ID3D11Device5::OpenSharedFence를 사용하여 Direct3D 11과 펜스를 공유합니다.
여러 프로세스에는 동일한 개체의 핸들이 있을 수 있으므로 프로세스 간 동기화 또는 공유에 개체를 사용할 수 있습니다. 다음 개체 공유 메커니즘을 사용할 수 있습니다.
- CreateSharedHandle의 pSecurityAttributes 매개 변수가 상속을 사용하도록 설정하는 경우 CreateProcess 함수에서 만든 자식 프로세스는 표면 또는 펜스 개체에 대한 핸들을 상속할 수 있습니다.
- 프로세스는 DuplicateHandle 함수 호출에서 개체 핸들을 지정하여 다른 프로세스에서 사용할 수 있는 중복 핸들을 만들 수 있습니다.
- 프로세스는 OpenSharedHandle 또는 ID3D12Device::OpenSharedHandleByName 함수에 대한 호출에서 개체의 이름을 지정할 수 있습니다.
CloseHandle 함수를 사용하여 핸들을 닫습니다. 프로세스가 종료되면 시스템이 핸들을 자동으로 닫습니다. 마지막 핸들이 닫혀 있고 마지막 인터페이스 참조가 해제되면 개체가 제거됩니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 10 빌드 20348 |
지원되는 최소 서버 | Windows 10 빌드 20348 |
대상 플랫폼 | Windows |
헤더 | windows.devices.display.core.interop.h |
라이브러리 | d3d12.lib |
DLL | d3d12.dll |