+static HRESULT WINAPI MkProtocol_Start(IInternetProtocolEx *iface, LPCWSTR szUrl,
+ IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo,
+ DWORD grfPI, HANDLE_PTR dwReserved)
+{
+ MkProtocol *This = impl_from_IInternetProtocolEx(iface);
+ HRESULT hres;
+ IUri *uri;
+
+ TRACE("(%p)->(%s %p %p %08x %lx)\n", This, debugstr_w(szUrl), pOIProtSink,
+ pOIBindInfo, grfPI, dwReserved);
+
+ hres = CreateUri(szUrl, 0, 0, &uri);
+ if(FAILED(hres))
+ return hres;
+
+ hres = IInternetProtocolEx_StartEx(&This->IInternetProtocolEx_iface, uri, pOIProtSink,
+ pOIBindInfo, grfPI, (HANDLE*)dwReserved);
+
+ IUri_Release(uri);
+ return hres;
+}
+
+static HRESULT WINAPI MkProtocol_Continue(IInternetProtocolEx *iface, PROTOCOLDATA *pProtocolData)
+{
+ MkProtocol *This = impl_from_IInternetProtocolEx(iface);
+ FIXME("(%p)->(%p)\n", This, pProtocolData);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI MkProtocol_Abort(IInternetProtocolEx *iface, HRESULT hrReason,
+ DWORD dwOptions)
+{
+ MkProtocol *This = impl_from_IInternetProtocolEx(iface);
+ FIXME("(%p)->(%08x %08x)\n", This, hrReason, dwOptions);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI MkProtocol_Terminate(IInternetProtocolEx *iface, DWORD dwOptions)
+{
+ MkProtocol *This = impl_from_IInternetProtocolEx(iface);
+
+ TRACE("(%p)->(%08x)\n", This, dwOptions);
+
+ return S_OK;
+}
+
+static HRESULT WINAPI MkProtocol_Suspend(IInternetProtocolEx *iface)
+{
+ MkProtocol *This = impl_from_IInternetProtocolEx(iface);
+ FIXME("(%p)\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI MkProtocol_Resume(IInternetProtocolEx *iface)
+{
+ MkProtocol *This = impl_from_IInternetProtocolEx(iface);
+ FIXME("(%p)\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI MkProtocol_Read(IInternetProtocolEx *iface, void *pv,
+ ULONG cb, ULONG *pcbRead)
+{
+ MkProtocol *This = impl_from_IInternetProtocolEx(iface);
+
+ TRACE("(%p)->(%p %u %p)\n", This, pv, cb, pcbRead);
+
+ if(!This->stream)
+ return E_FAIL;
+
+ return IStream_Read(This->stream, pv, cb, pcbRead);
+}
+
+static HRESULT WINAPI MkProtocol_Seek(IInternetProtocolEx *iface, LARGE_INTEGER dlibMove,
+ DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition)
+{
+ MkProtocol *This = impl_from_IInternetProtocolEx(iface);
+ FIXME("(%p)->(%d %d %p)\n", This, dlibMove.u.LowPart, dwOrigin, plibNewPosition);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI MkProtocol_LockRequest(IInternetProtocolEx *iface, DWORD dwOptions)
+{
+ MkProtocol *This = impl_from_IInternetProtocolEx(iface);
+
+ TRACE("(%p)->(%08x)\n", This, dwOptions);
+
+ return S_OK;
+}
+
+static HRESULT WINAPI MkProtocol_UnlockRequest(IInternetProtocolEx *iface)
+{
+ MkProtocol *This = impl_from_IInternetProtocolEx(iface);
+
+ TRACE("(%p)\n", This);
+
+ return S_OK;
+}
+
+static HRESULT WINAPI MkProtocol_StartEx(IInternetProtocolEx *iface, IUri *pUri,