ReactOS 0.4.15-dev-7788-g1ad9096
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#define NONAMELESSUNION
24
25#include "urlmon_main.h"
26
27#include "winreg.h"
28
29#define NO_SHLWAPI_REG
30#include "shlwapi.h"
31#include "advpub.h"
32#include "initguid.h"
33
34#include "wine/debug.h"
35
36#include "urlmon.h"
37
39
40DEFINE_GUID(CLSID_CUri, 0xDF2FCE13, 0x25EC, 0x45BB, 0x9D,0x4C, 0xCE,0xCD,0x47,0xC2,0x43,0x0C);
41
44
47
48static void init_session(void);
49
51
54{
55 0, 0, &tls_cs,
57 0, 0, { (DWORD_PTR)(__FILE__ ": tls") }
58};
59
60static CRITICAL_SECTION tls_cs = { &tls_cs_dbg, -1, 0, 0, 0, 0 };
61
63{
65
67 DWORD tls = TlsAlloc();
69 return NULL;
70
72 if(tls != urlmon_tls)
73 TlsFree(tls);
74 }
75
77 if(!data) {
78 data = heap_alloc_zero(sizeof(tls_data_t));
79 if(!data)
80 return NULL;
81
83 list_add_tail(&tls_list, &data->entry);
85
87 }
88
89 return data;
90}
91
92static void free_tls_list(void)
93{
95
97 return;
98
99 while(!list_empty(&tls_list)) {
101 list_remove(&data->entry);
103 }
104
106}
107
108static void detach_thread(void)
109{
111
113 return;
114
116 if(!data)
117 return;
118
120 list_remove(&data->entry);
122
123 if(data->notif_hwnd) {
124 WARN("notif_hwnd not destroyed\n");
125 DestroyWindow(data->notif_hwnd);
126 }
127
129}
130
131static void process_detach(void)
132{
134
138
139 if (hCabinet)
141
142 free_session();
145}
146
147/***********************************************************************
148 * DllMain (URLMON.init)
149 */
151{
152 TRACE("%p 0x%x %p\n", hinstDLL, fdwReason, fImpLoad);
153
154 URLMON_DllMain( hinstDLL, fdwReason, fImpLoad );
155
156 switch(fdwReason) {
158 urlmon_instance = hinstDLL;
159 init_session();
160 break;
161
163 if (fImpLoad) break;
166 break;
167
170 break;
171 }
172 return TRUE;
173}
174
176{
177 switch(status) {
178#define X(x) case x: return #x
179 X(BINDSTATUS_FINDINGRESOURCE);
180 X(BINDSTATUS_CONNECTING);
181 X(BINDSTATUS_REDIRECTING);
182 X(BINDSTATUS_BEGINDOWNLOADDATA);
183 X(BINDSTATUS_DOWNLOADINGDATA);
184 X(BINDSTATUS_ENDDOWNLOADDATA);
185 X(BINDSTATUS_BEGINDOWNLOADCOMPONENTS);
186 X(BINDSTATUS_INSTALLINGCOMPONENTS);
187 X(BINDSTATUS_ENDDOWNLOADCOMPONENTS);
188 X(BINDSTATUS_USINGCACHEDCOPY);
189 X(BINDSTATUS_SENDINGREQUEST);
190 X(BINDSTATUS_CLASSIDAVAILABLE);
191 X(BINDSTATUS_MIMETYPEAVAILABLE);
192 X(BINDSTATUS_CACHEFILENAMEAVAILABLE);
193 X(BINDSTATUS_BEGINSYNCOPERATION);
194 X(BINDSTATUS_ENDSYNCOPERATION);
195 X(BINDSTATUS_BEGINUPLOADDATA);
196 X(BINDSTATUS_UPLOADINGDATA);
197 X(BINDSTATUS_ENDUPLOADINGDATA);
198 X(BINDSTATUS_PROTOCOLCLASSID);
199 X(BINDSTATUS_ENCODING);
200 X(BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE);
201 X(BINDSTATUS_CLASSINSTALLLOCATION);
202 X(BINDSTATUS_DECODING);
203 X(BINDSTATUS_LOADINGMIMEHANDLER);
204 X(BINDSTATUS_CONTENTDISPOSITIONATTACH);
205 X(BINDSTATUS_FILTERREPORTMIMETYPE);
206 X(BINDSTATUS_CLSIDCANINSTANTIATE);
207 X(BINDSTATUS_IUNKNOWNAVAILABLE);
208 X(BINDSTATUS_DIRECTBIND);
209 X(BINDSTATUS_RAWMIMETYPE);
210 X(BINDSTATUS_PROXYDETECTING);
211 X(BINDSTATUS_ACCEPTRANGES);
212 X(BINDSTATUS_COOKIE_SENT);
213 X(BINDSTATUS_COMPACT_POLICY_RECEIVED);
214 X(BINDSTATUS_COOKIE_SUPPRESSED);
215 X(BINDSTATUS_COOKIE_STATE_UNKNOWN);
216 X(BINDSTATUS_COOKIE_STATE_ACCEPT);
217 X(BINDSTATUS_COOKIE_STATE_REJECT);
218 X(BINDSTATUS_COOKIE_STATE_PROMPT);
219 X(BINDSTATUS_COOKIE_STATE_LEASH);
220 X(BINDSTATUS_COOKIE_STATE_DOWNGRADE);
221 X(BINDSTATUS_POLICY_HREF);
222 X(BINDSTATUS_P3P_HEADER);
223 X(BINDSTATUS_SESSION_COOKIE_RECEIVED);
224 X(BINDSTATUS_PERSISTENT_COOKIE_RECEIVED);
225 X(BINDSTATUS_SESSION_COOKIES_ALLOWED);
226 X(BINDSTATUS_CACHECONTROL);
227 X(BINDSTATUS_CONTENTDISPOSITIONFILENAME);
228 X(BINDSTATUS_MIMETEXTPLAINMISMATCH);
229 X(BINDSTATUS_PUBLISHERAVAILABLE);
230 X(BINDSTATUS_DISPLAYNAMEAVAILABLE);
231#undef X
232 default:
233 return wine_dbg_sprintf("(invalid status %u)", status);
234 }
235}
236
237/***********************************************************************
238 * DllInstall (URLMON.@)
239 */
241{
242 FIXME("(%s, %s): stub\n", bInstall?"TRUE":"FALSE",
244
245 return S_OK;
246}
247
248/***********************************************************************
249 * DllCanUnloadNow (URLMON.@)
250 */
252{
253 return URLMON_refCount != 0 ? S_FALSE : S_OK;
254}
255
256
257
258/******************************************************************************
259 * Urlmon ClassFactory
260 */
261typedef struct {
262 IClassFactory IClassFactory_iface;
263
264 HRESULT (*pfnCreateInstance)(IUnknown *pUnkOuter, LPVOID *ppObj);
266
268{
269 return CONTAINING_RECORD(iface, ClassFactory, IClassFactory_iface);
270}
271
273{
274 *ppv = NULL;
275
277 TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
278 *ppv = iface;
279 }else if(IsEqualGUID(riid, &IID_IClassFactory)) {
280 TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
281 *ppv = iface;
282 }
283
284 if(*ppv) {
285 IUnknown_AddRef((IUnknown*)*ppv);
286 return S_OK;
287 }
288
289 WARN("(%p)->(%s,%p),not found\n", iface, debugstr_guid(riid), ppv);
290 return E_NOINTERFACE;
291}
292
294{
296 return 2;
297}
298
300{
302 return 1;
303}
304
305
307 REFIID riid, void **ppv)
308{
310 IUnknown *unk;
312
313 TRACE("(%p)->(%p %s %p)\n", This, outer, debugstr_guid(riid), ppv);
314
315 if(outer && !IsEqualGUID(riid, &IID_IUnknown)) {
316 *ppv = NULL;
318 }
319
320 hres = This->pfnCreateInstance(outer, (void**)&unk);
321 if(FAILED(hres)) {
322 *ppv = NULL;
323 return hres;
324 }
325
327 hres = IUnknown_QueryInterface(unk, riid, ppv);
328 IUnknown_Release(unk);
329 }else {
330 *ppv = unk;
331 }
332 return hres;
333}
334
335static HRESULT WINAPI CF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
336{
337 TRACE("(%d)\n", dolock);
338
339 if (dolock)
341 else
343
344 return S_OK;
345}
346
347static const IClassFactoryVtbl ClassFactoryVtbl =
348{
350 CF_AddRef,
354};
355
378
380{
381 const CLSID *clsid;
384};
385
386static const WCHAR wszFile[] = {'f','i','l','e',0};
387static const WCHAR wszFtp[] = {'f','t','p',0};
388static const WCHAR wszGopher[] = {'g','o','p','h','e','r',0};
389static const WCHAR wszHttp[] = {'h','t','t','p',0};
390static const WCHAR wszHttps[] = {'h','t','t','p','s',0};
391static const WCHAR wszMk[] = {'m','k',0};
392
394{
395 { &CLSID_FileProtocol, &FileProtocolCF.IClassFactory_iface, wszFile },
396 { &CLSID_FtpProtocol, &FtpProtocolCF.IClassFactory_iface, wszFtp },
397 { &CLSID_GopherProtocol, &GopherProtocolCF.IClassFactory_iface, wszGopher },
398 { &CLSID_HttpProtocol, &HttpProtocolCF.IClassFactory_iface, wszHttp },
399 { &CLSID_HttpSProtocol, &HttpSProtocolCF.IClassFactory_iface, wszHttps },
400 { &CLSID_MkProtocol, &MkProtocolCF.IClassFactory_iface, wszMk },
401 { &CLSID_InternetSecurityManager, &SecurityManagerCF.IClassFactory_iface, NULL },
402 { &CLSID_InternetZoneManager, &ZoneManagerCF.IClassFactory_iface, NULL },
403 { &CLSID_StdURLMoniker, &StdURLMonikerCF.IClassFactory_iface, NULL },
404 { &CLSID_DeCompMimeFilter, &MimeFilterCF.IClassFactory_iface, NULL },
405 { &CLSID_CUri, &CUriCF.IClassFactory_iface, NULL }
406};
407
408static void init_session(void)
409{
410 unsigned int i;
411
412 for(i = 0; i < ARRAY_SIZE(object_creation); i++) {
416 }
417}
418
419/*******************************************************************************
420 * DllGetClassObject [URLMON.@]
421 * Retrieves class object from a DLL object
422 *
423 * NOTES
424 * Docs say returns STDAPI
425 *
426 * PARAMS
427 * rclsid [I] CLSID for the class object
428 * riid [I] Reference to identifier of interface for class object
429 * ppv [O] Address of variable to receive interface pointer for riid
430 *
431 * RETURNS
432 * Success: S_OK
433 * Failure: CLASS_E_CLASSNOTAVAILABLE, E_OUTOFMEMORY, E_INVALIDARG,
434 * E_UNEXPECTED
435 */
436
438{
439 unsigned int i;
440 HRESULT hr;
441
442 TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
443
444 for (i = 0; i < ARRAY_SIZE(object_creation); i++)
445 {
446 if (IsEqualGUID(object_creation[i].clsid, rclsid))
447 return IClassFactory_QueryInterface(object_creation[i].cf, riid, ppv);
448 }
449
451 if(SUCCEEDED(hr))
452 return hr;
453
454 FIXME("%s: no class found.\n", debugstr_guid(rclsid));
456}
457
458static HRESULT register_inf(BOOL doregister)
459{
460 HRESULT (WINAPI *pRegInstall)(HMODULE hm, LPCSTR pszSection, const STRTABLEA* pstTable);
461 HMODULE hAdvpack;
462
463 static const WCHAR wszAdvpack[] = {'a','d','v','p','a','c','k','.','d','l','l',0};
464
465 hAdvpack = LoadLibraryW(wszAdvpack);
466 pRegInstall = (void *)GetProcAddress(hAdvpack, "RegInstall");
467
468 return pRegInstall(hProxyDll, doregister ? "RegisterDll" : "UnregisterDll", NULL);
469}
470
471/***********************************************************************
472 * DllRegisterServer (URLMON.@)
473 */
475{
476 HRESULT hr;
477
478 TRACE("\n");
479
481 return SUCCEEDED(hr) ? register_inf(TRUE) : hr;
482}
483
484/***********************************************************************
485 * DllUnregisterServer (URLMON.@)
486 */
488{
489 HRESULT hr;
490
491 TRACE("\n");
492
494 return SUCCEEDED(hr) ? register_inf(FALSE) : hr;
495}
496
497/***********************************************************************
498 * DllRegisterServerEx (URLMON.@)
499 */
501{
502 FIXME("(void): stub\n");
503
504 return E_FAIL;
505}
506
507/**************************************************************************
508 * IsValidURL (URLMON.@)
509 *
510 * Determines if a specified string is a valid URL.
511 *
512 * PARAMS
513 * pBC [I] ignored, should be NULL.
514 * szURL [I] string that represents the URL in question.
515 * dwReserved [I] reserved and must be zero.
516 *
517 * RETURNS
518 * Success: S_OK.
519 * Failure: S_FALSE.
520 * returns E_INVALIDARG if one or more of the args is invalid.
521 *
522 * TODO:
523 * test functionality against windows to see what a valid URL is.
524 */
526{
527 FIXME("(%p, %s, %d): stub\n", pBC, debugstr_w(szURL), dwReserved);
528
529 if (dwReserved || !szURL)
530 return E_INVALIDARG;
531
532 return S_OK;
533}
534
535/**************************************************************************
536 * FaultInIEFeature (URLMON.@)
537 *
538 * Undocumented. Appears to be used by native shdocvw.dll.
539 */
540HRESULT WINAPI FaultInIEFeature( HWND hwnd, uCLSSPEC * pClassSpec,
541 QUERYCONTEXT *pQuery, DWORD flags )
542{
543 FIXME("%p %p %p %08x\n", hwnd, pClassSpec, pQuery, flags);
544 return E_NOTIMPL;
545}
546
547/**************************************************************************
548 * CoGetClassObjectFromURL (URLMON.@)
549 */
550HRESULT WINAPI CoGetClassObjectFromURL( REFCLSID rclsid, LPCWSTR szCodeURL, DWORD dwFileVersionMS,
551 DWORD dwFileVersionLS, LPCWSTR szContentType,
552 LPBINDCTX pBindCtx, DWORD dwClsContext, LPVOID pvReserved,
554{
555 FIXME("(%s %s %d %d %s %p %d %p %s %p) Stub!\n", debugstr_guid(rclsid), debugstr_w(szCodeURL),
556 dwFileVersionMS, dwFileVersionLS, debugstr_w(szContentType), pBindCtx, dwClsContext, pvReserved,
558 return E_NOINTERFACE;
559}
560
561/***********************************************************************
562 * ReleaseBindInfo (URLMON.@)
563 *
564 * Release the resources used by the specified BINDINFO structure.
565 *
566 * PARAMS
567 * pbindinfo [I] BINDINFO to release.
568 *
569 * RETURNS
570 * Nothing.
571 */
572void WINAPI ReleaseBindInfo(BINDINFO* pbindinfo)
573{
574 DWORD size;
575
576 TRACE("(%p)\n", pbindinfo);
577
578 if(!pbindinfo || !(size = pbindinfo->cbSize))
579 return;
580
581 CoTaskMemFree(pbindinfo->szExtraInfo);
582 ReleaseStgMedium(&pbindinfo->stgmedData);
583
584 if(offsetof(BINDINFO, szExtraInfo) < size)
585 CoTaskMemFree(pbindinfo->szCustomVerb);
586
587 if(pbindinfo->pUnk && offsetof(BINDINFO, pUnk) < size)
588 IUnknown_Release(pbindinfo->pUnk);
589
590 memset(pbindinfo, 0, size);
591 pbindinfo->cbSize = size;
592}
593
594/***********************************************************************
595 * CopyStgMedium (URLMON.@)
596 */
597HRESULT WINAPI CopyStgMedium(const STGMEDIUM *src, STGMEDIUM *dst)
598{
599 TRACE("(%p %p)\n", src, dst);
600
601 if(!src || !dst)
602 return E_POINTER;
603
604 *dst = *src;
605
606 switch(dst->tymed) {
607 case TYMED_NULL:
608 break;
609 case TYMED_FILE:
610 if(src->u.lpszFileName && !src->pUnkForRelease) {
611 DWORD size = (lstrlenW(src->u.lpszFileName)+1)*sizeof(WCHAR);
612 dst->u.lpszFileName = CoTaskMemAlloc(size);
613 if(!dst->u.lpszFileName)
614 return E_OUTOFMEMORY;
615 memcpy(dst->u.lpszFileName, src->u.lpszFileName, size);
616 }
617 break;
618 case TYMED_ISTREAM:
619 if(dst->u.pstm)
620 IStream_AddRef(dst->u.pstm);
621 break;
622 case TYMED_ISTORAGE:
623 if(dst->u.pstg)
624 IStorage_AddRef(dst->u.pstg);
625 break;
626 case TYMED_HGLOBAL:
627 if(dst->u.hGlobal) {
628 SIZE_T size = GlobalSize(src->u.hGlobal);
629 char *src_ptr, *dst_ptr;
630
631 dst->u.hGlobal = GlobalAlloc(GMEM_FIXED, size);
632 if(!dst->u.hGlobal)
633 return E_OUTOFMEMORY;
634 dst_ptr = GlobalLock(dst->u.hGlobal);
635 src_ptr = GlobalLock(src->u.hGlobal);
636 memcpy(dst_ptr, src_ptr, size);
637 GlobalUnlock(src_ptr);
638 GlobalUnlock(dst_ptr);
639 }
640 break;
641 default:
642 FIXME("Unimplemented tymed %d\n", src->tymed);
643 }
644
645 if(dst->pUnkForRelease)
646 IUnknown_AddRef(dst->pUnkForRelease);
647
648 return S_OK;
649}
650
651/***********************************************************************
652 * CopyBindInfo (URLMON.@)
653 */
654HRESULT WINAPI CopyBindInfo(const BINDINFO *pcbiSrc, BINDINFO *pcbiDest)
655{
656 DWORD size;
658
659 TRACE("(%p %p)\n", pcbiSrc, pcbiDest);
660
661 if(!pcbiSrc || !pcbiDest)
662 return E_POINTER;
663 if(!pcbiSrc->cbSize || !pcbiDest->cbSize)
664 return E_INVALIDARG;
665
666 size = pcbiDest->cbSize;
667 if(size > pcbiSrc->cbSize) {
668 memcpy(pcbiDest, pcbiSrc, pcbiSrc->cbSize);
669 memset((char*)pcbiDest+pcbiSrc->cbSize, 0, size-pcbiSrc->cbSize);
670 } else {
671 memcpy(pcbiDest, pcbiSrc, size);
672 }
673 pcbiDest->cbSize = size;
674
675 size = FIELD_OFFSET(BINDINFO, szExtraInfo)+sizeof(void*);
676 if(pcbiSrc->cbSize>=size && pcbiDest->cbSize>=size && pcbiSrc->szExtraInfo) {
677 size = (lstrlenW(pcbiSrc->szExtraInfo)+1)*sizeof(WCHAR);
678 pcbiDest->szExtraInfo = CoTaskMemAlloc(size);
679 if(!pcbiDest->szExtraInfo)
680 return E_OUTOFMEMORY;
681 memcpy(pcbiDest->szExtraInfo, pcbiSrc->szExtraInfo, size);
682 }
683
684 size = FIELD_OFFSET(BINDINFO, stgmedData)+sizeof(STGMEDIUM);
685 if(pcbiSrc->cbSize>=size && pcbiDest->cbSize>=size) {
686 hres = CopyStgMedium(&pcbiSrc->stgmedData, &pcbiDest->stgmedData);
687 if(FAILED(hres)) {
688 CoTaskMemFree(pcbiDest->szExtraInfo);
689 return hres;
690 }
691 }
692
693 size = FIELD_OFFSET(BINDINFO, szCustomVerb)+sizeof(void*);
694 if(pcbiSrc->cbSize>=size && pcbiDest->cbSize>=size && pcbiSrc->szCustomVerb) {
695 size = (lstrlenW(pcbiSrc->szCustomVerb)+1)*sizeof(WCHAR);
696 pcbiDest->szCustomVerb = CoTaskMemAlloc(size);
697 if(!pcbiDest->szCustomVerb) {
698 CoTaskMemFree(pcbiDest->szExtraInfo);
699 ReleaseStgMedium(&pcbiDest->stgmedData);
700 return E_OUTOFMEMORY;
701 }
702 memcpy(pcbiDest->szCustomVerb, pcbiSrc->szCustomVerb, size);
703 }
704
705 size = FIELD_OFFSET(BINDINFO, securityAttributes)+sizeof(SECURITY_ATTRIBUTES);
706 if(pcbiDest->cbSize >= size)
707 memset(&pcbiDest->securityAttributes, 0, sizeof(SECURITY_ATTRIBUTES));
708
709 if(pcbiSrc->pUnk)
710 IUnknown_AddRef(pcbiDest->pUnk);
711
712 return S_OK;
713}
714
715/***********************************************************************
716 * GetClassFileOrMime (URLMON.@)
717 *
718 * Determines the class ID from the bind context, file name or MIME type.
719 */
721 LPVOID pBuffer, DWORD cbBuffer, LPCWSTR pszMimeType, DWORD dwReserved,
722 CLSID *pclsid)
723{
724 FIXME("(%p, %s, %p, %d, %s, 0x%08x, %p): stub\n", pBC, debugstr_w(pszFilename), pBuffer,
725 cbBuffer, debugstr_w(pszMimeType), dwReserved, pclsid);
726 return E_NOTIMPL;
727}
728
729/***********************************************************************
730 * Extract (URLMON.@)
731 */
733{
734 HRESULT (WINAPI *pExtract)(void *, LPCSTR);
735
736 if (!hCabinet)
737 hCabinet = LoadLibraryA("cabinet.dll");
738
740 pExtract = (void *)GetProcAddress(hCabinet, "Extract");
741 if (!pExtract) return HRESULT_FROM_WIN32(GetLastError());
742
743 return pExtract(dest, szCabName);
744}
745
746/***********************************************************************
747 * IsLoggingEnabledA (URLMON.@)
748 */
750{
751 FIXME("(%s)\n", debugstr_a(url));
752 return FALSE;
753}
754
755/***********************************************************************
756 * IsLoggingEnabledW (URLMON.@)
757 */
759{
760 FIXME("(%s)\n", debugstr_w(url));
761 return FALSE;
762}
763
764/***********************************************************************
765 * IsProtectedModeURL (URLMON.111)
766 * Undocumented, added in IE7
767 */
769{
770 FIXME("stub: %s\n", debugstr_w(url));
771 return TRUE;
772}
773
774/***********************************************************************
775 * LogSqmBits (URLMON.410)
776 * Undocumented, added in IE8
777 */
779{
780 FIXME("stub: %d %d\n", unk1, unk2);
781 return 0;
782}
783
784/***********************************************************************
785 * LogSqmUXCommandOffsetInternal (URLMON.423)
786 * Undocumented, added in IE8
787 */
789{
790 FIXME("stub: %d %d %d %d\n", unk1, unk2, unk3, unk4);
791}
792
793/***********************************************************************
794 * MapUriToBrowserEmulationState (URLMON.444)
795 * Undocumented, added in IE8
796 */
798{
799 FIXME("stub: %d %d %d\n", unk1, unk2, unk3);
800 return 0;
801}
802
803/***********************************************************************
804 * MapBrowserEmulationModeToUserAgent (URLMON.445)
805 * Undocumented, added in IE8
806 */
808{
809 FIXME("stub: %d %d\n", unk1, unk2);
810 return 0;
811}
812
813/***********************************************************************
814 * CoInternetGetBrowserProfile (URLMON.446)
815 * Undocumented, added in IE8
816 */
818{
819 FIXME("%x: stub\n", unk);
820 return E_NOTIMPL;
821}
822
823/***********************************************************************
824 * FlushUrlmonZonesCache (URLMON.455)
825 * Undocumented, added in IE8
826 */
828{
829 FIXME("stub\n");
830}
831
832/***********************************************************************
833 * RegisterMediaTypes
834 * Added in IE3, registers known MIME-type strings.
835 */
836HRESULT WINAPI RegisterMediaTypes(UINT types, LPCSTR *szTypes, CLIPFORMAT *cfTypes)
837{
838 FIXME("stub: %u %p %p\n", types, szTypes, cfTypes);
839 return E_INVALIDARG;
840}
841
842/***********************************************************************
843 * ShouldShowIntranetWarningSecband
844 * Undocumented, added in IE7
845 */
847{
848 FIXME("%x: stub\n", unk);
849 return FALSE;
850}
851
852/***********************************************************************
853 * GetIUriPriv (urlmon.@)
854 *
855 * Not documented.
856 */
858{
859 FIXME("(%p,%p): stub\n", uri, p);
860 *p = NULL;
861 return E_NOTIMPL;
862}
static BOOL heap_free(void *mem)
Definition: appwiz.h:76
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define ARRAY_SIZE(A)
Definition: main.h:33
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
DWORD LPVOID fImpLoad
Definition: misc.cpp:155
const GUID IID_IUnknown
const GUID IID_IClassFactory
void unregister_notif_wnd_class(void)
Definition: bindprot.c:105
#define FIXME(fmt,...)
Definition: debug.h:111
#define WARN(fmt,...)
Definition: debug.h:112
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 NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
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
DWORD WINAPI TlsAlloc(VOID)
Definition: thread.c:1100
BOOL WINAPI TlsSetValue(IN DWORD Index, IN LPVOID Value)
Definition: thread.c:1276
BOOL WINAPI TlsFree(IN DWORD Index)
Definition: thread.c:1166
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
Definition: ole2.c:2033
HRESULT FileProtocol_Construct(IUnknown *outer, LPVOID *ppobj)
Definition: file.c:421
HRESULT FtpProtocol_Construct(IUnknown *outer, void **ppv)
Definition: ftp.c:454
HRESULT HttpProtocol_Construct(IUnknown *outer, void **ppv)
Definition: http.c:985
HRESULT HttpSProtocol_Construct(IUnknown *outer, void **ppv)
Definition: http.c:992
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:1823
HRESULT SecManagerImpl_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
Definition: sec_mgr.c:1241
HRESULT register_namespace(IClassFactory *cf, REFIID clsid, LPCWSTR protocol, BOOL urlmon_protocol)
Definition: session.c:122
void free_session(void)
Definition: session.c:755
HRESULT Uri_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
Definition: uri.c:5656
BOOL WINAPI InternetCloseHandle(HINTERNET hInternet)
Definition: internet.c:1414
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
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
GLsizeiptr size
Definition: glext.h:5919
GLenum src
Definition: glext.h:6340
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
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
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
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:426
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define InterlockedCompareExchange
Definition: interlocked.h:104
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
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:1432
static LPCSTR DWORD void * pvReserved
Definition: str.c:196
HRESULT hres
Definition: protocol.c:465
static char * dest
Definition: rtl.c:135
const char * uri
Definition: sec_mgr.c:1588
static DWORD unk1
Definition: cursoricon.c:1638
REFCLSID clsid
Definition: msctf.c:82
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
unsigned int UINT
Definition: ndis.h:50
interface IBindCtx * LPBINDCTX
Definition: objfwd.h:18
interface IBindCtx * LPBC
Definition: objfwd.h:18
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 offsetof(TYPE, MEMBER)
#define memset(x, y, z)
Definition: compat.h:39
HRESULT hr
Definition: shlfolder.c:183
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
LIST_ENTRY ProcessLocksList
Definition: winbase.h:883
Definition: list.h:15
const CLSID * clsid
Definition: main.c:70
IClassFactory * cf
Definition: urlmon_main.c:382
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
#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:573
HRESULT GopherProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj)
Definition: gopher.c:312
static ClassFactory HttpProtocolCF
Definition: urlmon_main.c:362
static ClassFactory MkProtocolCF
Definition: urlmon_main.c:366
static ClassFactory * impl_from_IClassFactory(IClassFactory *iface)
Definition: urlmon_main.c:267
static ClassFactory StdURLMonikerCF
Definition: urlmon_main.c:372
HRESULT WINAPI CoInternetGetBrowserProfile(DWORD unk)
Definition: urlmon_main.c:817
int WINAPI LogSqmBits(DWORD unk1, DWORD unk2)
Definition: urlmon_main.c:778
LONG URLMON_refCount
Definition: urlmon_main.c:42
static const struct object_creation_info object_creation[]
Definition: urlmon_main.c:393
HRESULT WINAPI DllRegisterServer(void)
Definition: urlmon_main.c:474
BOOL WINAPI ShouldShowIntranetWarningSecband(DWORD unk)
Definition: urlmon_main.c:846
static const WCHAR wszHttps[]
Definition: urlmon_main.c:390
static HMODULE hCabinet
Definition: urlmon_main.c:45
void WINAPI FlushUrlmonZonesCache(void)
Definition: urlmon_main.c:827
static const IClassFactoryVtbl ClassFactoryVtbl
Definition: urlmon_main.c:347
static HRESULT WINAPI CF_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: urlmon_main.c:306
HRESULT WINAPI CopyStgMedium(const STGMEDIUM *src, STGMEDIUM *dst)
Definition: urlmon_main.c:597
static ULONG WINAPI CF_Release(IClassFactory *iface)
Definition: urlmon_main.c:299
tls_data_t * get_tls_data(void)
Definition: urlmon_main.c:62
static HRESULT register_inf(BOOL doregister)
Definition: urlmon_main.c:458
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
Definition: urlmon_main.c:150
static ClassFactory FileProtocolCF
Definition: urlmon_main.c:356
static ClassFactory CUriCF
Definition: urlmon_main.c:376
static HRESULT WINAPI CF_QueryInterface(IClassFactory *iface, REFIID riid, LPVOID *ppv)
Definition: urlmon_main.c:272
static struct list tls_list
Definition: urlmon_main.c:50
void WINAPI ReleaseBindInfo(BINDINFO *pbindinfo)
Definition: urlmon_main.c:572
HRESULT WINAPI DllRegisterServerEx(void)
Definition: urlmon_main.c:500
#define X(x)
HRESULT WINAPI CopyBindInfo(const BINDINFO *pcbiSrc, BINDINFO *pcbiDest)
Definition: urlmon_main.c:654
static HRESULT WINAPI CF_LockServer(LPCLASSFACTORY iface, BOOL dolock)
Definition: urlmon_main.c:335
static void free_tls_list(void)
Definition: urlmon_main.c:92
HRESULT WINAPI DllUnregisterServer(void)
Definition: urlmon_main.c:487
static void init_session(void)
Definition: urlmon_main.c:408
HRESULT WINAPI DllInstall(BOOL bInstall, LPCWSTR cmdline)
Definition: urlmon_main.c:240
static ClassFactory MimeFilterCF
Definition: urlmon_main.c:374
int WINAPI MapBrowserEmulationModeToUserAgent(DWORD unk1, DWORD unk2)
Definition: urlmon_main.c:807
static ClassFactory ZoneManagerCF
Definition: urlmon_main.c:370
BOOL WINAPI IsLoggingEnabledW(LPCWSTR url)
Definition: urlmon_main.c:758
HRESULT WINAPI FaultInIEFeature(HWND hwnd, uCLSSPEC *pClassSpec, QUERYCONTEXT *pQuery, DWORD flags)
Definition: urlmon_main.c:540
static ClassFactory SecurityManagerCF
Definition: urlmon_main.c:368
static DWORD urlmon_tls
Definition: urlmon_main.c:46
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: urlmon_main.c:437
static ClassFactory HttpSProtocolCF
Definition: urlmon_main.c:364
static const WCHAR wszFtp[]
Definition: urlmon_main.c:387
HRESULT WINAPI IsValidURL(LPBC pBC, LPCWSTR szURL, DWORD dwReserved)
Definition: urlmon_main.c:525
static CRITICAL_SECTION tls_cs
Definition: urlmon_main.c:52
HRESULT WINAPI RegisterMediaTypes(UINT types, LPCSTR *szTypes, CLIPFORMAT *cfTypes)
Definition: urlmon_main.c:836
HRESULT WINAPI GetClassFileOrMime(LPBC pBC, LPCWSTR pszFilename, LPVOID pBuffer, DWORD cbBuffer, LPCWSTR pszMimeType, DWORD dwReserved, CLSID *pclsid)
Definition: urlmon_main.c:720
static void detach_thread(void)
Definition: urlmon_main.c:108
static const WCHAR wszMk[]
Definition: urlmon_main.c:391
static const WCHAR wszFile[]
Definition: urlmon_main.c:386
int WINAPI MapUriToBrowserEmulationState(DWORD unk1, DWORD unk2, DWORD unk3)
Definition: urlmon_main.c:797
static const WCHAR wszHttp[]
Definition: urlmon_main.c:389
static ClassFactory GopherProtocolCF
Definition: urlmon_main.c:360
HRESULT WINAPI Extract(void *dest, LPCSTR szCabName)
Definition: urlmon_main.c:732
HINSTANCE urlmon_instance
Definition: urlmon_main.c:43
static void process_detach(void)
Definition: urlmon_main.c:131
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:550
BOOL WINAPI IsProtectedModeURL(const WCHAR *url)
Definition: urlmon_main.c:768
static ClassFactory FtpProtocolCF
Definition: urlmon_main.c:358
BOOL WINAPI IsLoggingEnabledA(LPCSTR url)
Definition: urlmon_main.c:749
void WINAPI LogSqmUXCommandOffsetInternal(DWORD unk1, DWORD unk2, DWORD unk3, DWORD unk4)
Definition: urlmon_main.c:788
HRESULT WINAPI DllCanUnloadNow(void)
Definition: urlmon_main.c:251
static CRITICAL_SECTION_DEBUG tls_cs_dbg
Definition: urlmon_main.c:53
HRESULT WINAPI GetIUriPriv(IUri *uri, void **p)
Definition: urlmon_main.c:857
static const WCHAR wszGopher[]
Definition: urlmon_main.c:388
static ULONG WINAPI CF_AddRef(IClassFactory *iface)
Definition: urlmon_main.c:293
const char * debugstr_bindstatus(ULONG status)
Definition: urlmon_main.c:175
static void URLMON_LockModule(void)
Definition: urlmon_main.h:68
HRESULT WINAPI URLMON_DllUnregisterServer(void) DECLSPEC_HIDDEN
static void URLMON_UnlockModule(void)
Definition: urlmon_main.h:69
HRESULT WINAPI URLMON_DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv) DECLSPEC_HIDDEN
BOOL WINAPI URLMON_DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) DECLSPEC_HIDDEN
HRESULT WINAPI URLMON_DllRegisterServer(void) DECLSPEC_HIDDEN
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define GMEM_FIXED
Definition: winbase.h:293
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define TLS_OUT_OF_INDEXES
Definition: winbase.h:549
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:2357
#define E_NOINTERFACE
Definition: winerror.h:2364
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:2662
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define E_POINTER
Definition: winerror.h:2365
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:2663
BOOL WINAPI DestroyWindow(_In_ HWND)
const char * LPCSTR
Definition: xmlstorage.h:183
__wchar_t WCHAR
Definition: xmlstorage.h:180
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185