advapi32: Allow string alias for common RID in sid strings.
[wine/multimedia.git] / dlls / oledb32 / datainit.c
blob862c725956fc1aebbf4f3a0284310be24762940c
1 /*
2 * Copyright (C) 2012 Alistair Leslie-Hughes
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 #include <stdarg.h>
20 #define COBJMACROS
21 #define NONAMELESSUNION
22 #define NONAMELESSSTRUCT
24 #include "windef.h"
25 #include "winbase.h"
26 #include "winnls.h"
27 #include "ole2.h"
28 #include "msdasc.h"
29 #include "oledberr.h"
31 #include "oledb_private.h"
33 #include "wine/debug.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(oledb);
38 typedef struct datainit
40 IDataInitialize IDataInitialize_iface;
42 LONG ref;
43 } datainit;
45 static inline datainit *impl_from_IDataInitialize(IDataInitialize *iface)
47 return CONTAINING_RECORD(iface, datainit, IDataInitialize_iface);
50 typedef struct
52 IDBInitialize IDBInitialize_iface;
53 IDBProperties IDBProperties_iface;
55 LONG ref;
56 } dbinit;
58 static inline dbinit *impl_from_IDBInitialize(IDBInitialize *iface)
60 return CONTAINING_RECORD(iface, dbinit, IDBInitialize_iface);
63 static inline dbinit *impl_from_IDBProperties(IDBProperties *iface)
65 return CONTAINING_RECORD(iface, dbinit, IDBProperties_iface);
68 static HRESULT WINAPI dbprops_QueryInterface(IDBProperties *iface, REFIID riid, void **ppvObject)
70 dbinit *This = impl_from_IDBProperties(iface);
72 return IDBInitialize_QueryInterface(&This->IDBInitialize_iface, riid, ppvObject);
75 static ULONG WINAPI dbprops_AddRef(IDBProperties *iface)
77 dbinit *This = impl_from_IDBProperties(iface);
79 return IDBInitialize_AddRef(&This->IDBInitialize_iface);
82 static ULONG WINAPI dbprops_Release(IDBProperties *iface)
84 dbinit *This = impl_from_IDBProperties(iface);
86 return IDBInitialize_Release(&This->IDBInitialize_iface);
89 static HRESULT WINAPI dbprops_GetProperties(IDBProperties *iface, ULONG cPropertyIDSets,
90 const DBPROPIDSET rgPropertyIDSets[], ULONG *pcPropertySets, DBPROPSET **prgPropertySets)
92 dbinit *This = impl_from_IDBProperties(iface);
94 FIXME("(%p)->(%d %p %p %p)\n", This, cPropertyIDSets, rgPropertyIDSets, pcPropertySets, prgPropertySets);
96 return E_NOTIMPL;
99 static HRESULT WINAPI dbprops_GetPropertyInfo(IDBProperties *iface, ULONG cPropertyIDSets,
100 const DBPROPIDSET rgPropertyIDSets[], ULONG *pcPropertyInfoSets,
101 DBPROPINFOSET **prgPropertyInfoSets, OLECHAR **ppDescBuffer)
103 dbinit *This = impl_from_IDBProperties(iface);
105 FIXME("(%p)->(%d %p %p %p %p)\n", This, cPropertyIDSets, rgPropertyIDSets, pcPropertyInfoSets,
106 prgPropertyInfoSets, ppDescBuffer);
108 return E_NOTIMPL;
111 static HRESULT WINAPI dbprops_SetProperties(IDBProperties *iface, ULONG cPropertySets,
112 DBPROPSET rgPropertySets[])
114 dbinit *This = impl_from_IDBProperties(iface);
116 FIXME("(%p)->(%d %p)\n", This, cPropertySets, rgPropertySets);
118 return E_NOTIMPL;
121 static const struct IDBPropertiesVtbl dbprops_vtbl =
123 dbprops_QueryInterface,
124 dbprops_AddRef,
125 dbprops_Release,
126 dbprops_GetProperties,
127 dbprops_GetPropertyInfo,
128 dbprops_SetProperties
131 static HRESULT WINAPI dbinit_QueryInterface(IDBInitialize *iface, REFIID riid, void **obj)
133 dbinit *This = impl_from_IDBInitialize(iface);
134 TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), obj);
136 *obj = NULL;
138 if(IsEqualIID(riid, &IID_IUnknown) ||
139 IsEqualIID(riid, &IID_IDBInitialize))
141 *obj = iface;
143 else if(IsEqualIID(riid, &IID_IDBProperties))
145 *obj = &This->IDBProperties_iface;
147 else
149 FIXME("interface %s not implemented\n", debugstr_guid(riid));
150 return E_NOINTERFACE;
153 IDBInitialize_AddRef(iface);
154 return S_OK;
157 static ULONG WINAPI dbinit_AddRef(IDBInitialize *iface)
159 dbinit *This = impl_from_IDBInitialize(iface);
160 TRACE("(%p)\n", This);
162 return InterlockedIncrement(&This->ref);
165 static ULONG WINAPI dbinit_Release(IDBInitialize *iface)
167 dbinit *This = impl_from_IDBInitialize(iface);
168 LONG ref;
170 TRACE("(%p)\n", This);
172 ref = InterlockedDecrement(&This->ref);
173 if(ref == 0)
175 HeapFree(GetProcessHeap(), 0, This);
178 return ref;
181 static HRESULT WINAPI dbinit_Initialize(IDBInitialize *iface)
183 dbinit *This = impl_from_IDBInitialize(iface);
185 FIXME("(%p) stub\n", This);
187 return S_OK;
190 static HRESULT WINAPI dbinit_Uninitialize(IDBInitialize *iface)
192 dbinit *This = impl_from_IDBInitialize(iface);
194 FIXME("(%p) stub\n", This);
196 return S_OK;
199 static const IDBInitializeVtbl dbinit_vtbl =
201 dbinit_QueryInterface,
202 dbinit_AddRef,
203 dbinit_Release,
204 dbinit_Initialize,
205 dbinit_Uninitialize
208 static HRESULT create_db_init(void **obj)
210 dbinit *This;
212 TRACE("()\n");
214 *obj = NULL;
216 This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
217 if(!This) return E_OUTOFMEMORY;
219 This->IDBInitialize_iface.lpVtbl = &dbinit_vtbl;
220 This->IDBProperties_iface.lpVtbl = &dbprops_vtbl;
221 This->ref = 1;
223 *obj = &This->IDBInitialize_iface;
225 return S_OK;
228 static HRESULT WINAPI datainit_QueryInterface(IDataInitialize *iface, REFIID riid, void **obj)
230 datainit *This = impl_from_IDataInitialize(iface);
231 TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), obj);
233 *obj = NULL;
235 if(IsEqualIID(riid, &IID_IUnknown) ||
236 IsEqualIID(riid, &IID_IDataInitialize))
238 *obj = &This->IDataInitialize_iface;
240 else
242 FIXME("interface %s not implemented\n", debugstr_guid(riid));
243 return E_NOINTERFACE;
246 IDataInitialize_AddRef(iface);
247 return S_OK;
250 static ULONG WINAPI datainit_AddRef(IDataInitialize *iface)
252 datainit *This = impl_from_IDataInitialize(iface);
253 TRACE("(%p)\n", This);
255 return InterlockedIncrement(&This->ref);
258 static ULONG WINAPI datainit_Release(IDataInitialize *iface)
260 datainit *This = impl_from_IDataInitialize(iface);
261 LONG ref;
263 TRACE("(%p)\n", This);
265 ref = InterlockedDecrement(&This->ref);
266 if(ref == 0)
268 HeapFree(GetProcessHeap(), 0, This);
271 return ref;
274 /*** IDataInitialize methods ***/
275 static HRESULT WINAPI datainit_GetDataSource(IDataInitialize *iface, IUnknown *pUnkOuter, DWORD dwClsCtx,
276 LPWSTR pwszInitializationString, REFIID riid, IUnknown **ppDataSource)
278 datainit *This = impl_from_IDataInitialize(iface);
280 FIXME("(%p)->(%p %d %s %s %p)\n", This, pUnkOuter, dwClsCtx, debugstr_w(pwszInitializationString),
281 debugstr_guid(riid), ppDataSource);
283 if(IsEqualIID(riid, &IID_IDBInitialize))
285 return create_db_init( (LPVOID*)ppDataSource);
288 return E_NOTIMPL;
291 static HRESULT WINAPI datainit_GetInitializationString(IDataInitialize *iface, IUnknown *pDataSource,
292 boolean fIncludePassword, LPWSTR *ppwszInitString)
294 datainit *This = impl_from_IDataInitialize(iface);
296 FIXME("(%p)->(%p %d %p)\n", This, pDataSource, fIncludePassword, ppwszInitString);
298 return E_NOTIMPL;
301 static HRESULT WINAPI datainit_CreateDBInstance(IDataInitialize *iface, REFCLSID clsidProvider,
302 IUnknown *pUnkOuter, DWORD dwClsCtx, LPWSTR pwszReserved, REFIID riid,
303 IUnknown **ppDataSource)
305 datainit *This = impl_from_IDataInitialize(iface);
307 FIXME("(%p)->()\n", This);
309 return E_NOTIMPL;
312 static HRESULT WINAPI datainit_RemoteCreateDBInstanceEx(IDataInitialize *iface, REFCLSID clsidProvider,
313 IUnknown *pUnkOuter, DWORD dwClsCtx, LPWSTR pwszReserved, COSERVERINFO *pServerInfo,
314 DWORD cmq, GUID **rgpIID, IUnknown **rgpItf, HRESULT *rghr)
316 datainit *This = impl_from_IDataInitialize(iface);
318 FIXME("(%p)->()\n", This);
320 return E_NOTIMPL;
323 static HRESULT WINAPI datainit_LoadStringFromStorage(IDataInitialize *iface, LPWSTR pwszFileName,
324 LPWSTR *ppwszInitializationString)
326 datainit *This = impl_from_IDataInitialize(iface);
328 FIXME("(%p)->(%s %p)\n", This, debugstr_w(pwszFileName), ppwszInitializationString);
330 return E_NOTIMPL;
333 static HRESULT WINAPI datainit_WriteStringToStorage(IDataInitialize *iface, LPWSTR pwszFileName,
334 LPWSTR pwszInitializationString, DWORD dwCreationDisposition)
336 datainit *This = impl_from_IDataInitialize(iface);
338 FIXME("(%p)->(%s %s %d)\n", This, debugstr_w(pwszFileName), debugstr_w(pwszInitializationString), dwCreationDisposition);
340 return E_NOTIMPL;
344 static const struct IDataInitializeVtbl datainit_vtbl =
346 datainit_QueryInterface,
347 datainit_AddRef,
348 datainit_Release,
349 datainit_GetDataSource,
350 datainit_GetInitializationString,
351 datainit_CreateDBInstance,
352 datainit_RemoteCreateDBInstanceEx,
353 datainit_LoadStringFromStorage,
354 datainit_WriteStringToStorage
357 HRESULT create_data_init(IUnknown *outer, void **obj)
359 datainit *This;
361 TRACE("(%p)\n", obj);
363 if(outer) return CLASS_E_NOAGGREGATION;
365 *obj = NULL;
367 This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This));
368 if(!This) return E_OUTOFMEMORY;
370 This->IDataInitialize_iface.lpVtbl = &datainit_vtbl;
371 This->ref = 1;
373 *obj = &This->IDataInitialize_iface;
375 return S_OK;