[URLMON]
authorChristoph von Wittich <christoph_vw@reactos.org>
Thu, 4 Mar 2010 15:24:17 +0000 (15:24 +0000)
committerChristoph von Wittich <christoph_vw@reactos.org>
Thu, 4 Mar 2010 15:24:17 +0000 (15:24 +0000)
sync urlmon to wine 1.1.39

svn path=/trunk/; revision=45834

18 files changed:
reactos/dll/win32/urlmon/binding.c
reactos/dll/win32/urlmon/bindprot.c
reactos/dll/win32/urlmon/download.c
reactos/dll/win32/urlmon/http.c
reactos/dll/win32/urlmon/internet.c
reactos/dll/win32/urlmon/protocol.c
reactos/dll/win32/urlmon/regsvr.c
reactos/dll/win32/urlmon/sec_mgr.c
reactos/dll/win32/urlmon/uri.c [new file with mode: 0644]
reactos/dll/win32/urlmon/urlmon.inf
reactos/dll/win32/urlmon/urlmon.rbuild
reactos/dll/win32/urlmon/urlmon.spec
reactos/dll/win32/urlmon/urlmon_local.idl [deleted file]
reactos/dll/win32/urlmon/urlmon_main.c
reactos/dll/win32/urlmon/urlmon_main.h
reactos/dll/win32/urlmon/urlmon_urlmon.idl [new file with mode: 0644]
reactos/dll/win32/urlmon/usrmarshal.c [new file with mode: 0644]
reactos/include/psdk/urlmon.idl

