HRESULT CSurfaceQueueDeviceD3D9::GetSharedHandle(IUnknown* pUnknown, HANDLE* pHandle)
{
    ASSERT(pUnknown);
    ASSERT(pHandle);
    
    HRESULT hr = S_OK;
    
    *pHandle = NULL;
    IDirect3DTexture9* pTexture;

    if (FAILED(hr = pUnknown->QueryInterface(__uuidof(IDirect3DTexture9), (void**)&pTexture)))
    {
        return hr;
    }

    DWORD size = sizeof(HANDLE);

    hr = pTexture->GetPrivateData(SharedHandleGuid, pHandle, &size);
    pTexture->Release();

    return hr;
}