static HRESULT vboxDispKmtOpenAdapterViaHdc(const VBOXDISPKMT_CALLBACKS *pCallbacks, PVBOXDISPKMT_ADAPTER pAdapter) { D3DKMT_OPENADAPTERFROMHDC OpenAdapterData = {0}; HRESULT hr = vboxDispKmtAdpHdcCreate(&OpenAdapterData.hDc); if (!SUCCEEDED(hr)) return hr; Assert(OpenAdapterData.hDc); NTSTATUS Status = pCallbacks->pfnD3DKMTOpenAdapterFromHdc(&OpenAdapterData); if (NT_SUCCESS(Status)) { pAdapter->hAdapter = OpenAdapterData.hAdapter; pAdapter->hDc = OpenAdapterData.hDc; pAdapter->pCallbacks = pCallbacks; memset(&pAdapter->Luid, 0, sizeof (pAdapter->Luid)); return S_OK; } else { LogFunc(("pfnD3DKMTOpenAdapterFromGdiDisplayName failed, Status (0x%x)\n", Status)); hr = E_FAIL; } DeleteDC(OpenAdapterData.hDc); return hr; }
static HRESULT vboxDispKmtOpenAdapterViaHdc(PVBOXDISPKMT_CALLBACKS pCallbacks, PVBOXDISPKMT_ADAPTER pAdapter) { D3DKMT_OPENADAPTERFROMHDC OpenAdapterData = {0}; HRESULT hr = vboxDispKmtAdpHdcCreate(&OpenAdapterData.hDc); if (!SUCCEEDED(hr)) return hr; Assert(OpenAdapterData.hDc); NTSTATUS Status = pCallbacks->pfnD3DKMTOpenAdapterFromHdc(&OpenAdapterData); #ifdef DEBUG_misha /* may fail with xpdm driver */ Assert(NT_SUCCESS(Status)); #endif if (NT_SUCCESS(Status)) { pAdapter->hAdapter = OpenAdapterData.hAdapter; pAdapter->hDc = OpenAdapterData.hDc; pAdapter->pCallbacks = pCallbacks; memset(&pAdapter->Luid, 0, sizeof (pAdapter->Luid)); return S_OK; } else { Log((__FUNCTION__": pfnD3DKMTOpenAdapterFromGdiDisplayName failed, Status (0x%x)\n", Status)); hr = E_FAIL; } DeleteDC(OpenAdapterData.hDc); return hr; }