ReactOS 0.4.17-dev-573-g8315b8c
urlmon_main.c
Go to the documentation of this file.
1/*
2 * UrlMon
3 *
4 * Copyright (c) 2000 Patrik Stridvall
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#include <stdarg.h>
22
23#include "urlmon_main.h"
24
25#include "winreg.h"
26
27#define NO_SHLWAPI_REG
28#include "shlwapi.h"
29#include "advpub.h"
30#include "initguid.h"
31
32#include "wine/debug.h"
33
34#include "urlmon.h"
35
37
38DEFINE_GUID(CLSID_CUri, 0xDF2FCE13, 0x25EC, 0x45BB, 0x9D,0x4C, 0xCE,0xCD,0x47,0xC2,0x43,0x0C);
39
42
45
46static void init_session(void);
47
49
52{
53 0, 0, &tls_cs,
55 0, 0, { (DWORD_PTR)(__FILE__ ": tls") }
56};
57
58static CRITICAL_SECTION tls_cs = { &tls_cs_dbg, -1, 0, 0, 0, 0 };
59
61{
63
65 DWORD tls = TlsAlloc();
67 return NULL;
68
70 if(tls != urlmon_tls)
71 TlsFree(tls);
72 }
73
75 if(!data) {
76 data = calloc(1, sizeof(tls_data_t));
77 if(!data)
78 return NULL;
79
81 list_add_tail(&tls_list, &data->entry);
83
85 }
86
87 return data;
88}
89
90static void free_tls_list(void)
91{
93
95 return;
96
97 while(!list_empty(&tls_list)) {
99 list_remove(&data->entry);
100 free(data);
101 }
102
104}
105
106static void detach_thread(void)
107{
109
111 return;
112
114 if(!data)
115 return;
116
118 list_remove(&data->entry);
120
121 if(data->notif_hwnd) {
122 WARN("notif_hwnd not destroyed\n");
123 DestroyWindow(data->notif_hwnd);
124 }
125
126 free(data);
127}
128
129static void process_detach(void)
130{
132
136
137 if (hCabinet)
139
140 free_session();
143}
144
145/***********************************************************************
146 * DllMain (URLMON.init)
147 */
149{
150 TRACE("%p 0x%lx %p\n", hinstDLL, fdwReason, fImpLoad);
151
152 URLMON_DllMain( hinstDLL, fdwReason, fImpLoad );
153
154 switch(fdwReason) {
156 urlmon_instance = hinstDLL;
157 init_session();
158 break;
159
161 if (fImpLoad) break;
164 break;
165
168 break;
169 }
170 return TRUE;
171}
172
174{
175 switch(status) {
176#define X(x) case x: return #x
177 X(BINDSTATUS_FINDINGRESOURCE);
178 X(BINDSTATUS_CONNECTING);
179 X(BINDSTATUS_REDIRECTING);
180 X(BINDSTATUS_BEGINDOWNLOADDATA);
181 X(BINDSTATUS_DOWNLOADINGDATA);
182 X(BINDSTATUS_ENDDOWNLOADDATA);
183 X(BINDSTATUS_BEGINDOWNLOADCOMPONENTS);
184 X(BINDSTATUS_INSTALLINGCOMPONENTS);
185 X(BINDSTATUS_ENDDOWNLOADCOMPONENTS);
186 X(BINDSTATUS_USINGCACHEDCOPY);
187 X(BINDSTATUS_SENDINGREQUEST);
188 X(BINDSTATUS_CLASSIDAVAILABLE);
189 X(BINDSTATUS_MIMETYPEAVAILABLE);
190 X(BINDSTATUS_CACHEFILENAMEAVAILABLE);
191 X(BINDSTATUS_BEGINSYNCOPERATION);
192 X(BINDSTATUS_ENDSYNCOPERATION);
193 X(BINDSTATUS_BEGINUPLOADDATA);
194 X(BINDSTATUS_UPLOADINGDATA);
195 X(BINDSTATUS_ENDUPLOADINGDATA);
196 X(BINDSTATUS_PROTOCOLCLASSID);
197 X(BINDSTATUS_ENCODING);
198 X(BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE);
199 X(BINDSTATUS_CLASSINSTALLLOCATION);
200 X(BINDSTATUS_DECODING);
201 X(BINDSTATUS_LOADINGMIMEHANDLER);
202 X(BINDSTATUS_CONTENTDISPOSITIONATTACH);
203 X(BINDSTATUS_FILTERREPORTMIMETYPE);
204 X(BINDSTATUS_CLSIDCANINSTANTIATE);
205 X(BINDSTATUS_IUNKNOWNAVAILABLE);
206 X(BINDSTATUS_DIRECTBIND);
207 X(BINDSTATUS_RAWMIMETYPE);
208 X(BINDSTATUS_PROXYDETECTING);
209 X(BINDSTATUS_ACCEPTRANGES);
210 X(BINDSTATUS_COOKIE_SENT);
211 X(BINDSTATUS_COMPACT_POLICY_RECEIVED);
212 X(BINDSTATUS_COOKIE_SUPPRESSED);
213 X(BINDSTATUS_COOKIE_STATE_UNKNOWN);
214 X(BINDSTATUS_COOKIE_STATE_ACCEPT);
215 X(BINDSTATUS_COOKIE_STATE_REJECT);
216 X(BINDSTATUS_COOKIE_STATE_PROMPT);
217 X(BINDSTATUS_COOKIE_STATE_LEASH);
218 X(BINDSTATUS_COOKIE_STATE_DOWNGRADE);
219 X(BINDSTATUS_POLICY_HREF);
220 X(BINDSTATUS_P3P_HEADER);
221 X(BINDSTATUS_SESSION_COOKIE_RECEIVED);
222 X(BINDSTATUS_PERSISTENT_COOKIE_RECEIVED);
223 X(BINDSTATUS_SESSION_COOKIES_ALLOWED);
224 X(BINDSTATUS_CACHECONTROL);
225 X(BINDSTATUS_CONTENTDISPOSITIONFILENAME);
226 X(BINDSTATUS_MIMETEXTPLAINMISMATCH);
227 X(BINDSTATUS_PUBLISHERAVAILABLE);
228 X(BINDSTATUS_DISPLAYNAMEAVAILABLE);
229#undef X
230 default:
231 return wine_dbg_sprintf("(invalid status %lu)", status);
232 }
233}
234
235/***********************************************************************
236 * DllInstall (URLMON.@)
237 */
239{
240 FIXME("(%s, %s): stub\n", bInstall?"TRUE":"FALSE",
242
243 return S_OK;
244}
245
246/***********************************************************************
247 * DllCanUnloadNow (URLMON.@)
248 */
250{
251 return URLMON_refCount != 0 ? S_FALSE : S_OK;
252}
253
254
255
256/******************************************************************************
257 * Urlmon ClassFactory
258 */
259typedef struct {
260 IClassFactory IClassFactory_iface;
261
262 HRESULT (*pfnCreateInstance)(IUnknown *pUnkOuter, LPVOID *ppObj);
264
266{
267 return CONTAINING_RECORD(iface, ClassFactory, IClassFactory_iface);
268}
269
271{
272 *ppv = NULL;
273
275 TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
276 *ppv = iface;
277 }else if(IsEqualGUID(riid, &IID_IClassFactory)) {
278 TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
279 *ppv = iface;
280 }
281
282 if(*ppv) {
283 IUnknown_AddRef((IUnknown*)*ppv);
284 return S_OK;
285 }
286
287 WARN("(%p)->(%s,%p),not found\n", iface, debugstr_guid(riid), ppv);
288 return E_NOINTERFACE;
289}
290
292{
294 return 2;
295}
296
298{
300 return 1;
301}
302
303
305 REFIID riid, void **ppv)
306{
308 IUnknown *unk;
310
311 TRACE("(%p)->(%p %s %p)\n", This, outer, debugstr_guid(riid), ppv);
312
314 *ppv = NULL;
316 }
317
318 hres = This->pfnCreateInstance(outer, (void**)&unk);
319 if(FAILED(hres)) {
320 *ppv = NULL;
321 return hres;
322 }
323
325 hres = IUnknown_QueryInterface(unk, riid, ppv);
326 IUnknown_Release(unk);
327 }else {
328 *ppv = unk;
329 }
330 return hres;
331}
332
333static HRESULT WINAPI CF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
334{
335 TRACE("(%d)\n", dolock);
336
337 if (dolock)
339 else
341
342 return S_OK;
343}
344
345static const IClassFactoryVtbl ClassFactoryVtbl =
346{
348 CF_AddRef,
352};
353
376
378{
379 const CLSID *clsid;
382};
383
385{
386 { &CLSID_FileProtocol, &FileProtocolCF.IClassFactory_iface, L"file" },
387 { &CLSID_FtpProtocol, &FtpProtocolCF.IClassFactory_iface, L"ftp" },
388 { &CLSID_GopherProtocol, &GopherProtocolCF.IClassFactory_iface, L"gopher" },
389 { &CLSID_HttpProtocol, &HttpProtocolCF.IClassFactory_iface, L"http" },
390 { &CLSID_HttpSProtocol, &HttpSProtocolCF.IClassFactory_iface, L"https" },
391 { &CLSID_MkProtocol, &MkProtocolCF.IClassFactory_iface, L"mk" },
392 { &CLSID_InternetSecurityManager, &SecurityManagerCF.IClassFactory_iface, NULL },
393 { &CLSID_InternetZoneManager, &ZoneManagerCF.IClassFactory_iface, NULL },
394 { &CLSID_StdURLMoniker, &StdURLMonikerCF.IClassFactory_iface, NULL },
395 { &CLSID_DeCompMimeFilter, &MimeFilterCF.IClassFactory_iface, NULL },
397};
398
399static void init_session(void)
400{
401 unsigned int i;
402
403 for(i = 0; i < ARRAY_SIZE(object_creation); i++) {
407 }
408}
409
410/*******************************************************************************
411 * DllGetClassObject [URLMON.@]
412 * Retrieves class object from a DLL object
413 *
414 * NOTES
415 * Docs say returns STDAPI
416 *
417 * PARAMS
418 * rclsid [I] CLSID for the class object
419 * riid [I] Reference to identifier of interface for class object
420 * ppv [O] Address of variable to receive interface pointer for riid
421 *
422 * RETURNS
423 * Success: S_OK
424 * Failure: CLASS_E_CLASSNOTAVAILABLE, E_OUTOFMEMORY, E_INVALIDARG,
425 * E_UNEXPECTED
426 */
427
429{
430 unsigned int i;
431 HRESULT hr;
432
433 TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
434
435 for (i = 0; i < ARRAY_SIZE(object_creation); i++)
436 {
437 if (IsEqualGUID(object_creation[i].clsid, rclsid))
438 return IClassFactory_QueryInterface(object_creation[i].cf, riid, ppv);
439 }
440
442 if(SUCCEEDED(hr))
443 return hr;
444
445 FIXME("%s: no class found.\n", debugstr_guid(rclsid));
447}
448
449static HRESULT register_inf(BOOL doregister)
450{
451 HRESULT (WINAPI *pRegInstall)(HMODULE hm, LPCSTR pszSection, const STRTABLEA* pstTable);
452 HMODULE hAdvpack;
453
454 hAdvpack = LoadLibraryW(L"advpack.dll");
455 pRegInstall = (void *)GetProcAddress(hAdvpack, "RegInstall");
456
457 return pRegInstall(hProxyDll, doregister ? "RegisterDll" : "UnregisterDll", NULL);
458}
459
460/***********************************************************************
461 * DllRegisterServer (URLMON.@)
462 */
464{
465 HRESULT hr;
466
467 TRACE("\n");
468
470 return SUCCEEDED(hr) ? register_inf(TRUE) : hr;
471}
472
473/***********************************************************************
474 * DllUnregisterServer (URLMON.@)
475 */
477{
478 HRESULT hr;
479
480 TRACE("\n");
481
483 return SUCCEEDED(hr) ? register_inf(FALSE) : hr;
484}
485
486/***********************************************************************
487 * DllRegisterServerEx (URLMON.@)
488 */
490{
491 FIXME("(void): stub\n");
492
493 return E_FAIL;
494}
495
496/**************************************************************************
497 * IsValidURL (URLMON.@)
498 *
499 * Determines if a specified string is a valid URL.
500 *
501 * PARAMS
502 * pBC [I] ignored, should be NULL.
503 * szURL [I] string that represents the URL in question.
504 * dwReserved [I] reserved and must be zero.
505 *
506 * RETURNS
507 * Success: S_OK.
508 * Failure: S_FALSE.
509 * returns E_INVALIDARG if one or more of the args is invalid.
510 *
511 * TODO:
512 * test functionality against windows to see what a valid URL is.
513 */
515{
516 FIXME("(%p, %s, %ld): stub\n", pBC, debugstr_w(szURL), dwReserved);
517
518 if (dwReserved || !szURL)
519 return E_INVALIDARG;
520
521 return S_OK;
522}
523
524/**************************************************************************
525 * FaultInIEFeature (URLMON.@)
526 *
527 * Undocumented. Appears to be used by native shdocvw.dll.
528 */
529HRESULT WINAPI FaultInIEFeature( HWND hwnd, uCLSSPEC * pClassSpec,
530 QUERYCONTEXT *pQuery, DWORD flags )
531{
532 FIXME("%p %p %p %08lx\n", hwnd, pClassSpec, pQuery, flags);
533 return E_NOTIMPL;
534}
535
536/**************************************************************************
537 * CoGetClassObjectFromURL (URLMON.@)
538 */
539HRESULT WINAPI CoGetClassObjectFromURL( REFCLSID rclsid, LPCWSTR szCodeURL, DWORD dwFileVersionMS,
540 DWORD dwFileVersionLS, LPCWSTR szContentType,
541 LPBINDCTX pBindCtx, DWORD dwClsContext, LPVOID pvReserved,
543{
544 FIXME("(%s %s %ld %ld %s %p %ld %p %s %p) Stub!\n", debugstr_guid(rclsid), debugstr_w(szCodeURL),
545 dwFileVersionMS, dwFileVersionLS, debugstr_w(szContentType), pBindCtx, dwClsContext, pvReserved,
547 return E_NOINTERFACE;
548}
549
550/***********************************************************************
551 * ReleaseBindInfo (URLMON.@)
552 *
553 * Release the resources used by the specified BINDINFO structure.
554 *
555 * PARAMS
556 * pbindinfo [I] BINDINFO to release.
557 *
558 * RETURNS
559 * Nothing.
560 */
561void WINAPI ReleaseBindInfo(BINDINFO* pbindinfo)
562{
563 DWORD size;
564
565 TRACE("(%p)\n", pbindinfo);
566
567 if(!pbindinfo || !(size = pbindinfo->cbSize))
568 return;
569
570 CoTaskMemFree(pbindinfo->szExtraInfo);
571 ReleaseStgMedium(&pbindinfo->stgmedData);
572
573 if(offsetof(BINDINFO, szExtraInfo) < size)
574 CoTaskMemFree(pbindinfo->szCustomVerb);
575
576 if(pbindinfo->pUnk && offsetof(BINDINFO, pUnk) < size)
577 IUnknown_Release(pbindinfo->pUnk);
578
579 memset(pbindinfo, 0, size);
580 pbindinfo->cbSize = size;
581}
582
583/***********************************************************************
584 * CopyStgMedium (URLMON.@)
585 */
586HRESULT WINAPI CopyStgMedium(const STGMEDIUM *src, STGMEDIUM *dst)
587{
588 TRACE("(%p %p)\n", src, dst);
589
590 if(!src || !dst)
591 return E_POINTER;
592
593 *dst = *src;
594
595 switch(dst->tymed) {
596 case TYMED_NULL:
597 break;
598 case TYMED_FILE:
599 if(src->lpszFileName && !src->pUnkForRelease) {
600 DWORD size = (lstrlenW(src->lpszFileName)+1)*sizeof(WCHAR);
601 dst->lpszFileName = CoTaskMemAlloc(size);
602 if(!dst->lpszFileName)
603 return E_OUTOFMEMORY;
604 memcpy(dst->lpszFileName, src->lpszFileName, size);
605 }
606 break;
607 case TYMED_ISTREAM:
608 if(dst->pstm)
609 IStream_AddRef(dst->pstm);
610 break;
611 case TYMED_ISTORAGE:
612 if(dst->pstg)
613 IStorage_AddRef(dst->pstg);
614 break;
615 case TYMED_HGLOBAL:
616 if(dst->hGlobal) {
617 SIZE_T size = GlobalSize(src->hGlobal);
618 char *src_ptr, *dst_ptr;
619
620 dst->hGlobal = GlobalAlloc(GMEM_FIXED, size);
621 if(!dst->hGlobal)
622 return E_OUTOFMEMORY;
623 dst_ptr = GlobalLock(dst->hGlobal);
624 src_ptr = GlobalLock(src->hGlobal);
625 memcpy(dst_ptr, src_ptr, size);
626 GlobalUnlock(src_ptr);
627 GlobalUnlock(dst_ptr);
628 }
629 break;
630 default:
631 FIXME("Unimplemented tymed %ld\n", src->tymed);
632 }
633
634 if(dst->pUnkForRelease)
635 IUnknown_AddRef(dst->pUnkForRelease);
636
637 return S_OK;
638}
639
640/***********************************************************************
641 * CopyBindInfo (URLMON.@)
642 */
643HRESULT WINAPI CopyBindInfo(const BINDINFO *pcbiSrc, BINDINFO *pcbiDest)
644{
645 DWORD size;
647
648 TRACE("(%p %p)\n", pcbiSrc, pcbiDest);
649
650 if(!pcbiSrc || !pcbiDest)
651 return E_POINTER;
652 if(!pcbiSrc->cbSize || !pcbiDest->cbSize)
653 return E_INVALIDARG;
654
655 size = pcbiDest->cbSize;
656 if(size > pcbiSrc->cbSize) {
657 memcpy(pcbiDest, pcbiSrc, pcbiSrc->cbSize);
658 memset((char*)pcbiDest+pcbiSrc->cbSize, 0, size-pcbiSrc->cbSize);
659 } else {
660 memcpy(pcbiDest, pcbiSrc, size);
661 }
662 pcbiDest->cbSize = size;
663
664 size = FIELD_OFFSET(BINDINFO, szExtraInfo)+sizeof(void*);
665 if(pcbiSrc->cbSize>=size && pcbiDest->cbSize>=size && pcbiSrc->szExtraInfo) {
666 size = (lstrlenW(pcbiSrc->szExtraInfo)+1)*sizeof(WCHAR);
667 pcbiDest->szExtraInfo = CoTaskMemAlloc(size);
668 if(!pcbiDest->szExtraInfo)
669 return E_OUTOFMEMORY;
670 memcpy(pcbiDest->szExtraInfo, pcbiSrc->szExtraInfo, size);
671 }
672
673 size = FIELD_OFFSET(BINDINFO, stgmedData)+sizeof(STGMEDIUM);
674 if(pcbiSrc->cbSize>=size && pcbiDest->cbSize>=size) {
675 hres = CopyStgMedium(&pcbiSrc->stgmedData, &pcbiDest->stgmedData);
676 if(FAILED(hres)) {
677 CoTaskMemFree(pcbiDest->szExtraInfo);
678 return hres;
679 }
680 }
681
682 size = FIELD_OFFSET(BINDINFO, szCustomVerb)+sizeof(void*);
683 if(pcbiSrc->cbSize>=size && pcbiDest->cbSize>=size && pcbiSrc->szCustomVerb) {
684 size = (lstrlenW(pcbiSrc->szCustomVerb)+1)*sizeof(WCHAR);
685 pcbiDest->szCustomVerb = CoTaskMemAlloc(size);
686 if(!pcbiDest->szCustomVerb) {
687 CoTaskMemFree(pcbiDest->szExtraInfo);
688 ReleaseStgMedium(&pcbiDest->stgmedData);
689 return E_OUTOFMEMORY;
690 }
691 memcpy(pcbiDest->szCustomVerb, pcbiSrc->szCustomVerb, size);
692 }
693
694 size = FIELD_OFFSET(BINDINFO, securityAttributes)+sizeof(SECURITY_ATTRIBUTES);
695 if(pcbiDest->cbSize >= size)
696 memset(&pcbiDest->securityAttributes, 0, sizeof(SECURITY_ATTRIBUTES));
697
698 if(pcbiSrc->pUnk)
699 IUnknown_AddRef(pcbiDest->pUnk);
700
701 return S_OK;
702}
703
704/***********************************************************************
705 * GetClassFileOrMime (URLMON.@)
706 *
707 * Determines the class ID from the bind context, file name or MIME type.
708 */
710 LPVOID pBuffer, DWORD cbBuffer, LPCWSTR pszMimeType, DWORD dwReserved,
711 CLSID *pclsid)
712{
713 FIXME("(%p, %s, %p, %ld, %s, 0x%08lx, %p): stub\n", pBC, debugstr_w(pszFilename), pBuffer,
714 cbBuffer, debugstr_w(pszMimeType), dwReserved, pclsid);
715 return E_NOTIMPL;
716}
717
718/***********************************************************************
719 * Extract (URLMON.@)
720 */
722{
723 HRESULT (WINAPI *pExtract)(void *, LPCSTR);
724
725 if (!hCabinet)
726 hCabinet = LoadLibraryA("cabinet.dll");
727
729 pExtract = (void *)GetProcAddress(hCabinet, "Extract");
730 if (!pExtract) return HRESULT_FROM_WIN32(GetLastError());
731
732 return pExtract(dest, szCabName);
733}
734
735/***********************************************************************
736 * IsLoggingEnabledA (URLMON.@)
737 */
739{
740 FIXME("(%s)\n", debugstr_a(url));
741 return FALSE;
742}
743
744/***********************************************************************
745 * IsLoggingEnabledW (URLMON.@)
746 */
748{
749 FIXME("(%s)\n", debugstr_w(url));
750 return FALSE;
751}
752
753/***********************************************************************
754 * IsProtectedModeURL (URLMON.111)
755 * Undocumented, added in IE7
756 */
758{
759 FIXME("stub: %s\n", debugstr_w(url));
760 return TRUE;
761}
762
763/***********************************************************************
764 * LogSqmBits (URLMON.410)
765 * Undocumented, added in IE8
766 */
768{
769 FIXME("stub: %ld %ld\n", unk1, unk2);
770 return 0;
771}
772
773/***********************************************************************
774 * LogSqmIncrement (URLMON.414)
775 * Undocumented, added in IE8
776 */
778{
779 FIXME("stub: %ld %ld\n", unk1, unk2);
780 return 0;
781}
782
783/***********************************************************************
784 * LogSqmUXCommandOffsetInternal (URLMON.423)
785 * Undocumented, added in IE8
786 */
788{
789 FIXME("stub: %ld %ld %ld %ld\n", unk1, unk2, unk3, unk4);
790}
791
792/***********************************************************************
793 * MapUriToBrowserEmulationState (URLMON.444)
794 * Undocumented, added in IE8
795 */
797{
798 FIXME("stub: %ld %ld %ld\n", unk1, unk2, unk3);
799 return 0;
800}
801
802/***********************************************************************
803 * CoInternetGetBrowserProfile (URLMON.446)
804 * Undocumented, added in IE8
805 */
807{
808 FIXME("%lx: stub\n", unk);
809 return E_NOTIMPL;
810}
811
812/***********************************************************************
813 * FlushUrlmonZonesCache (URLMON.455)
814 * Undocumented, added in IE8
815 */
817{
818 FIXME("stub\n");
819}
820
821/***********************************************************************
822 * RegisterMediaTypes
823 * Added in IE3, registers known MIME-type strings.
824 */
825HRESULT WINAPI RegisterMediaTypes(UINT types, LPCSTR *szTypes, CLIPFORMAT *cfTypes)
826{
827 FIXME("stub: %u %p %p\n", types, szTypes, cfTypes);
828 return E_INVALIDARG;
829}
830
831/***********************************************************************
832 * ShouldShowIntranetWarningSecband
833 * Undocumented, added in IE7
834 */
836{
837 FIXME("%lx: stub\n", unk);
838 return FALSE;
839}
840
841/***********************************************************************
842 * GetIUriPriv (urlmon.@)
843 *
844 * Not documented.
845 */
847{
848 FIXME("(%p,%p): stub\n", uri, p);
849 *p = NULL;
850 return E_NOTIMPL;
851}
static DWORD const fdwReason
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define ARRAY_SIZE(A)
Definition: main.h:20
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static int list_empty(struct list_entry *head)
Definition: list.h:58
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
DWORD LPVOID fImpLoad
Definition: misc.cpp:136
const GUID IID_IUnknown
const GUID IID_IClassFactory
void unregister_notif_wnd_class(void)
Definition: bindprot.c:101
Definition: list.h:37
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
HINSTANCE hProxyDll
Definition: combase.c:40
void *WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: malloc.c:381
void WINAPI CoTaskMemFree(void *ptr)
Definition: malloc.c:389
const char * wine_dbg_sprintf(const char *format,...)
Definition: compat.c:296
#define DLL_THREAD_DETACH
Definition: compat.h:133
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES
#define GetProcAddress(x, y)
Definition: compat.h:753
#define FreeLibrary(x)
Definition: compat.h:748
#define LoadLibraryW(x)
Definition: compat.h:747
#define lstrlenW
Definition: compat.h:750
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
LPVOID WINAPI TlsGetValue(IN DWORD Index)
Definition: thread.c:1240
BOOL WINAPI TlsSetValue(IN DWORD Index, IN LPVOID Value)
Definition: thread.c:1276
BOOL WINAPI TlsFree(IN DWORD Index)
Definition: thread.c:1166
DWORD WINAPI DECLSPEC_HOTPATCH TlsAlloc(void)
Definition: thread.c:657
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
Definition: ole2.c:2014
HRESULT FileProtocol_Construct(IUnknown *outer, LPVOID *ppobj)
Definition: file.c:420
HRESULT FtpProtocol_Construct(IUnknown *outer, void **ppv)
Definition: ftp.c:454
HRESULT HttpProtocol_Construct(IUnknown *outer, void **ppv)
Definition: http.c:977
HRESULT HttpSProtocol_Construct(IUnknown *outer, void **ppv)
Definition: http.c:984
HINTERNET get_internet_session(IInternetBindInfo *bind_info)
Definition: protocol.c:290
static HINTERNET internet_session
Definition: protocol.c:288
HRESULT ZoneMgrImpl_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
Definition: sec_mgr.c:1781
HRESULT SecManagerImpl_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
Definition: sec_mgr.c:1206
HRESULT register_namespace(IClassFactory *cf, REFIID clsid, LPCWSTR protocol, BOOL urlmon_protocol)
Definition: session.c:114
void free_session(void)
Definition: session.c:795
HRESULT Uri_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
Definition: uri.c:5338
BOOL WINAPI InternetCloseHandle(HINTERNET hInternet)
Definition: internet.c:1414
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
#define L(x)
Definition: resources.c:13
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLenum src
Definition: glext.h:6340
GLsizeiptr size
Definition: glext.h:5919
GLenum GLenum dst
Definition: glext.h:6340
GLbitfield flags
Definition: glext.h:7161
GLfloat GLfloat p
Definition: glext.h:8902
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: sysinfo.c:13
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
Definition: heapmem.c:1090
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define InterlockedCompareExchange
Definition: interlocked.h:119
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
static ERESOURCE GlobalLock
Definition: sys_arch.c:8
uint32_t entry
Definition: isohybrid.c:63
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_a
Definition: kernel32.h:31
#define debugstr_w
Definition: kernel32.h:32
HRESULT MimeFilter_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
Definition: mimefilter.c:246
HRESULT MkProtocol_Construct(IUnknown *outer, void **ppv)
Definition: mk.c:365
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static const WCHAR url[]
Definition: encode.c:1384
static LPCWSTR LPVOID pvReserved
Definition: asmcache.c:749
HRESULT hres
Definition: protocol.c:465
static char * dest
Definition: rtl.c:149
static IUnknown * outer
Definition: compobj.c:82
const WCHAR * uri
Definition: sec_mgr.c:1564
static DWORD unk1
Definition: cursoricon.c:1804
const CLSID * clsid
Definition: msctf.cpp:50
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
interface IBindCtx * LPBINDCTX
Definition: objfwd.h:18
interface IBindCtx * LPBC
Definition: objfwd.h:18
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
Definition: guiddef.h:68
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
PVOID pBuffer
#define calloc
Definition: rosglue.h:14
#define offsetof(TYPE, MEMBER)
#define memset(x, y, z)
Definition: compat.h:39
static DWORD tls
Definition: sock.c:229
#define TRACE(s)
Definition: solgame.cpp:4
TCHAR * cmdline
Definition: stretchblt.cpp:32
IClassFactory IClassFactory_iface
Definition: main.c:210
Definition: list.h:15
const CLSID * clsid
Definition: main.c:70
IClassFactory * cf
Definition: urlmon_main.c:380
Definition: ps.c:97
Definition: cmds.c:130
#define LIST_INIT(head)
Definition: queue.h:197
#define LIST_ENTRY(type)
Definition: queue.h:175
#define DWORD_PTR
Definition: treelist.c:76
const char * LPCSTR
Definition: typedefs.h:52
const uint16_t * LPCWSTR
Definition: typedefs.h:57
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
HRESULT StdURLMoniker_Construct(IUnknown *outer, void **ppv)
Definition: umon.c:588
HRESULT GopherProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
Definition: gopher.c:312
static ClassFactory HttpProtocolCF
Definition: urlmon_main.c:360
static ClassFactory MkProtocolCF
Definition: urlmon_main.c:364
static ClassFactory * impl_from_IClassFactory(IClassFactory *iface)
Definition: urlmon_main.c:265
static ClassFactory StdURLMonikerCF
Definition: urlmon_main.c:370
HRESULT WINAPI CoInternetGetBrowserProfile(DWORD unk)
Definition: urlmon_main.c:806
int WINAPI LogSqmBits(DWORD unk1, DWORD unk2)
Definition: urlmon_main.c:767
LONG URLMON_refCount
Definition: urlmon_main.c:40
static const struct object_creation_info object_creation[]
Definition: urlmon_main.c:384
HRESULT WINAPI DllRegisterServer(void)
Definition: urlmon_main.c:463
BOOL WINAPI ShouldShowIntranetWarningSecband(DWORD unk)
Definition: urlmon_main.c:835
static HMODULE hCabinet
Definition: urlmon_main.c:43
void WINAPI FlushUrlmonZonesCache(void)
Definition: urlmon_main.c:816
static const IClassFactoryVtbl ClassFactoryVtbl
Definition: urlmon_main.c:345
static HRESULT WINAPI CF_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: urlmon_main.c:304
HRESULT WINAPI CopyStgMedium(const STGMEDIUM *src, STGMEDIUM *dst)
Definition: urlmon_main.c:586
static ULONG WINAPI CF_Release(IClassFactory *iface)
Definition: urlmon_main.c:297
tls_data_t * get_tls_data(void)
Definition: urlmon_main.c:60
static HRESULT register_inf(BOOL doregister)
Definition: urlmon_main.c:449
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
Definition: urlmon_main.c:148
static ClassFactory FileProtocolCF
Definition: urlmon_main.c:354
static ClassFactory CUriCF
Definition: urlmon_main.c:374
static HRESULT WINAPI CF_QueryInterface(IClassFactory *iface, REFIID riid, LPVOID *ppv)
Definition: urlmon_main.c:270
static struct list tls_list
Definition: urlmon_main.c:48
void WINAPI ReleaseBindInfo(BINDINFO *pbindinfo)
Definition: urlmon_main.c:561
HRESULT WINAPI DllRegisterServerEx(void)
Definition: urlmon_main.c:489
#define X(x)
HRESULT WINAPI CopyBindInfo(const BINDINFO *pcbiSrc, BINDINFO *pcbiDest)
Definition: urlmon_main.c:643
static HRESULT WINAPI CF_LockServer(LPCLASSFACTORY iface, BOOL dolock)
Definition: urlmon_main.c:333
static void free_tls_list(void)
Definition: urlmon_main.c:90
HRESULT WINAPI DllUnregisterServer(void)
Definition: urlmon_main.c:476
static void init_session(void)
Definition: urlmon_main.c:399
HRESULT WINAPI DllInstall(BOOL bInstall, LPCWSTR cmdline)
Definition: urlmon_main.c:238
static ClassFactory MimeFilterCF
Definition: urlmon_main.c:372
static ClassFactory ZoneManagerCF
Definition: urlmon_main.c:368
BOOL WINAPI IsLoggingEnabledW(LPCWSTR url)
Definition: urlmon_main.c:747
HRESULT WINAPI FaultInIEFeature(HWND hwnd, uCLSSPEC *pClassSpec, QUERYCONTEXT *pQuery, DWORD flags)
Definition: urlmon_main.c:529
static ClassFactory SecurityManagerCF
Definition: urlmon_main.c:366
static DWORD urlmon_tls
Definition: urlmon_main.c:44
int WINAPI LogSqmIncrement(DWORD unk1, DWORD unk2)
Definition: urlmon_main.c:777
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: urlmon_main.c:428
static ClassFactory HttpSProtocolCF
Definition: urlmon_main.c:362
HRESULT WINAPI IsValidURL(LPBC pBC, LPCWSTR szURL, DWORD dwReserved)
Definition: urlmon_main.c:514
static CRITICAL_SECTION tls_cs
Definition: urlmon_main.c:50
HRESULT WINAPI RegisterMediaTypes(UINT types, LPCSTR *szTypes, CLIPFORMAT *cfTypes)
Definition: urlmon_main.c:825
HRESULT WINAPI GetClassFileOrMime(LPBC pBC, LPCWSTR pszFilename, LPVOID pBuffer, DWORD cbBuffer, LPCWSTR pszMimeType, DWORD dwReserved, CLSID *pclsid)
Definition: urlmon_main.c:709
static void detach_thread(void)
Definition: urlmon_main.c:106
int WINAPI MapUriToBrowserEmulationState(DWORD unk1, DWORD unk2, DWORD unk3)
Definition: urlmon_main.c:796
static ClassFactory GopherProtocolCF
Definition: urlmon_main.c:358
HRESULT WINAPI Extract(void *dest, LPCSTR szCabName)
Definition: urlmon_main.c:721
HINSTANCE urlmon_instance
Definition: urlmon_main.c:41
static void process_detach(void)
Definition: urlmon_main.c:129
HRESULT WINAPI CoGetClassObjectFromURL(REFCLSID rclsid, LPCWSTR szCodeURL, DWORD dwFileVersionMS, DWORD dwFileVersionLS, LPCWSTR szContentType, LPBINDCTX pBindCtx, DWORD dwClsContext, LPVOID pvReserved, REFIID riid, LPVOID *ppv)
Definition: urlmon_main.c:539
BOOL WINAPI IsProtectedModeURL(const WCHAR *url)
Definition: urlmon_main.c:757
static ClassFactory FtpProtocolCF
Definition: urlmon_main.c:356
BOOL WINAPI IsLoggingEnabledA(LPCSTR url)
Definition: urlmon_main.c:738
void WINAPI LogSqmUXCommandOffsetInternal(DWORD unk1, DWORD unk2, DWORD unk3, DWORD unk4)
Definition: urlmon_main.c:787
HRESULT WINAPI DllCanUnloadNow(void)
Definition: urlmon_main.c:249
static CRITICAL_SECTION_DEBUG tls_cs_dbg
Definition: urlmon_main.c:51
HRESULT WINAPI GetIUriPriv(IUri *uri, void **p)
Definition: urlmon_main.c:846
static ULONG WINAPI CF_AddRef(IClassFactory *iface)
Definition: urlmon_main.c:291
const char * debugstr_bindstatus(ULONG status)
Definition: urlmon_main.c:173
static void URLMON_LockModule(void)
Definition: urlmon_main.h:64
static void URLMON_UnlockModule(void)
Definition: urlmon_main.h:65
HRESULT WINAPI URLMON_DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
BOOL WINAPI URLMON_DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
GUID const CLSID_CUri
HRESULT WINAPI URLMON_DllUnregisterServer(void)
HRESULT WINAPI URLMON_DllRegisterServer(void)
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define GMEM_FIXED
Definition: winbase.h:317
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define TLS_OUT_OF_INDEXES
Definition: winbase.h:529
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define HRESULT
Definition: msvc.h:7
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define E_NOINTERFACE
Definition: winerror.h:3479
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771
#define E_POINTER
Definition: winerror.h:3480
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772
BOOL WINAPI DestroyWindow(_In_ HWND)