+struct custom_uri {
+ IUri IUri_iface;
+ IUri *uri;
+};
+
+static inline struct custom_uri* impl_from_IUri(IUri *iface)
+{
+ return CONTAINING_RECORD(iface, struct custom_uri, IUri_iface);
+}
+
+static HRESULT WINAPI custom_uri_QueryInterface(IUri *iface, REFIID iid, void **out)
+{
+ if (IsEqualIID(iid, &IID_IUri) || IsEqualIID(iid, &IID_IUnknown))
+ {
+ *out = iface;
+ IUri_AddRef(iface);
+ return S_OK;
+ }
+
+ *out = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI custom_uri_AddRef(IUri *iface)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_AddRef(uri->uri);
+}
+
+static ULONG WINAPI custom_uri_Release(IUri *iface)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_Release(uri->uri);
+}
+
+static HRESULT WINAPI custom_uri_GetPropertyBSTR(IUri *iface, Uri_PROPERTY property, BSTR *value, DWORD flags)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetPropertyBSTR(uri->uri, property, value, flags);
+}
+
+static HRESULT WINAPI custom_uri_GetPropertyLength(IUri *iface, Uri_PROPERTY property, DWORD *length, DWORD flags)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetPropertyLength(uri->uri, property, length, flags);
+}
+
+static HRESULT WINAPI custom_uri_GetPropertyDWORD(IUri *iface, Uri_PROPERTY property, DWORD *value, DWORD flags)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetPropertyDWORD(uri->uri, property, value, flags);
+}
+
+static HRESULT WINAPI custom_uri_HasProperty(IUri *iface, Uri_PROPERTY property, BOOL *has_property)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_HasProperty(uri->uri, property, has_property);
+}
+
+static HRESULT WINAPI custom_uri_GetAbsoluteUri(IUri *iface, BSTR *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetAbsoluteUri(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetAuthority(IUri *iface, BSTR *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetAbsoluteUri(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetDisplayUri(IUri *iface, BSTR *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetAbsoluteUri(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetDomain(IUri *iface, BSTR *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetAbsoluteUri(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetExtension(IUri *iface, BSTR *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetAbsoluteUri(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetFragment(IUri *iface, BSTR *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetAbsoluteUri(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetHost(IUri *iface, BSTR *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetAbsoluteUri(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetPassword(IUri *iface, BSTR *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetAbsoluteUri(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetPath(IUri *iface, BSTR *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetAbsoluteUri(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetPathAndQuery(IUri *iface, BSTR *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetAbsoluteUri(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetQuery(IUri *iface, BSTR *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetAbsoluteUri(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetRawUri(IUri *iface, BSTR *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetAbsoluteUri(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetSchemeName(IUri *iface, BSTR *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetSchemeName(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetUserInfo(IUri *iface, BSTR *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetUserInfo(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetUserName(IUri *iface, BSTR *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetUserName(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetHostType(IUri *iface, DWORD *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetHostType(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetPort(IUri *iface, DWORD *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetPort(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetScheme(IUri *iface, DWORD *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetScheme(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetZone(IUri *iface, DWORD *value)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetZone(uri->uri, value);
+}
+
+static HRESULT WINAPI custom_uri_GetProperties(IUri *iface, DWORD *flags)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_GetProperties(uri->uri, flags);
+}
+
+static HRESULT WINAPI custom_uri_IsEqual(IUri *iface, IUri *pUri, BOOL *is_equal)
+{
+ struct custom_uri *uri = impl_from_IUri(iface);
+ return IUri_IsEqual(uri->uri, pUri, is_equal);
+}
+
+static const IUriVtbl custom_uri_vtbl =
+{
+ custom_uri_QueryInterface,
+ custom_uri_AddRef,
+ custom_uri_Release,
+ custom_uri_GetPropertyBSTR,
+ custom_uri_GetPropertyLength,
+ custom_uri_GetPropertyDWORD,
+ custom_uri_HasProperty,
+ custom_uri_GetAbsoluteUri,
+ custom_uri_GetAuthority,
+ custom_uri_GetDisplayUri,
+ custom_uri_GetDomain,
+ custom_uri_GetExtension,
+ custom_uri_GetFragment,
+ custom_uri_GetHost,
+ custom_uri_GetPassword,
+ custom_uri_GetPath,
+ custom_uri_GetPathAndQuery,
+ custom_uri_GetQuery,
+ custom_uri_GetRawUri,
+ custom_uri_GetSchemeName,
+ custom_uri_GetUserInfo,
+ custom_uri_GetUserName,
+ custom_uri_GetHostType,
+ custom_uri_GetPort,
+ custom_uri_GetScheme,
+ custom_uri_GetZone,
+ custom_uri_GetProperties,
+ custom_uri_IsEqual,
+};
+