ole32: Use a snapshot file when sharing storages for writing.
[wine/multimedia.git] / dlls / mmcndmgr / mmcndmgr.c
blob255b27d1289c507d0470719426ee0d00e629e7ca
1 /*
3 * Copyright 2011 Alistair Leslie-Hughes
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 #include <stdarg.h>
22 #define COBJMACROS
23 #include "windef.h"
24 #include "winbase.h"
25 #include "winuser.h"
26 #include "ole2.h"
27 #include "rpcproxy.h"
29 #include "wine/unicode.h"
30 #include "wine/debug.h"
31 #include "wine/library.h"
33 #include "initguid.h"
34 #include "mmc.h"
36 WINE_DEFAULT_DEBUG_CHANNEL(mmc);
38 static HINSTANCE MMC_hInstance;
40 static HRESULT WINAPI mmcversion_QueryInterface(IMMCVersionInfo *iface, REFIID riid, void **ppv)
42 TRACE("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
44 if ( IsEqualGUID( riid, &IID_IMMCVersionInfo ) ||
45 IsEqualGUID( riid, &IID_IUnknown ) )
47 *ppv = iface;
49 else
51 TRACE("Unsupported interface %s\n", debugstr_guid(riid));
52 *ppv = NULL;
53 return E_NOINTERFACE;
56 IMMCVersionInfo_AddRef(iface);
57 return S_OK;
60 static ULONG WINAPI mmcversion_AddRef(IMMCVersionInfo *iface)
62 return 2;
65 static ULONG WINAPI mmcversion_Release(IMMCVersionInfo *iface)
67 return 1;
70 static HRESULT WINAPI mmcversion_GetMMCVersion(IMMCVersionInfo *iface, LONG *pVersionMajor, LONG *pVersionMinor)
72 TRACE("(%p, %p, %p): stub\n", iface, pVersionMajor, pVersionMinor);
74 if(pVersionMajor)
75 *pVersionMajor = 3;
77 if(pVersionMinor)
78 *pVersionMinor = 0;
80 return S_OK;
83 static const struct IMMCVersionInfoVtbl mmcversionVtbl =
85 mmcversion_QueryInterface,
86 mmcversion_AddRef,
87 mmcversion_Release,
88 mmcversion_GetMMCVersion
91 static IMMCVersionInfo mmcVersionInfo = { &mmcversionVtbl };
93 /***********************************************************
94 * ClassFactory implementation
96 typedef HRESULT (*CreateInstanceFunc)(IUnknown*,REFIID,void**);
98 static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFGUID riid, void **ppvObject)
100 if(IsEqualGUID(&IID_IClassFactory, riid) || IsEqualGUID(&IID_IUnknown, riid)) {
101 IClassFactory_AddRef(iface);
102 *ppvObject = iface;
103 return S_OK;
106 WARN("not supported iid %s\n", debugstr_guid(riid));
107 *ppvObject = NULL;
108 return E_NOINTERFACE;
111 static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
113 TRACE("(%p)\n", iface);
114 return 2;
117 static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
119 TRACE("(%p)\n", iface);
121 return 1;
124 static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *outer,
125 REFIID riid, void **ppv)
127 TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv);
128 return IMMCVersionInfo_QueryInterface(&mmcVersionInfo, riid, ppv);
131 static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
133 TRACE("(%p)->(%x)\n", iface, fLock);
134 return S_OK;
137 static const IClassFactoryVtbl MMCClassFactoryVtbl = {
138 ClassFactory_QueryInterface,
139 ClassFactory_AddRef,
140 ClassFactory_Release,
141 ClassFactory_CreateInstance,
142 ClassFactory_LockServer
145 static IClassFactory MMCVersionInfoFactory = { &MMCClassFactoryVtbl };
147 HRESULT WINAPI DllGetClassObject( REFCLSID riid, REFIID iid, LPVOID *ppv )
149 TRACE("%s %s %p\n", debugstr_guid(riid), debugstr_guid(iid), ppv );
151 if( IsEqualCLSID( riid, &CLSID_MMCVersionInfo ))
153 TRACE("(CLSID_MMCVersionInfo %s %p)\n", debugstr_guid(riid), ppv);
154 return IClassFactory_QueryInterface(&MMCVersionInfoFactory, iid, ppv);
157 FIXME("Unsupported interface %s\n", debugstr_guid(riid));
158 return CLASS_E_CLASSNOTAVAILABLE;
161 HRESULT WINAPI DllRegisterServer(void)
163 return __wine_register_resources( MMC_hInstance );
166 HRESULT WINAPI DllUnregisterServer(void)
168 return __wine_unregister_resources( MMC_hInstance );
171 HRESULT WINAPI DllCanUnloadNow(void)
173 return S_FALSE;
176 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
178 TRACE("(%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved);
180 switch (fdwReason)
182 case DLL_WINE_PREATTACH:
183 return FALSE; /* prefer native version */
184 case DLL_PROCESS_ATTACH:
185 MMC_hInstance = hinstDLL;
186 break;
188 return TRUE;