HRESULT CSchemeHandler::OnSourceOpen(_In_ IMFAsyncResult *pResult) { ComPtr<IUnknown> spState = pResult->GetStateNoAddRef(); if (!spState) { return MF_E_UNEXPECTED; } ComPtr<IMFAsyncResult> spSavedResult; HRESULT hr = S_OK; hr = spState.As(&spSavedResult); if (FAILED(hr)) { TRACEHR_RET(hr); } ComPtr<IUnknown> spunkSource; ComPtr<IMFMediaSource> spSource; hr = spSavedResult->GetObject(&spunkSource); if (SUCCEEDED(hr)) { hr = spunkSource.As(&spSource); if (SUCCEEDED(hr)) { CMediaSource *pSource = static_cast<CMediaSource *>(spSource.Get()); hr = pSource->EndOpen(pResult); } } spSavedResult->SetStatus(hr); hr = MFInvokeCallback(spSavedResult.Get()); TRACEHR_RET(hr); }