ID3D11Device1::OpenSharedResource1 method (d3d11_1.h)
Gives a device access to a shared resource that is referenced by a handle and that was created on a different device. You must have previously created the resource as shared and specified that it uses NT handles (that is, you set the D3D11_RESOURCE_MISC_SHARED_NTHANDLE flag).
HRESULT OpenSharedResource1( HANDLE hResource, REFIID returnedInterface, void **ppResource );
A handle to the resource to open. For more info about this parameter, see Remarks.
The globally unique identifier (GUID) for the resource interface. For more info about this parameter, see Remarks.
A pointer to a variable that receives a pointer to the interface for the shared resource object to access.
This method returns one of the Direct3D 11 return codes. This method also returns E_ACCESSDENIED if the permissions to access the resource aren't valid.
Platform Update for Windows 7: On Windows 7 or Windows Server 2008 R2 with the Platform Update for Windows 7 installed, OpenSharedResource1 fails with E_NOTIMPL because NTHANDLES are used. For more info about the Platform Update for Windows 7, see Platform Update for Windows 7.
The behavior of OpenSharedResource1 is similar to the behavior of the ID3D11Device::OpenSharedResource method; each call to OpenSharedResource1 to access a resource creates a new resource object. In other words, if you call OpenSharedResource1 twice and pass the same resource handle to hResource, you receive two resource objects with different IUnknown pointers.
To share a resource between two devices
- Create the resource as shared and specify that it uses NT handles, by setting the D3D11_RESOURCE_MISC_SHARED_NTHANDLE flag.
- Obtain the REFIID, or GUID, of the interface to the resource by using the __uuidof() macro. For example, __uuidof(ID3D11Texture2D) retrieves the GUID of the interface to a 2D texture.
- Query the resource for the IDXGIResource1 interface.
- Call the IDXGIResource1::CreateSharedHandle method to obtain the unique handle to the resource.
HANDLE handle = GetSharedHandleFromOtherProcess(); ID3D11Device1* pDevice; ID3D11Texture2D* pTexture2D; pDevice->OpenSharedResource1( handle, __uuidof(ID3D11Texture2D), (void**)&pTexture2D);
|Minimum supported client||Windows 8 and Platform Update for Windows 7 [desktop apps | UWP apps]|
|Minimum supported server||Windows Server 2012 and Platform Update for Windows Server 2008 R2 [desktop apps | UWP apps]|