index 210e8e2..dcf0207 100644 (file)
@@ -98,6 +98,7 @@ struct Binding {
     LPWSTR mime;
     UINT clipboard_format;
     LPWSTR url;
     LPWSTR mime;
     UINT clipboard_format;
     LPWSTR url;
+    LPWSTR redirect_url;
     IID iid;
     BOOL report_mime;
     DWORD state;
     IID iid;
     BOOL report_mime;
     DWORD state;
@@ -829,6 +830,7 @@ static ULONG WINAPI Binding_Release(IBinding *iface)
         This->section.DebugInfo->Spare[0] = 0;
         DeleteCriticalSection(&This->section);
         heap_free(This->mime);
         This->section.DebugInfo->Spare[0] = 0;
         DeleteCriticalSection(&This->section);
         heap_free(This->mime);
+        heap_free(This->redirect_url);
         heap_free(This->url);
 
         heap_free(This);
         heap_free(This->url);
 
         heap_free(This);
@@ -967,6 +969,11 @@ static HRESULT WINAPI InternetProtocolSink_ReportProgress(IInternetProtocolSink
     case BINDSTATUS_CONNECTING:
         on_progress(This, 0, 0, BINDSTATUS_CONNECTING, szStatusText);
         break;
     case BINDSTATUS_CONNECTING:
         on_progress(This, 0, 0, BINDSTATUS_CONNECTING, szStatusText);
         break;
+    case BINDSTATUS_REDIRECTING:
+        heap_free(This->redirect_url);
+        This->redirect_url = heap_strdupW(szStatusText);
+        on_progress(This, 0, 0, BINDSTATUS_REDIRECTING, szStatusText);
+        break;
     case BINDSTATUS_BEGINDOWNLOADDATA:
         fill_stgmed_buffer(This->stgmed_buf);
         break;
     case BINDSTATUS_BEGINDOWNLOADDATA:
         fill_stgmed_buffer(This->stgmed_buf);
         break;
@@ -1474,6 +1481,8 @@ static HRESULT start_binding(IMoniker *mon, Binding *binding_ctx, LPCWSTR url, I
 
     if(binding_ctx) {
         set_binding_sink(binding->protocol, PROTSINK(binding));
 
     if(binding_ctx) {
         set_binding_sink(binding->protocol, PROTSINK(binding));
+        if(binding_ctx->redirect_url)
+            IBindStatusCallback_OnProgress(binding->callback, 0, 0, BINDSTATUS_REDIRECTING, binding_ctx->redirect_url);
         report_data(binding, 0, 0, 0);
     }else {
         hres = IInternetProtocol_Start(binding->protocol, url, PROTSINK(binding),
         report_data(binding, 0, 0, 0);
     }else {
         hres = IInternetProtocol_Start(binding->protocol, url, PROTSINK(binding),
index e4f203d..07d6fc2 100644 (file)
@@ -205,7 +205,7 @@ static void push_task(BindProtocol *This, task_header_t *task, task_proc_t proc)
         This->task_queue_tail = task;
     }else {
         This->task_queue_tail = This->task_queue_head = task;
         This->task_queue_tail = task;
     }else {
         This->task_queue_tail = This->task_queue_head = task;
-        do_post = TRUE;
+        do_post = !This->continue_call;
     }
 
     LeaveCriticalSection(&This->section);
     }
 
     LeaveCriticalSection(&This->section);
@@ -960,6 +960,7 @@ static void report_progress(BindProtocol *This, ULONG status_code, LPCWSTR statu
     switch(status_code) {
     case BINDSTATUS_FINDINGRESOURCE:
     case BINDSTATUS_CONNECTING:
     switch(status_code) {
     case BINDSTATUS_FINDINGRESOURCE:
     case BINDSTATUS_CONNECTING:
+    case BINDSTATUS_REDIRECTING:
     case BINDSTATUS_BEGINDOWNLOADDATA:
     case BINDSTATUS_SENDINGREQUEST:
     case BINDSTATUS_CACHEFILENAMEAVAILABLE:
     case BINDSTATUS_BEGINDOWNLOADDATA:
     case BINDSTATUS_SENDINGREQUEST:
     case BINDSTATUS_CACHEFILENAMEAVAILABLE:
index d81dffa..ebcb9c9 100644 (file)
@@ -140,6 +140,7 @@ static HRESULT WINAPI DownloadBSC_OnProgress(IBindStatusCallback *iface, ULONG u
             debugstr_w(szStatusText));
 
     switch(ulStatusCode) {
             debugstr_w(szStatusText));
 
     switch(ulStatusCode) {
+    case BINDSTATUS_CONNECTING:
     case BINDSTATUS_BEGINDOWNLOADDATA:
     case BINDSTATUS_DOWNLOADINGDATA:
     case BINDSTATUS_ENDDOWNLOADDATA:
     case BINDSTATUS_BEGINDOWNLOADDATA:
     case BINDSTATUS_DOWNLOADINGDATA:
     case BINDSTATUS_ENDDOWNLOADDATA:
@@ -153,8 +154,7 @@ static HRESULT WINAPI DownloadBSC_OnProgress(IBindStatusCallback *iface, ULONG u
         This->cache_file = heap_strdupW(szStatusText);
         break;
 
         This->cache_file = heap_strdupW(szStatusText);
         break;
 
-    case BINDSTATUS_FINDINGRESOURCE:
-    case BINDSTATUS_CONNECTING:
+    case BINDSTATUS_FINDINGRESOURCE: /* FIXME */
         break;
 
     default:
         break;
 
     default:
index bb81ec8..fc0b8c4 100644 (file)
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-/*
- * TODO:
- * - Handle redirects as native.
- */
-
 #include "urlmon_main.h"
 #include "wininet.h"
 
 #include "urlmon_main.h"
 #include "wininet.h"
 
@@ -84,7 +79,7 @@ static HRESULT HttpProtocol_open_request(Protocol *prot, LPCWSTR url, DWORD requ
     URL_COMPONENTSW url_comp;
     BYTE security_id[512];
     DWORD len = 0;
     URL_COMPONENTSW url_comp;
     BYTE security_id[512];
     DWORD len = 0;
-    ULONG num = 0;
+    ULONG num;
     BOOL res, b;
     HRESULT hres;
 
     BOOL res, b;
     HRESULT hres;
 
@@ -95,7 +90,7 @@ static HRESULT HttpProtocol_open_request(Protocol *prot, LPCWSTR url, DWORD requ
 
     memset(&url_comp, 0, sizeof(url_comp));
     url_comp.dwStructSize = sizeof(url_comp);
 
     memset(&url_comp, 0, sizeof(url_comp));
     url_comp.dwStructSize = sizeof(url_comp);
-    url_comp.dwSchemeLength = url_comp.dwHostNameLength = url_comp.dwUrlPathLength =
+    url_comp.dwSchemeLength = url_comp.dwHostNameLength = url_comp.dwUrlPathLength = url_comp.dwExtraInfoLength =
         url_comp.dwUserNameLength = url_comp.dwPasswordLength = 1;
     if (!InternetCrackUrlW(url, 0, 0, &url_comp))
         return MK_E_SYNTAX;
         url_comp.dwUserNameLength = url_comp.dwPasswordLength = 1;
     if (!InternetCrackUrlW(url, 0, 0, &url_comp))
         return MK_E_SYNTAX;
@@ -124,7 +119,12 @@ static HRESULT HttpProtocol_open_request(Protocol *prot, LPCWSTR url, DWORD requ
     }
     accept_mimes[num] = 0;
 
     }
     accept_mimes[num] = 0;
 
-    path = heap_strndupW(url_comp.lpszUrlPath, url_comp.dwUrlPathLength);
+    path = heap_alloc((url_comp.dwUrlPathLength+url_comp.dwExtraInfoLength+1)*sizeof(WCHAR));
+    if(url_comp.dwUrlPathLength)
+        memcpy(path, url_comp.lpszUrlPath, url_comp.dwUrlPathLength*sizeof(WCHAR));
+    if(url_comp.dwExtraInfoLength)
+        memcpy(path+url_comp.dwUrlPathLength, url_comp.lpszExtraInfo, url_comp.dwExtraInfoLength*sizeof(WCHAR));
+    path[url_comp.dwUrlPathLength+url_comp.dwExtraInfoLength] = 0;
     if(This->https)
         request_flags |= INTERNET_FLAG_SECURE;
     This->base.request = HttpOpenRequestW(This->base.connection,
     if(This->https)
         request_flags |= INTERNET_FLAG_SECURE;
     This->base.request = HttpOpenRequestW(This->base.connection,
@@ -132,8 +132,8 @@ static HRESULT HttpProtocol_open_request(Protocol *prot, LPCWSTR url, DWORD requ
                 ? wszBindVerb[This->base.bind_info.dwBindVerb] : This->base.bind_info.szCustomVerb,
             path, NULL, NULL, (LPCWSTR *)accept_mimes, request_flags, (DWORD_PTR)&This->base);
     heap_free(path);
                 ? wszBindVerb[This->base.bind_info.dwBindVerb] : This->base.bind_info.szCustomVerb,
             path, NULL, NULL, (LPCWSTR *)accept_mimes, request_flags, (DWORD_PTR)&This->base);
     heap_free(path);
-    while (num<sizeof(accept_mimes)/sizeof(accept_mimes[0]) && accept_mimes[num])
-        CoTaskMemFree(accept_mimes[num++]);
+    while(num--)
+        CoTaskMemFree(accept_mimes[num]);
     if (!This->base.request) {
         WARN("HttpOpenRequest failed: %d\n", GetLastError());
         return INET_E_RESOURCE_NOT_FOUND;
     if (!This->base.request) {
         WARN("HttpOpenRequest failed: %d\n", GetLastError());
         return INET_E_RESOURCE_NOT_FOUND;
@@ -227,7 +227,7 @@ static HRESULT HttpProtocol_open_request(Protocol *prot, LPCWSTR url, DWORD requ
 static HRESULT HttpProtocol_start_downloading(Protocol *prot)
 {
     HttpProtocol *This = ASYNCPROTOCOL_THIS(prot);
 static HRESULT HttpProtocol_start_downloading(Protocol *prot)
 {
     HttpProtocol *This = ASYNCPROTOCOL_THIS(prot);
-    LPWSTR content_type = 0, content_length = 0;
+    LPWSTR content_type, content_length, ranges;
     DWORD len = sizeof(DWORD);
     DWORD status_code;
     BOOL res;
     DWORD len = sizeof(DWORD);
     DWORD status_code;
     BOOL res;
@@ -258,8 +258,11 @@ static HRESULT HttpProtocol_start_downloading(Protocol *prot)
         WARN("HttpQueryInfo failed: %d\n", GetLastError());
     }
 
         WARN("HttpQueryInfo failed: %d\n", GetLastError());
     }
 
-    if(This->https)
+    ranges = query_http_info(This, HTTP_QUERY_ACCEPT_RANGES);
+    if(ranges) {
         IInternetProtocolSink_ReportProgress(This->base.protocol_sink, BINDSTATUS_ACCEPTRANGES, NULL);
         IInternetProtocolSink_ReportProgress(This->base.protocol_sink, BINDSTATUS_ACCEPTRANGES, NULL);
+        heap_free(ranges);
+    }
 
     content_type = query_http_info(This, HTTP_QUERY_CONTENT_TYPE);
     if(content_type) {
 
     content_type = query_http_info(This, HTTP_QUERY_CONTENT_TYPE);
     if(content_type) {
index 8bde7b4..6a79e48 100644 (file)
@@ -38,6 +38,9 @@ static HRESULT parse_schema(LPCWSTR url, DWORD flags, LPWSTR result, DWORD size,
     if(ptr)
         len = ptr-url;
 
     if(ptr)
         len = ptr-url;
 
+    if(rsize)
+        *rsize = len;
+
     if(len >= size)
         return E_POINTER;
 
     if(len >= size)
         return E_POINTER;
 
@@ -45,9 +48,6 @@ static HRESULT parse_schema(LPCWSTR url, DWORD flags, LPWSTR result, DWORD size,
         memcpy(result, url, len*sizeof(WCHAR));
     result[len] = 0;
 
         memcpy(result, url, len*sizeof(WCHAR));
     result[len] = 0;
 
-    if(rsize)
-        *rsize = len;
-
     return S_OK;
 }
 
     return S_OK;
 }
 
@@ -170,6 +170,100 @@ static HRESULT parse_security_domain(LPCWSTR url, DWORD flags, LPWSTR result,
     return E_FAIL;
 }
 
     return E_FAIL;
 }
 
+static HRESULT parse_domain(LPCWSTR url, DWORD flags, LPWSTR result,
+        DWORD size, DWORD *rsize)
+{
+    IInternetProtocolInfo *protocol_info;
+    HRESULT hres;
+
+    TRACE("(%s %08x %p %d %p)\n", debugstr_w(url), flags, result, size, rsize);
+
+    protocol_info = get_protocol_info(url);
+
+    if(protocol_info) {
+        hres = IInternetProtocolInfo_ParseUrl(protocol_info, url, PARSE_DOMAIN,
+                flags, result, size, rsize, 0);
+        IInternetProtocolInfo_Release(protocol_info);
+        if(SUCCEEDED(hres))
+            return hres;
+    }
+
+    hres = UrlGetPartW(url, result, &size, URL_PART_HOSTNAME, flags);
+    if(rsize)
+        *rsize = size;
+
+    if(hres == E_POINTER)
+        return S_FALSE;
+
+    if(FAILED(hres))
+        return E_FAIL;
+    return S_OK;
+}
+
+static HRESULT parse_rootdocument(LPCWSTR url, DWORD flags, LPWSTR result,
+        DWORD size, DWORD *rsize)
+{
+    IInternetProtocolInfo *protocol_info;
+    PARSEDURLW url_info;
+    HRESULT hres;
+
+    TRACE("(%s %08x %p %d %p)\n", debugstr_w(url), flags, result, size, rsize);
+
+    protocol_info = get_protocol_info(url);
+
+    if(protocol_info) {
+        hres = IInternetProtocolInfo_ParseUrl(protocol_info, url, PARSE_ROOTDOCUMENT,
+                flags, result, size, rsize, 0);
+        IInternetProtocolInfo_Release(protocol_info);
+        if(SUCCEEDED(hres))
+            return hres;
+    }
+
+    url_info.cbSize = sizeof(url_info);
+    if(FAILED(ParseURLW(url, &url_info)))
+        return E_FAIL;
+
+    switch(url_info.nScheme) {
+        case URL_SCHEME_FTP:
+        case URL_SCHEME_HTTP:
+        case URL_SCHEME_HTTPS:
+            if(url_info.cchSuffix<3 || *(url_info.pszSuffix)!='/'
+                    || *(url_info.pszSuffix+1)!='/')
+                return E_FAIL;
+
+            if(size < url_info.cchProtocol+3) {
+                size = 0;
+                hres = UrlGetPartW(url, result, &size, URL_PART_HOSTNAME, flags);
+
+                if(rsize)
+                    *rsize = size+url_info.cchProtocol+3;
+
+                if(hres == E_POINTER)
+                    return S_FALSE;
+
+                return hres;
+            }
+
+            size -= url_info.cchProtocol+3;
+            hres = UrlGetPartW(url, result+url_info.cchProtocol+3,
+                    &size, URL_PART_HOSTNAME, flags);
+
+            if(hres == E_POINTER)
+                return S_FALSE;
+
+            if(FAILED(hres))
+                return E_FAIL;
+
+            if(rsize)
+                *rsize = size+url_info.cchProtocol+3;
+
+            memcpy(result, url, (url_info.cchProtocol+3)*sizeof(WCHAR));
+            return hres;
+        default:
+            return E_FAIL;
+    }
+}
+
 /**************************************************************************
  *          CoInternetParseUrl    (URLMON.@)
  */
 /**************************************************************************
  *          CoInternetParseUrl    (URLMON.@)
  */
@@ -192,6 +286,10 @@ HRESULT WINAPI CoInternetParseUrl(LPCWSTR pwzUrl, PARSEACTION ParseAction, DWORD
         return parse_schema(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
     case PARSE_SECURITY_DOMAIN:
         return parse_security_domain(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
         return parse_schema(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
     case PARSE_SECURITY_DOMAIN:
         return parse_security_domain(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
+    case PARSE_DOMAIN:
+        return parse_domain(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
+    case PARSE_ROOTDOCUMENT:
+        return parse_rootdocument(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
     default:
         FIXME("not supported action %d\n", ParseAction);
     }
     default:
         FIXME("not supported action %d\n", ParseAction);
     }
index 9b25cbf..3f3cbe5 100644 (file)
@@ -151,6 +151,11 @@ static void WINAPI internet_status_callback(HINTERNET internet, DWORD_PTR contex
         report_progress(protocol, BINDSTATUS_SENDINGREQUEST, (LPWSTR)status_info);
         break;
 
         report_progress(protocol, BINDSTATUS_SENDINGREQUEST, (LPWSTR)status_info);
         break;
 
+    case INTERNET_STATUS_REDIRECT:
+        TRACE("%p INTERNET_STATUS_REDIRECT\n", protocol);
+        report_progress(protocol, BINDSTATUS_REDIRECTING, (LPWSTR)status_info);
+        break;
+
     case INTERNET_STATUS_REQUEST_COMPLETE:
         request_complete(protocol, status_info);
         break;
     case INTERNET_STATUS_REQUEST_COMPLETE:
         request_complete(protocol, status_info);
         break;
index 9561a23..9e27825 100644 (file)
@@ -495,6 +495,12 @@ static struct regsvr_coclass const coclass_list[] = {
         "urlmon.dll",
         "Both"
     },
         "urlmon.dll",
         "Both"
     },
+    {   &CLSID_PSFactoryBuffer,
+        "URLMoniker ProxyStub Factory",
+        NULL,
+        "urlmon.dll",
+        "Apartment"
+    },
     { NULL }                   /* list terminator */
 };
 
     { NULL }                   /* list terminator */
 };
 
@@ -573,12 +579,14 @@ HRESULT WINAPI DllRegisterServer(void)
 
     TRACE("\n");
 
 
     TRACE("\n");
 
-    hr = register_coclasses(coclass_list);
-    if (SUCCEEDED(hr))
+    hr = URLMON_DllRegisterServer();
+    if(SUCCEEDED(hr))
+        hr = register_coclasses(coclass_list);
+    if(SUCCEEDED(hr))
        hr = register_interfaces(interface_list);
        hr = register_interfaces(interface_list);
-    if(FAILED(hr))
-        return hr;
-    return register_inf(TRUE);
+    if(SUCCEEDED(hr))
+        hr = register_inf(TRUE);
+    return hr;
 }
 
 /***********************************************************************
 }
 
 /***********************************************************************
@@ -590,10 +598,12 @@ HRESULT WINAPI DllUnregisterServer(void)
 
     TRACE("\n");
 
 
     TRACE("\n");
 
-    hr = unregister_coclasses(coclass_list);
-    if (SUCCEEDED(hr))
+    hr = URLMON_DllUnregisterServer();
+    if(SUCCEEDED(hr))
+        hr = unregister_coclasses(coclass_list);
+    if(SUCCEEDED(hr))
        hr = unregister_interfaces(interface_list);
        hr = unregister_interfaces(interface_list);
-    if(FAILED(hr))
-        return hr;
-    return register_inf(FALSE);
+    if(SUCCEEDED(hr))
+        hr = register_inf(FALSE);
+    return hr;
 }
 }
index 7a1255a..81f2f50 100644 (file)
@@ -147,12 +147,18 @@ static HRESULT map_url_to_zone(LPCWSTR url, DWORD *zone, LPWSTR *ret_url)
     DWORD size=0;
     HRESULT hres;
 
     DWORD size=0;
     HRESULT hres;
 
-    secur_url = heap_alloc(INTERNET_MAX_URL_LENGTH*sizeof(WCHAR));
     *zone = -1;
 
     *zone = -1;
 
-    hres = CoInternetParseUrl(url, PARSE_SECURITY_URL, 0, secur_url, INTERNET_MAX_URL_LENGTH, &size, 0);
-    if(hres != S_OK)
-        strcpyW(secur_url, url);
+    hres = CoInternetGetSecurityUrl(url, &secur_url, PSU_SECURITY_URL_ONLY, 0);
+    if(hres != S_OK) {
+        size = strlenW(url)*sizeof(WCHAR);
+
+        secur_url = heap_alloc(size);
+        if(!secur_url)
+            return E_OUTOFMEMORY;
+
+        memcpy(secur_url, url, size);
+    }
 
     hres = CoInternetParseUrl(secur_url, PARSE_SCHEMA, 0, schema, sizeof(schema)/sizeof(WCHAR), &size, 0);
     if(FAILED(hres) || !*schema) {
 
     hres = CoInternetParseUrl(secur_url, PARSE_SCHEMA, 0, schema, sizeof(schema)/sizeof(WCHAR), &size, 0);
     if(FAILED(hres) || !*schema) {
@@ -1228,3 +1234,84 @@ HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider* pSP, IInternetZoneM
     TRACE("(%p %p %x)\n", pSP, ppZM, dwReserved);
     return ZoneMgrImpl_Construct(NULL, (void**)ppZM);
 }
     TRACE("(%p %p %x)\n", pSP, ppZM, dwReserved);
     return ZoneMgrImpl_Construct(NULL, (void**)ppZM);
 }
+
+/********************************************************************
+ *      CoInternetGetSecurityUrl (URLMON.@)
+ */
+HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR pwzUrl, LPWSTR *ppwzSecUrl, PSUACTION psuAction, DWORD dwReserved)
+{
+    WCHAR buf1[INTERNET_MAX_URL_LENGTH], buf2[INTERNET_MAX_URL_LENGTH];
+    LPWSTR url, domain;
+    DWORD len;
+    HRESULT hres;
+
+    TRACE("(%p,%p,%u,%u)\n", pwzUrl, ppwzSecUrl, psuAction, dwReserved);
+
+    url = buf1;
+    domain = buf2;
+    strcpyW(url, pwzUrl);
+
+    while(1) {
+        hres = CoInternetParseUrl(url, PARSE_SECURITY_URL, 0, domain, INTERNET_MAX_URL_LENGTH, &len, 0);
+        if(hres!=S_OK || !strcmpW(url, domain))
+            break;
+
+        if(url == buf1) {
+            url = buf2;
+            domain = buf1;
+        } else {
+            url = buf1;
+            domain = buf2;
+        }
+    }
+
+    if(psuAction==PSU_SECURITY_URL_ONLY) {
+        len = lstrlenW(url)+1;
+        *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
+        if(!*ppwzSecUrl)
+            return E_OUTOFMEMORY;
+
+        memcpy(*ppwzSecUrl, url, len*sizeof(WCHAR));
+        return S_OK;
+    }
+
+    hres = CoInternetParseUrl(url, PARSE_SECURITY_DOMAIN, 0, domain,
+            INTERNET_MAX_URL_LENGTH, &len, 0);
+    if(SUCCEEDED(hres)) {
+        len++;
+        *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
+        if(!*ppwzSecUrl)
+            return E_OUTOFMEMORY;
+
+        memcpy(*ppwzSecUrl, domain, len*sizeof(WCHAR));
+        return S_OK;
+    }
+
+    hres = CoInternetParseUrl(url, PARSE_ROOTDOCUMENT, 0, domain, 0, &len, 0);
+    if(hres == S_FALSE) {
+        hres = CoInternetParseUrl(url, PARSE_SCHEMA, 0, domain,
+                INTERNET_MAX_URL_LENGTH, &len, 0);
+        if(hres == S_OK) {
+            domain[len] = ':';
+            hres = CoInternetParseUrl(url, PARSE_DOMAIN, 0, domain+len+1,
+                    INTERNET_MAX_URL_LENGTH-len-1, &len, 0);
+            if(hres == S_OK) {
+                len = lstrlenW(domain)+1;
+                *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
+                if(!*ppwzSecUrl)
+                    return E_OUTOFMEMORY;
+
+                memcpy(*ppwzSecUrl, domain, len*sizeof(WCHAR));
+                return S_OK;
+            }
+        }
+    }
+
+    len = lstrlenW(url)+1;
+    *ppwzSecUrl = CoTaskMemAlloc(len*sizeof(WCHAR));
+    if(!*ppwzSecUrl)
+        return E_OUTOFMEMORY;
+
+    memcpy(*ppwzSecUrl, url, len*sizeof(WCHAR));
+    return S_OK;
+}
diff --git a/reactos/dll/win32/urlmon/uri.c b/reactos/dll/win32/urlmon/uri.c
new file mode 100644 (file)
index 0000000..d4d6b47
--- /dev/null
@@ -0,0 +1,302 @@
+/*
+ * Copyright 2010 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "urlmon_main.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
+
+typedef struct {
+    const IUriVtbl  *lpIUriVtbl;
+    LONG ref;
+} Uri;
+
+#define URI(x)  ((IUri*)  &(x)->lpIUriVtbl)
+
+#define URI_THIS(iface) DEFINE_THIS(Uri, IUri, iface)
+
+static HRESULT WINAPI Uri_QueryInterface(IUri *iface, REFIID riid, void **ppv)
+{
+    Uri *This = URI_THIS(iface);
+
+    if(IsEqualGUID(&IID_IUnknown, riid)) {
+        TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
+        *ppv = URI(This);
+    }else if(IsEqualGUID(&IID_IUri, riid)) {
+        TRACE("(%p)->(IID_IUri %p)\n", This, ppv);
+        *ppv = URI(This);
+    }else {
+        TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
+        *ppv = NULL;
+        return E_NOINTERFACE;
+    }
+
+    IUnknown_AddRef((IUnknown*)*ppv);
+    return S_OK;
+}
+
+static ULONG WINAPI Uri_AddRef(IUri *iface)
+{
+    Uri *This = URI_THIS(iface);
+    LONG ref = InterlockedIncrement(&This->ref);
+
+    TRACE("(%p) ref=%d\n", This, ref);
+
+    return ref;
+}
+
+static ULONG WINAPI Uri_Release(IUri *iface)
+{
+    Uri *This = URI_THIS(iface);
+    LONG ref = InterlockedDecrement(&This->ref);
+
+    TRACE("(%p) ref=%d\n", This, ref);
+
+    if(!ref)
+        heap_free(This);
+
+    return ref;
+}
+
+static HRESULT WINAPI Uri_GetPropertyBSTR(IUri *iface, Uri_PROPERTY uriProp, BSTR *pbstrProperty, DWORD dwFlags)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%d %p %x)\n", This, uriProp, pbstrProperty, dwFlags);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetPropertyLength(IUri *iface, Uri_PROPERTY uriProp, DWORD *pcchProperty, DWORD dwFlags)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetPropertyDWORD(IUri *iface, Uri_PROPERTY uriProp, DWORD *pcchProperty, DWORD dwFlags)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_HasProperty(IUri *iface, Uri_PROPERTY uriProp, BOOL *pfHasProperty)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->()\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetAbsoluteUri(IUri *iface, BSTR *pstrAbsoluteUri)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pstrAbsoluteUri);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetAuthority(IUri *iface, BSTR *pstrAuthority)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pstrAuthority);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetDisplayUri(IUri *iface, BSTR *pstrDisplayUri)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pstrDisplayUri);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetDomain(IUri *iface, BSTR *pstrDomain)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pstrDomain);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetExtension(IUri *iface, BSTR *pstrExtension)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pstrExtension);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetFragment(IUri *iface, BSTR *pstrFragment)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pstrFragment);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetHost(IUri *iface, BSTR *pstrHost)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pstrHost);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetPassword(IUri *iface, BSTR *pstrPassword)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pstrPassword);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetPath(IUri *iface, BSTR *pstrPath)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pstrPath);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetPathAndQuery(IUri *iface, BSTR *pstrPathAndQuery)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pstrPathAndQuery);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetQuery(IUri *iface, BSTR *pstrQuery)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pstrQuery);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetRawUri(IUri *iface, BSTR *pstrRawUri)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pstrRawUri);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetSchemeName(IUri *iface, BSTR *pstrSchemeName)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pstrSchemeName);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetUserInfo(IUri *iface, BSTR *pstrUserInfo)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pstrUserInfo);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetUserName(IUri *iface, BSTR *pstrUserName)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pstrUserName);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetHostType(IUri *iface, DWORD *pdwHostType)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pdwHostType);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetPort(IUri *iface, DWORD *pdwPort)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pdwPort);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetScheme(IUri *iface, DWORD *pdwScheme)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pdwScheme);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetZone(IUri *iface, DWORD *pdwZone)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pdwZone);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_GetProperties(IUri *iface, DWORD *pdwProperties)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pdwProperties);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI Uri_IsEqual(IUri *iface, IUri *pUri, BOOL *pfEqual)
+{
+    Uri *This = URI_THIS(iface);
+    FIXME("(%p)->(%p %p)\n", This, pUri, pfEqual);
+    return E_NOTIMPL;
+}
+
+#undef URI_THIS
+
+static const IUriVtbl UriVtbl = {
+    Uri_QueryInterface,
+    Uri_AddRef,
+    Uri_Release,
+    Uri_GetPropertyBSTR,
+    Uri_GetPropertyLength,
+    Uri_GetPropertyDWORD,
+    Uri_HasProperty,
+    Uri_GetAbsoluteUri,
+    Uri_GetAuthority,
+    Uri_GetDisplayUri,
+    Uri_GetDomain,
+    Uri_GetExtension,
+    Uri_GetFragment,
+    Uri_GetHost,
+    Uri_GetPassword,
+    Uri_GetPath,
+    Uri_GetPathAndQuery,
+    Uri_GetQuery,
+    Uri_GetRawUri,
+    Uri_GetSchemeName,
+    Uri_GetUserInfo,
+    Uri_GetUserName,
+    Uri_GetHostType,
+    Uri_GetPort,
+    Uri_GetScheme,
+    Uri_GetZone,
+    Uri_GetProperties,
+    Uri_IsEqual
+};
+
+/***********************************************************************
+ *           CreateUri (urlmon.@)
+ */
+HRESULT WINAPI CreateUri(LPCWSTR pwzURI, DWORD dwFlags, DWORD_PTR dwReserved, IUri **ppURI)
+{
+    Uri *ret;
+
+    TRACE("(%s %x %x %p)\n", debugstr_w(pwzURI), dwFlags, (DWORD)dwReserved, ppURI);
+
+    ret = heap_alloc(sizeof(Uri));
+    if(!ret)
+        return E_OUTOFMEMORY;
+
+    ret->lpIUriVtbl = &UriVtbl;
+    ret->ref = 1;
+
+    *ppURI = URI(ret);
+    return S_OK;
+}
index 4d781c7..c9debb4 100644 (file)
@@ -43,7 +43,6 @@ HKCR,"PROTOCOLS\Filter\lzdhtml","CLSID",,"%CLSID_DeCompMimeFilter%"
 
 
 [ZoneMap.Reg]
 
 
 [ZoneMap.Reg]
-HKCU,"Software\Microsoft\Windows\CurrentVersion\Internet Settings",,,
 HKCU,"%PATH_ZONEMAP%",,,
 HKLM,"%PATH_ZONEMAP%",,,
 HKCU,"%PATH_ZONEMAP%","ProxyByPass",  0x10001,0x1
 HKCU,"%PATH_ZONEMAP%",,,
 HKLM,"%PATH_ZONEMAP%",,,
 HKCU,"%PATH_ZONEMAP%","ProxyByPass",  0x10001,0x1
index 48034c5..c8c7586 100644 (file)
        <file>session.c</file>
        <file>umon.c</file>
        <file>umstream.c</file>
        <file>session.c</file>
        <file>umon.c</file>
        <file>umstream.c</file>
+       <file>uri.c</file>
        <file>urlmon_main.c</file>
        <file>urlmon_main.c</file>
+       <file>usrmarshal.c</file>
        <file>rsrc.rc</file>
        <library>wine</library>
        <library>uuid</library>
        <file>rsrc.rc</file>
        <library>wine</library>
        <library>uuid</library>
+       <library>rpcrt4</library>
        <library>ole32</library>
        <library>shlwapi</library>
        <library>wininet</library>
        <library>user32</library>
        <library>advapi32</library>
        <library>ole32</library>
        <library>shlwapi</library>
        <library>wininet</library>
        <library>user32</library>
        <library>advapi32</library>
+       <library>pseh</library>
+       <library>urlmon_proxy</library>
        <library>ntdll</library>
 </module>
        <library>ntdll</library>
 </module>
-<module name="urlmon_local_interface" type="idlinterface">
-       <file>urlmon_local.idl</file>
+<module name="urlmon_proxy" type="rpcproxy" allowwarnings="true">
+       <define name="__WINESRC__" />
+       <define name="ENTRY_PREFIX">URLMON_</define>
+       <define name="PROXY_DELEGATION"/>
+       <define name="REGISTER_PROXY_DLL"/>
+       <define name="_URLMON_"/>
+       <define name="PROXY_CLSID_IS">{0x79EAC9F1,0xBAF9,0x11CE,{0x8C,0x82,0x00,0xAA,0x00,0x4B,0xA9,0x0B}}</define>
+       <file>urlmon_urlmon.idl</file>
 </module>
 </group>
 </module>
 </group>
index 2ed9988..dbb8fa9 100644 (file)
@@ -15,7 +15,7 @@
 @ stdcall CoInternetCreateSecurityManager(ptr ptr long)
 @ stdcall CoInternetCreateZoneManager(ptr ptr long)
 @ stub CoInternetGetProtocolFlags
 @ stdcall CoInternetCreateSecurityManager(ptr ptr long)
 @ stdcall CoInternetCreateZoneManager(ptr ptr long)
 @ stub CoInternetGetProtocolFlags
-@ stub CoInternetGetSecurityUrl
+@ stdcall CoInternetGetSecurityUrl(ptr ptr long long)
 @ stdcall CoInternetGetSession(long ptr long)
 @ stdcall CoInternetParseUrl(wstr long long wstr long ptr long)
 @ stdcall CoInternetQueryInfo(ptr long long ptr long ptr long)
 @ stdcall CoInternetGetSession(long ptr long)
 @ stdcall CoInternetParseUrl(wstr long long wstr long ptr long)
 @ stdcall CoInternetQueryInfo(ptr long long ptr long ptr long)
@@ -26,6 +26,7 @@
 @ stdcall CreateAsyncBindCtx(long ptr ptr ptr)
 @ stdcall CreateAsyncBindCtxEx(ptr long ptr ptr ptr long)
 @ stdcall CreateFormatEnumerator(long ptr ptr)
 @ stdcall CreateAsyncBindCtx(long ptr ptr ptr)
 @ stdcall CreateAsyncBindCtxEx(ptr long ptr ptr ptr long)
 @ stdcall CreateFormatEnumerator(long ptr ptr)
+@ stdcall CreateUri(wstr long long ptr)
 @ stdcall CreateURLMoniker(ptr wstr ptr)
 @ stdcall CreateURLMonikerEx(ptr wstr ptr long)
 @ stdcall -private DllCanUnloadNow()
 @ stdcall CreateURLMoniker(ptr wstr ptr)
 @ stdcall CreateURLMonikerEx(ptr wstr ptr long)
 @ stdcall -private DllCanUnloadNow()
diff --git a/reactos/dll/win32/urlmon/urlmon_local.idl b/reactos/dll/win32/urlmon/urlmon_local.idl
deleted file mode 100644 (file)
index 1a1403e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-
-#include "urlmon.idl"
index a420308..272884e 100644 (file)
@@ -348,6 +348,7 @@ static void init_session(BOOL init)
 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
 {
     unsigned int i;
 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
 {
     unsigned int i;
+    HRESULT hr;
     
     TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
     
     
     TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
     
@@ -357,6 +358,10 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
            return IClassFactory_QueryInterface(object_creation[i].cf, riid, ppv);
     }
 
            return IClassFactory_QueryInterface(object_creation[i].cf, riid, ppv);
     }
 
+    hr = URLMON_DllGetClassObject(rclsid, riid, ppv);
+    if(SUCCEEDED(hr))
+        return hr;
+
     FIXME("%s: no class found.\n", debugstr_guid(rclsid));
     return CLASS_E_CLASSNOTAVAILABLE;
 }
     FIXME("%s: no class found.\n", debugstr_guid(rclsid));
     return CLASS_E_CLASSNOTAVAILABLE;
 }
index 21b9343..8db786b 100644 (file)
@@ -48,6 +48,12 @@ extern HRESULT GopherProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
 extern HRESULT MkProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
 extern HRESULT MimeFilter_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
 
 extern HRESULT MkProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
 extern HRESULT MimeFilter_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
 
+extern HRESULT WINAPI URLMON_DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv) DECLSPEC_HIDDEN;
+extern HRESULT WINAPI URLMON_DllRegisterServer(void) DECLSPEC_HIDDEN;
+extern HRESULT WINAPI URLMON_DllUnregisterServer(void) DECLSPEC_HIDDEN;
+
+extern GUID const CLSID_PSFactoryBuffer DECLSPEC_HIDDEN;
+
 /**********************************************************************
  * Dll lifetime tracking declaration for urlmon.dll
  */
 /**********************************************************************
  * Dll lifetime tracking declaration for urlmon.dll
  */
diff --git a/reactos/dll/win32/urlmon/urlmon_urlmon.idl b/reactos/dll/win32/urlmon/urlmon_urlmon.idl
new file mode 100644 (file)
index 0000000..71a0719
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2009 Piotr Caban for Codeweavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "urlmon.idl"
diff --git a/reactos/dll/win32/urlmon/usrmarshal.c b/reactos/dll/win32/urlmon/usrmarshal.c
new file mode 100644 (file)
index 0000000..b945563
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2009 Piotr Caban for Codeweavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "urlmon_main.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
+
+HRESULT CALLBACK IWinInetHttpInfo_QueryInfo_Proxy(IWinInetHttpInfo* This,
+    DWORD dwOption, LPVOID pBuffer, DWORD *pcbBuf, DWORD *pdwFlags,
+    DWORD *pdwReserved)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IWinInetHttpInfo_QueryInfo_Stub(IWinInetHttpInfo* This,
+    DWORD dwOption, BYTE *pBuffer, DWORD *pcbBuf, DWORD *pdwFlags,
+    DWORD *pdwReserved)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IWinInetInfo_QueryOption_Proxy(IWinInetInfo* This,
+        DWORD dwOption, LPVOID pBuffer, DWORD *pcbBuf)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IWinInetInfo_QueryOption_Stub(IWinInetInfo* This,
+        DWORD dwOption, BYTE *pBuffer, DWORD *pcbBuf)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBindHost_MonikerBindToStorage_Proxy(IBindHost* This,
+        IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC,
+        REFIID riid, void **ppvObj)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBindHost_MonikerBindToStorage_Stub(IBindHost* This,
+        IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC,
+        REFIID riid, IUnknown **ppvObj)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBindHost_MonikerBindToObject_Proxy(IBindHost* This,
+        IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC,
+        REFIID riid, void **ppvObj)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBindHost_MonikerBindToObject_Stub(IBindHost* This,
+        IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC,
+        REFIID riid, IUnknown **ppvObj)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBindStatusCallbackEx_GetBindInfoEx_Proxy(
+        IBindStatusCallbackEx* This, DWORD *grfBINDF, BINDINFO *pbindinfo,
+        DWORD *grfBINDF2, DWORD *pdwReserved)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBindStatusCallbackEx_GetBindInfoEx_Stub(
+        IBindStatusCallbackEx* This, DWORD *grfBINDF, RemBINDINFO *pbindinfo,
+        RemSTGMEDIUM *pstgmed, DWORD *grfBINDF2, DWORD *pdwReserved)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBindStatusCallback_GetBindInfo_Proxy(
+        IBindStatusCallback* This, DWORD *grfBINDF, BINDINFO *pbindinfo)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBindStatusCallback_GetBindInfo_Stub(
+        IBindStatusCallback* This, DWORD *grfBINDF,
+        RemBINDINFO *pbindinfo, RemSTGMEDIUM *pstgmed)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBindStatusCallback_OnDataAvailable_Proxy(
+        IBindStatusCallback* This, DWORD grfBSCF, DWORD dwSize,
+        FORMATETC *pformatetc, STGMEDIUM *pstgmed)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBindStatusCallback_OnDataAvailable_Stub(
+        IBindStatusCallback* This, DWORD grfBSCF, DWORD dwSize,
+        RemFORMATETC *pformatetc, RemSTGMEDIUM *pstgmed)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBinding_GetBindResult_Proxy(IBinding* This,
+        CLSID *pclsidProtocol, DWORD *pdwResult,
+        LPOLESTR *pszResult, DWORD *pdwReserved)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBinding_GetBindResult_Stub(IBinding* This,
+        CLSID *pclsidProtocol, DWORD *pdwResult,
+        LPOLESTR *pszResult, DWORD dwReserved)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE IWindowForBindingUI_GetWindow_Proxy(
+        IWindowForBindingUI* This, REFGUID rguidReason, HWND *phwnd)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+void __RPC_STUB IWindowForBindingUI_GetWindow_Stub(IRpcStubBuffer* This,
+        IRpcChannelBuffer* pRpcChannelBuffer, PRPC_MESSAGE pRpcMessage,
+        DWORD* pdwStubPhase)
+{
+    FIXME("stub\n");
+}
index 78afd16..d16a3b5 100644 (file)
@@ -1646,6 +1646,62 @@ interface IUri : IUnknown
         [out] BOOL *pfEqual);
 }
 
         [out] BOOL *pfEqual);
 }
 
+cpp_quote("HRESULT WINAPI CreateUri(LPCWSTR,DWORD,DWORD_PTR,IUri**);")
+cpp_quote("HRESULT WINAPI CreateUriWithFragment(LPCWSTR,LPCWSTR,DWORD,DWORD_PTR,IUri**);")
+cpp_quote("HRESULT WINAPI CreateUriFromMultiByteString(LPCSTR,DWORD,DWORD,DWORD,DWORD_PTR,IUri**);")
+
+cpp_quote("#define Uri_HAS_ABSOLUTE_URI    (1 << Uri_PROPERTY_ABSOLUTE_URI)")
+cpp_quote("#define Uri_HAS_AUTHORITY       (1 << Uri_PROPERTY_AUTHORITY)")
+cpp_quote("#define Uri_HAS_DISPLAY_URI     (1 << Uri_PROPERTY_DISPLAY_URI)")
+cpp_quote("#define Uri_HAS_DOMAIN          (1 << Uri_PROPERTY_DOMAIN)")
+cpp_quote("#define Uri_HAS_EXTENSION       (1 << Uri_PROPERTY_EXTENSION)")
+cpp_quote("#define Uri_HAS_FRAGMENT        (1 << Uri_PROPERTY_FRAGMENT)")
+cpp_quote("#define Uri_HAS_HOST            (1 << Uri_PROPERTY_HOST)")
+cpp_quote("#define Uri_HAS_PASSWORD        (1 << Uri_PROPERTY_PASSWORD)")
+cpp_quote("#define Uri_HAS_PATH            (1 << Uri_PROPERTY_PATH)")
+cpp_quote("#define Uri_HAS_QUERY           (1 << Uri_PROPERTY_QUERY)")
+cpp_quote("#define Uri_HAS_RAW_URI         (1 << Uri_PROPERTY_RAW_URI)")
+cpp_quote("#define Uri_HAS_SCHEME_NAME     (1 << Uri_PROPERTY_SCHEME_NAME)")
+cpp_quote("#define Uri_HAS_USER_NAME       (1 << Uri_PROPERTY_USER_NAME)")
+cpp_quote("#define Uri_HAS_PATH_AND_QUERY  (1 << Uri_PROPERTY_PATH_AND_QUERY)")
+cpp_quote("#define Uri_HAS_USER_INFO       (1 << Uri_PROPERTY_USER_INFO)")
+cpp_quote("#define Uri_HAS_HOST_TYPE       (1 << Uri_PROPERTY_HOST_TYPE)")
+cpp_quote("#define Uri_HAS_PORT            (1 << Uri_PROPERTY_PORT)")
+cpp_quote("#define Uri_HAS_SCHEME          (1 << Uri_PROPERTY_SCHEME)")
+cpp_quote("#define Uri_HAS_ZONE            (1 << Uri_PROPERTY_ZONE)")
+
+cpp_quote("#define Uri_CREATE_ALLOW_RELATIVE                  0x0001")
+cpp_quote("#define Uri_CREATE_ALLOW_IMPLICIT_WILDCARD_SCHEME  0x0002")
+cpp_quote("#define Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME      0x0004")
+cpp_quote("#define Uri_CREATE_NOFRAG                          0x0008")
+cpp_quote("#define Uri_CREATE_NO_CANONICALIZE                 0x0010")
+cpp_quote("#define Uri_CREATE_CANONICALIZE                    0x0100")
+cpp_quote("#define Uri_CREATE_FILE_USE_DOS_PATH               0x0020")
+cpp_quote("#define Uri_CREATE_DECODE_EXTRA_INFO               0x0040")
+cpp_quote("#define Uri_CREATE_NO_DECODE_EXTRA_INFO            0x0080")
+cpp_quote("#define Uri_CREATE_CRACK_UNKNOWN_SCHEMES           0x0200")
+cpp_quote("#define Uri_CREATE_NO_CRACK_UNKNOWN_SCHEMES        0x0400")
+cpp_quote("#define Uri_CREATE_PRE_PROCESS_HTML_URI            0x0800")
+cpp_quote("#define Uri_CREATE_NO_PRE_PROCESS_HTML_URI         0x1000")
+cpp_quote("#define Uri_CREATE_IE_SETTINGS                     0x2000")
+cpp_quote("#define Uri_CREATE_NO_IE_SETTINGS                  0x4000")
+cpp_quote("#define Uri_CREATE_NO_ENCODE_FORBIDDEN_CHARACTERS  0x8000")
+
+cpp_quote("#define Uri_DISPLAY_NO_FRAGMENT  0x00000001")
+cpp_quote("#define Uri_PUNYCODE_IDN_HOST    0x00000002")
+cpp_quote("#define Uri_DISPLAY_IDN_HOST     0x00000004")
+
+cpp_quote("#define Uri_ENCODING_USER_INFO_AND_PATH_IS_PERCENT_ENCODED_UTF8   0x00000001")
+cpp_quote("#define Uri_ENCODING_USER_INFO_AND_PATH_IS_CP                     0x00000002")
+cpp_quote("#define Uri_ENCODING_HOST_IS_IDN                                  0x00000004")
+cpp_quote("#define Uri_ENCODING_HOST_IS_PERCENT_ENCODED_UTF8                 0x00000008")
+cpp_quote("#define Uri_ENCODING_HOST_IS_PERCENT_ENCODED_CP                   0x00000010")
+cpp_quote("#define Uri_ENCODING_QUERY_AND_FRAGMENT_IS_PERCENT_ENCODED_UTF8   0x00000020")
+cpp_quote("#define Uri_ENCODING_QUERY_AND_FRAGMENT_IS_CP                     0x00000040")
+cpp_quote("#define Uri_ENCODING_RFC (Uri_ENCODING_USER_INFO_AND_PATH_IS_PERCENT_ENCODED_UTF8|Uri_ENCODING_HOST_IS_PERCENT_ENCODED_UTF8|Uri_ENCODING_QUERY_AND_FRAGMENT_IS_PERCENT_ENCODED_UTF8)")
+
+cpp_quote("#define UriBuilder_USE_ORIGINAL_FLAGS  0x00000001")
+
 /*****************************************************************************
  * IUriContainer interface
  */
 /*****************************************************************************
  * IUriContainer interface
  */
@@ -1740,6 +1796,8 @@ cpp_quote("#define INET_E_DEFAULT_ACTION            INET_E_USE_DEFAULT_PROTOCOLH
 
 cpp_quote("HRESULT WINAPI CoGetClassObjectFromURL(REFCLSID, LPCWSTR, DWORD, DWORD, LPCWSTR, LPBINDCTX, DWORD, LPVOID, REFIID, LPVOID*);")
 cpp_quote("HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk);")
 
 cpp_quote("HRESULT WINAPI CoGetClassObjectFromURL(REFCLSID, LPCWSTR, DWORD, DWORD, LPCWSTR, LPBINDCTX, DWORD, LPVOID, REFIID, LPVOID*);")
 cpp_quote("HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk);")
+cpp_quote("HRESULT WINAPI CreateURLMonikerEx(IMoniker*,LPCWSTR,IMoniker**,DWORD);")
+cpp_quote("HRESULT WINAPI CreateURLMonikerEx2(IMoniker*,IUri*,IMoniker**,DWORD);")
 cpp_quote("HRESULT WINAPI RegisterBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc, IBindStatusCallback **ppbsc, DWORD dwReserved);")
 cpp_quote("HRESULT WINAPI CompareSecurityIds(BYTE*,DWORD,BYTE*,DWORD,DWORD);")
 cpp_quote("HRESULT WINAPI URLDownloadToFileA(LPUNKNOWN,LPCSTR,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
 cpp_quote("HRESULT WINAPI RegisterBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc, IBindStatusCallback **ppbsc, DWORD dwReserved);")
 cpp_quote("HRESULT WINAPI CompareSecurityIds(BYTE*,DWORD,BYTE*,DWORD,DWORD);")
 cpp_quote("HRESULT WINAPI URLDownloadToFileA(LPUNKNOWN,LPCSTR,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
@@ -1758,6 +1816,7 @@ cpp_quote("HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider*, IIntern
 cpp_quote("HRESULT WINAPI CoInternetParseUrl(LPCWSTR,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD);")
 cpp_quote("HRESULT WINAPI CoInternetQueryInfo(LPCWSTR,QUERYOPTION,DWORD,LPVOID,DWORD,DWORD*,DWORD);")
 cpp_quote("HRESULT WINAPI CoInternetSetFeatureEnabled(INTERNETFEATURELIST,DWORD,BOOL);")
 cpp_quote("HRESULT WINAPI CoInternetParseUrl(LPCWSTR,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD);")
 cpp_quote("HRESULT WINAPI CoInternetQueryInfo(LPCWSTR,QUERYOPTION,DWORD,LPVOID,DWORD,DWORD*,DWORD);")
 cpp_quote("HRESULT WINAPI CoInternetSetFeatureEnabled(INTERNETFEATURELIST,DWORD,BOOL);")
+cpp_quote("HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR,LPWSTR*,PSUACTION,DWORD);")
 cpp_quote("HRESULT WINAPI CreateFormatEnumerator(UINT,FORMATETC*,IEnumFORMATETC**);")
 cpp_quote("HRESULT WINAPI GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi);")
 cpp_quote("HRESULT WINAPI FaultInIEFeature(HWND,uCLSSPEC*,QUERYCONTEXT*,DWORD);")
 cpp_quote("HRESULT WINAPI CreateFormatEnumerator(UINT,FORMATETC*,IEnumFORMATETC**);")
 cpp_quote("HRESULT WINAPI GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi);")
 cpp_quote("HRESULT WINAPI FaultInIEFeature(HWND,uCLSSPEC*,QUERYCONTEXT*,DWORD);")