다음을 통해 공유


IDXGIResource1::CreateSharedHandle 메서드(dxgi1_2.h)

공유 리소스에 대한 핸들을 만듭니다. 그런 다음, 여러 Direct3D 디바이스에서 반환된 핸들을 사용할 수 있습니다.

구문

HRESULT CreateSharedHandle(
  [in, optional] const SECURITY_ATTRIBUTES *pAttributes,
  [in]           DWORD                     dwAccess,
  [in, optional] LPCWSTR                   lpName,
  [out]          HANDLE                    *pHandle
);

매개 변수

[in, optional] pAttributes

별도의 두 개의 관련 데이터 멤버인 선택적 보안 설명자와 자식 프로세스가 반환된 핸들을 상속할 수 있는지 여부를 결정하는 부울 값이 포함된 SECURITY_ATTRIBUTES 구조체에 대한 포인터입니다.

애플리케이션에서 만들 수 있는 자식 프로세스가 CreateSharedHandle에서 반환된 핸들을 상속하지 않도록 하고 반환된 핸들과 연결된 리소스를 기본 보안 설명자를 가져오는 경우 이 매개 변수를 NULL로 설정합니다.

구조체의 lpSecurityDescriptor 멤버는 리소스에 대한 SECURITY_DESCRIPTOR 지정합니다. 런타임에서 반환된 핸들과 연결된 리소스에 기본 보안 설명자를 할당하려면 이 멤버를 NULL 로 설정합니다. 리소스에 대한 기본 보안 설명자의 ACL은 작성자의 기본 또는 가장 토큰에서 가져옵니다. 자세한 내용은 동기화 개체 보안 및 액세스 권한을 참조하세요.

[in] dwAccess

리소스에 대한 요청된 액세스 권한입니다. DXGI는 일반 액세스 권한 외에도 다음 값을 정의합니다.

  • DXGI_SHARED_RESOURCE_READ ( 0x80000000L) - 리소스에 대한 읽기 권한을 지정합니다.
  • DXGI_SHARED_RESOURCE_WRITE ( 1 ) - 리소스에 대한 쓰기 액세스를 지정합니다.
비트 OR 연산을 사용하여 이러한 값을 결합할 수 있습니다.

[in, optional] lpName

공유할 리소스의 이름입니다. 이름은 MAX_PATH 문자로 제한됩니다. 이름 비교는 대/소문자를 구분합니다.

ID3D11Device1::OpenSharedResourceByName 메서드를 호출하여 이름으로 공유 리소스에 액세스하는 경우 리소스 이름이 필요합니다. ID3D11Device1::OpenSharedResource1 메서드를 호출하여 핸들로 공유 리소스에 액세스하는 경우 이 매개 변수를 NULL로 설정합니다.

lpName이 기존 리소스의 이름과 일치하는 경우 CreateSharedHandle은DXGI_ERROR_NAME_ALREADY_EXISTS 함께 실패합니다. 이러한 개체는 동일한 네임스페이스를 공유하기 때문에 발생합니다.

이름에는 전역 또는 세션 네임스페이스에 개체를 명시적으로 만드는 "전역" 또는 "로컬" 접두사를 사용할 수 있습니다. 이름의 나머지 부분에는 백슬래시 문자(\)를 제외한 모든 문자가 포함될 수 있습니다. 자세한 내용은 커널 개체 네임스페이스를 참조하세요. 빠른 사용자 전환은 터미널 서비스 세션을 사용하여 구현됩니다. 커널 개체 이름은 애플리케이션이 여러 사용자를 지원할 수 있도록 터미널 서비스에 대해 설명된 지침을 따라야 합니다.

개체는 프라이빗 네임스페이스에서 만들 수 있습니다. 자세한 내용은 개체 네임스페이스를 참조하세요.

[out] pHandle

공유할 리소스에 대한 NT HANDLE 값을 받는 변수에 대한 포인터입니다. 호출에서 이 핸들을 사용하여 리소스에 액세스할 수 있습니다.

반환 값

