1c829f96a2aab69bd3a7b1957275d7b9ec98202f
[reactos.git] / reactos / dll / shellext / ntobjshex / ntobjshex.cpp
1 /*
2 * PROJECT: ReactOS shell extensions
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/shellext/ntobjshex/ntobjshex.cpp
5 * PURPOSE: NT Object Namespace shell extension
6 * PROGRAMMERS: David Quintana <gigaherz@gmail.com>
7 */
8
9 #include "precomp.h"
10
11 #include <atlwin.h>
12
13 WINE_DEFAULT_DEBUG_CHANNEL(ntobjshex);
14
15 BEGIN_OBJECT_MAP(ObjectMap)
16 OBJECT_ENTRY(CLSID_NtObjectFolder, CNtObjectFolder)
17 OBJECT_ENTRY(CLSID_RegistryFolder, CRegistryFolder)
18 END_OBJECT_MAP()
19
20 HINSTANCE g_hInstance;
21 CComModule g_Module;
22
23 void *operator new (size_t, void *buf)
24 {
25 return buf;
26 }
27
28 STDAPI_(BOOL)
29 DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
30 {
31 if (fdwReason == DLL_PROCESS_ATTACH)
32 {
33 g_hInstance = hinstDLL;
34 DisableThreadLibraryCalls(g_hInstance);
35
36 /* HACK - the global constructors don't run, so I placement new them here */
37 new (&g_Module) CComModule;
38 new (&_AtlWinModule) CAtlWinModule;
39 new (&_AtlBaseModule) CAtlBaseModule;
40 new (&_AtlComModule) CAtlComModule;
41
42 g_Module.Init(ObjectMap, g_hInstance, NULL);
43 }
44 else if (fdwReason == DLL_PROCESS_DETACH)
45 {
46 g_hInstance = NULL;
47 g_Module.Term();
48 }
49 return TRUE;
50 }
51
52 STDAPI
53 DllRegisterServer(void)
54 {
55 return g_Module.DllRegisterServer(FALSE);
56 }
57
58 STDAPI
59 DllUnregisterServer(void)
60 {
61 return g_Module.DllUnregisterServer(FALSE);
62 }
63
64 STDAPI
65 DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
66 {
67 return g_Module.DllGetClassObject(rclsid, riid, ppv);
68 }
69
70 STDAPI
71 DllCanUnloadNow(void)
72 {
73 return g_Module.DllCanUnloadNow();
74 }