Jacek Caban : urlmon: Register protocol handlers in DllMain.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jul 10 07:12:12 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 6004183e51161fab0087b613c8f09d6e3a6bd150
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=6004183e51161fab0087b613c8f09d6e3a6bd150
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Jul 7 20:31:59 2006 +0200
urlmon: Register protocol handlers in DllMain.
---
dlls/urlmon/urlmon_main.c | 40 +++++++++++++++++++++++++++++++++++-----
1 files changed, 35 insertions(+), 5 deletions(-)
diff --git a/dlls/urlmon/urlmon_main.c b/dlls/urlmon/urlmon_main.c
index 49384e6..f35624a 100644
--- a/dlls/urlmon/urlmon_main.c
+++ b/dlls/urlmon/urlmon_main.c
@@ -44,6 +44,8 @@ HINSTANCE URLMON_hInstance = 0;
DWORD urlmon_tls = 0;
+static void init_session(BOOL);
+
/***********************************************************************
* DllMain (URLMON.init)
*/
@@ -55,11 +57,13 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL,
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hinstDLL);
URLMON_hInstance = hinstDLL;
+ init_session(TRUE);
break;
case DLL_PROCESS_DETACH:
if(urlmon_tls)
TlsFree(urlmon_tls);
+ init_session(FALSE);
URLMON_hInstance = 0;
break;
}
@@ -186,17 +190,43 @@ struct object_creation_info
{
const CLSID *clsid;
IClassFactory *cf;
+ LPCWSTR protocol;
};
+static const WCHAR wszFile[] = {'f','i','l','e',0};
+static const WCHAR wszFtp[] = {'f','t','p',0};
+static const WCHAR wszHttp[] = {'h','t','t','p',0};
+
static const struct object_creation_info object_creation[] =
{
- { &CLSID_FileProtocol, CLASSFACTORY(&FileProtocolCF) },
- { &CLSID_FtpProtocol, CLASSFACTORY(&FtpProtocolCF) },
- { &CLSID_HttpProtocol, CLASSFACTORY(&HttpProtocolCF) },
- { &CLSID_InternetSecurityManager, CLASSFACTORY(&SecurityManagerCF) },
- { &CLSID_InternetZoneManager, CLASSFACTORY(&ZoneManagerCF) }
+ { &CLSID_FileProtocol, CLASSFACTORY(&FileProtocolCF), wszFile },
+ { &CLSID_FtpProtocol, CLASSFACTORY(&FtpProtocolCF), wszFtp },
+ { &CLSID_HttpProtocol, CLASSFACTORY(&HttpProtocolCF), wszHttp },
+ { &CLSID_InternetSecurityManager, CLASSFACTORY(&SecurityManagerCF), NULL },
+ { &CLSID_InternetZoneManager, CLASSFACTORY(&ZoneManagerCF), NULL }
};
+static void init_session(BOOL init)
+{
+ IInternetSession *session;
+ int i;
+
+ CoInternetGetSession(0, &session, 0);
+
+ for(i=0; i < sizeof(object_creation)/sizeof(object_creation[0]); i++) {
+ if(object_creation[i].protocol) {
+ if(init)
+ IInternetSession_RegisterNameSpace(session, object_creation[i].cf,
+ object_creation[i].clsid, object_creation[i].protocol, 0, NULL, 0);
+ else
+ IInternetSession_UnregisterNameSpace(session, object_creation[i].cf,
+ object_creation[i].protocol);
+ }
+ }
+
+ IInternetSession_Release(session);
+}
+
/*******************************************************************************
* DllGetClassObject [URLMON.@]
* Retrieves class object from a DLL object
More information about the wine-cvs
mailing list