성공하면 S_OK 반환합니다. 그렇지 않으면 다음 값 중 하나를 반환합니다.

  • 매개 변수 중 하나가 잘못된지 DXGI_ERROR_INVALID_CALL.
  • 공유 하려는 리소스의 제공된 이름이 이미 다른 리소스와 연결되어 있는지 DXGI_ERROR_NAME_ALREADY_EXISTS.
  • 개체가 보호된 네임스페이스에 만들어지는지 E_ACCESSDENIED.
  • 핸들을 만드는 데 충분한 메모리를 사용할 수 없는 경우 E_OUTOFMEMORY.
  • DXGI_ERROR 항목에 설명된 다른 오류 코드일 수 있습니다.
Windows 7용 플랫폼 업데이트: Windows 7 용 플랫폼 업데이트가 설치된 Windows 7 또는 Windows Server 2008 R2에서 CreateSharedHandle 은 E_NOTIMPL 함께 실패합니다. Windows 7용 플랫폼 업데이트에 대한 자세한 내용은 Windows 7용 플랫폼 업데이트를 참조하세요.

설명

CreateSharedHandle은 리소스를 공유로 만들고 NT 핸들을 사용하도록 지정한 경우에만 NT 핸들을 반환합니다(즉, D3D11_RESOURCE_MISC_SHARED_NTHANDLE 설정하고 플래그 를 D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX ). 공유로 리소스를 만들고 NT 핸들을 사용하도록 지정한 경우 CreateSharedHandle 을 사용하여 공유 핸들을 가져와야 합니다. 이 경우 IDXGIResource::GetSharedHandle 메서드는 실패하므로 사용할 수 없습니다.

ID3D11Device1::OpenSharedResource1 메서드 호출에서 CreateSharedHandle이 반환하는 핸들을 전달하여 디바이스에 다른 디바이스에서 만든 공유 리소스에 대한 액세스 권한을 부여할 수 있습니다.

CreateSharedHandle이 반환하는 핸들은 NT 핸들이므로 CloseHandle, DuplicateHandle 등과 함께 핸들을 사용할 수 있습니다. 공유 리소스 에 대해 CreateSharedHandle 을 한 번만 호출할 수 있습니다. 나중에 호출이 실패합니다. 동일한 공유 리소스에 대한 핸들이 더 필요한 경우 DuplicateHandle을 호출합니다. 공유 리소스 핸들이 더 이상 필요하지 않으면 CloseHandle 을 호출하여 메모리 누수 방지를 위해 핸들을 닫습니다.

CreateSharedHandle을 호출하여 리소스를 공유할 때 리소스의 이름을 lpName에 전달하는 경우 이후에 ID3D11Device1::OpenSharedResourceByName 메서드를 호출하여 이 이름을 전달하여 다른 디바이스에 공유 리소스에 대한 액세스 권한을 부여할 수 있습니다. 명명된 리소스를 사용하는 경우 악의적인 사용자가 이 명명된 리소스를 사용하기 전에 사용할 수 있으며 앱이 시작되지 않도록 할 수 있습니다. 이 상황을 방지하려면 임의로 명명된 리소스를 만들고 권한이 있는 사용자만 가져올 수 있도록 이름을 저장합니다. 또는 이 용도로 파일을 사용할 수 있습니다. 앱을 사용자당 하나의 instance 제한하려면 사용자의 프로필 디렉터리에 잠긴 파일을 만듭니다.

공유로 리소스를 만들고 NT 핸들을 사용하도록 지정하지 않은 경우 CreateSharedHandle이 실패하므로 CreateSharedHandle을 사용하여 공유 핸들을 가져올 수 없습니다.

예제

ID3D11Texture2D* pTexture2D;
ID3D11Device* pDevice;

pDevice->CreateTexture2D(…, &pTexture2D); // Create the texture as shared with NT HANDLEs.

HANDLE handle;
IDXGIResource1* pResource;
pTexture2D->QueryInterface(__uuidof(IDXGIResource1), (void**) &pResource);
pResource->CreateSharedHandle(NULL, 
         DXGI_SHARED_RESOURCE_READ | DXGI_SHARED_RESOURCE_WRITE, 
         NULL,
         &handle);

// Pass the handle to another process to share the resource.

요구 사항

   
지원되는 최소 클라이언트 Windows 8 및 Windows 7용 플랫폼 업데이트 [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2012 및 Windows Server 2008 R2용 플랫폼 업데이트 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 dxgi1_2.h
라이브러리 Dxgi.lib

추가 정보

IDXGIResource1