Sync with trunk r63430.
[reactos.git] / dll / win32 / pstorec / pstorec.c
1 /*
2 * Protected Storage (pstores)
3 *
4 * Copyright 2004 Mike McCormack for CodeWeavers
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 #define WIN32_NO_STATUS
22 #define _INC_WINDOWS
23 #define COM_NO_WINDOWS_H
24
25 #include <stdarg.h>
26
27 #define COBJMACROS
28 #include <windef.h>
29 #include <winbase.h>
30 //#include "winuser.h"
31 #include <ole2.h>
32 #include <pstore.h>
33
34 #include <wine/debug.h>
35
36 WINE_DEFAULT_DEBUG_CHANNEL(pstores);
37
38 typedef struct
39 {
40 IPStore IPStore_iface;
41 LONG ref;
42 } PStore_impl;
43
44 static inline PStore_impl *impl_from_IPStore(IPStore *iface)
45 {
46 return CONTAINING_RECORD(iface, PStore_impl, IPStore_iface);
47 }
48
49 BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, LPVOID fImpLoad)
50 {
51 TRACE("%p %x %p\n", hinst, fdwReason, fImpLoad);
52
53 switch (fdwReason)
54 {
55 case DLL_WINE_PREATTACH:
56 return FALSE; /* prefer native version */
57 case DLL_PROCESS_ATTACH:
58 DisableThreadLibraryCalls(hinst);
59 break;
60 }
61 return TRUE;
62 }
63
64 /**************************************************************************
65 * IPStore->QueryInterface
66 */
67 static HRESULT WINAPI PStore_fnQueryInterface(
68 IPStore* iface,
69 REFIID riid,
70 LPVOID *ppvObj)
71 {
72 PStore_impl *This = impl_from_IPStore(iface);
73
74 TRACE("%p %s\n",This,debugstr_guid(riid));
75
76 *ppvObj = NULL;
77
78 if (IsEqualIID(riid, &IID_IUnknown))
79 {
80 *ppvObj = This;
81 }
82
83 if (*ppvObj)
84 {
85 IUnknown_AddRef((IUnknown*)(*ppvObj));
86 return S_OK;
87 }
88 TRACE("-- Interface: E_NOINTERFACE\n");
89 return E_NOINTERFACE;
90 }
91
92 /******************************************************************************
93 * IPStore->AddRef
94 */
95 static ULONG WINAPI PStore_fnAddRef(IPStore* iface)
96 {
97 PStore_impl *This = impl_from_IPStore(iface);
98
99 TRACE("%p %u\n", This, This->ref);
100
101 return InterlockedIncrement( &This->ref );
102 }
103
104 /******************************************************************************
105 * IPStore->Release
106 */
107 static ULONG WINAPI PStore_fnRelease(IPStore* iface)
108 {
109 PStore_impl *This = impl_from_IPStore(iface);
110 LONG ref;
111
112 TRACE("%p %u\n", This, This->ref);
113
114 ref = InterlockedDecrement( &This->ref );
115 if( !ref )
116 HeapFree( GetProcessHeap(), 0, This );
117
118 return ref;
119 }
120
121 /******************************************************************************
122 * IPStore->GetInfo
123 */
124 static HRESULT WINAPI PStore_fnGetInfo( IPStore* iface, PPST_PROVIDERINFO* ppProperties)
125 {
126 FIXME("\n");
127 return E_NOTIMPL;
128 }
129
130 /******************************************************************************
131 * IPStore->GetProvParam
132 */
133 static HRESULT WINAPI PStore_fnGetProvParam( IPStore* iface,
134 DWORD dwParam, DWORD* pcbData, BYTE** ppbData, DWORD dwFlags)
135 {
136 FIXME("\n");
137 return E_NOTIMPL;
138 }
139
140 /******************************************************************************
141 * IPStore->SetProvParam
142 */
143 static HRESULT WINAPI PStore_fnSetProvParam( IPStore* This,
144 DWORD dwParam, DWORD cbData, BYTE* pbData, DWORD* dwFlags)
145 {
146 FIXME("\n");
147 return E_NOTIMPL;
148 }
149
150 /******************************************************************************
151 * IPStore->CreateType
152 */
153 static HRESULT WINAPI PStore_fnCreateType( IPStore* This,
154 PST_KEY Key, const GUID* pType, PPST_TYPEINFO pInfo, DWORD dwFlags)
155 {
156 FIXME("%p %08x %s %p(%d,%s) %08x\n", This, Key, debugstr_guid(pType),
157 pInfo, pInfo->cbSize, debugstr_w(pInfo->szDisplayName), dwFlags);
158
159 return E_NOTIMPL;
160 }
161
162 /******************************************************************************
163 * IPStore->GetTypeInfo
164 */
165 static HRESULT WINAPI PStore_fnGetTypeInfo( IPStore* This,
166 PST_KEY Key, const GUID* pType, PPST_TYPEINFO** ppInfo, DWORD dwFlags)
167 {
168 FIXME("\n");
169 return E_NOTIMPL;
170 }
171
172 /******************************************************************************
173 * IPStore->DeleteType
174 */
175 static HRESULT WINAPI PStore_fnDeleteType( IPStore* This,
176 PST_KEY Key, const GUID* pType, DWORD dwFlags)
177 {
178 FIXME("%p %d %s %08x\n", This, Key, debugstr_guid(pType), dwFlags);
179 return E_NOTIMPL;
180 }
181
182 /******************************************************************************
183 * IPStore->CreateSubtype
184 */
185 static HRESULT WINAPI PStore_fnCreateSubtype( IPStore* This,
186 PST_KEY Key, const GUID* pType, const GUID* pSubtype,
187 PPST_TYPEINFO pInfo, PPST_ACCESSRULESET pRules, DWORD dwFlags)
188 {
189 FIXME("%p %08x %s %s %p %p %08x\n", This, Key, debugstr_guid(pType),
190 debugstr_guid(pSubtype), pInfo, pRules, dwFlags);
191 return E_NOTIMPL;
192 }
193
194 /******************************************************************************
195 * IPStore->GetSubtypeInfo
196 */
197 static HRESULT WINAPI PStore_fnGetSubtypeInfo( IPStore* This,
198 PST_KEY Key, const GUID* pType, const GUID* pSubtype,
199 PPST_TYPEINFO** ppInfo, DWORD dwFlags)
200 {
201 FIXME("\n");
202 return E_NOTIMPL;
203 }
204
205 /******************************************************************************
206 * IPStore->DeleteSubtype
207 */
208 static HRESULT WINAPI PStore_fnDeleteSubtype( IPStore* This,
209 PST_KEY Key, const GUID* pType, const GUID* pSubtype, DWORD dwFlags)
210 {
211 FIXME("%p %u %s %s %08x\n", This, Key,
212 debugstr_guid(pType), debugstr_guid(pSubtype), dwFlags);
213 return E_NOTIMPL;
214 }
215
216 /******************************************************************************
217 * IPStore->ReadAccessRuleset
218 */
219 static HRESULT WINAPI PStore_fnReadAccessRuleset( IPStore* This,
220 PST_KEY Key, const GUID* pType, const GUID* pSubtype, PPST_TYPEINFO pInfo,
221 PPST_ACCESSRULESET** ppRules, DWORD dwFlags)
222 {
223 FIXME("\n");
224 return E_NOTIMPL;
225 }
226
227 /******************************************************************************
228 * IPStore->WriteAccessRuleSet
229 */
230 static HRESULT WINAPI PStore_fnWriteAccessRuleset( IPStore* This,
231 PST_KEY Key, const GUID* pType, const GUID* pSubtype,
232 PPST_TYPEINFO pInfo, PPST_ACCESSRULESET pRules, DWORD dwFlags)
233 {
234 FIXME("\n");
235 return E_NOTIMPL;
236 }
237
238 /******************************************************************************
239 * IPStore->EnumTypes
240 */
241 static HRESULT WINAPI PStore_fnEnumTypes( IPStore* This, PST_KEY Key,
242 DWORD dwFlags, IEnumPStoreTypes** ppenum)
243 {
244 FIXME("\n");
245 return E_NOTIMPL;
246 }
247
248 /******************************************************************************
249 * IPStore->EnumSubtypes
250 */
251 static HRESULT WINAPI PStore_fnEnumSubtypes( IPStore* This, PST_KEY Key,
252 const GUID* pType, DWORD dwFlags, IEnumPStoreTypes** ppenum)
253 {
254 FIXME("\n");
255 return E_NOTIMPL;
256 }
257
258 /******************************************************************************
259 * IPStore->DeleteItem
260 */
261 static HRESULT WINAPI PStore_fnDeleteItem( IPStore* This, PST_KEY Key,
262 const GUID* pItemType, const GUID* pItemSubType, LPCWSTR szItemName,
263 PPST_PROMPTINFO pPromptInfo, DWORD dwFlags)
264 {
265 FIXME("\n");
266 return E_NOTIMPL;
267 }
268
269 /******************************************************************************
270 * IPStore->ReadItem
271 */
272 static HRESULT WINAPI PStore_fnReadItem( IPStore* This, PST_KEY Key,
273 const GUID* pItemType, const GUID* pItemSubtype, LPCWSTR szItemName,
274 DWORD *cbData, BYTE** pbData, PPST_PROMPTINFO pPromptInfo, DWORD dwFlags)
275 {
276 FIXME("%p %08x %s %s %s %p %p %p %08x\n", This, Key,
277 debugstr_guid(pItemType), debugstr_guid(pItemSubtype),
278 debugstr_w(szItemName), cbData, pbData, pPromptInfo, dwFlags);
279 return E_NOTIMPL;
280 }
281
282 /******************************************************************************
283 * IPStore->WriteItem
284 */
285 static HRESULT WINAPI PStore_fnWriteItem( IPStore* This, PST_KEY Key,
286 const GUID* pItemType, const GUID* pItemSubtype, LPCWSTR szItemName,
287 DWORD cbData, BYTE* ppbData, PPST_PROMPTINFO pPromptInfo,
288 DWORD dwDefaultConfirmationStyle, DWORD dwFlags)
289 {
290 FIXME("%p %08x %s %s %s %d %p %p %08x\n", This, Key,
291 debugstr_guid(pItemType), debugstr_guid(pItemSubtype),
292 debugstr_w(szItemName), cbData, ppbData, pPromptInfo, dwFlags);
293 return E_NOTIMPL;
294 }
295
296 /******************************************************************************
297 * IPStore->OpenItem
298 */
299 static HRESULT WINAPI PStore_fnOpenItem( IPStore* This, PST_KEY Key,
300 const GUID* pItemType, const GUID* pItemSubtype, LPCWSTR szItemName,
301 PST_ACCESSMODE ModeFlags, PPST_PROMPTINFO pProomptInfo, DWORD dwFlags )
302 {
303 FIXME("(%p,%08x,%s,%s,%s,%08x,%p,%08x) stub\n", This, Key, debugstr_guid(pItemType),
304 debugstr_guid(pItemSubtype), debugstr_w(szItemName), ModeFlags, pProomptInfo, dwFlags);
305 return E_NOTIMPL;
306 }
307
308 /******************************************************************************
309 * IPStore->CloseItem
310 */
311 static HRESULT WINAPI PStore_fnCloseItem( IPStore* This, PST_KEY Key,
312 const GUID* pItemType, const GUID* pItemSubtype, LPCWSTR* szItemName,
313 DWORD dwFlags)
314 {
315 FIXME("\n");
316 return E_NOTIMPL;
317 }
318
319 /******************************************************************************
320 * IPStore->EnumItems
321 */
322 static HRESULT WINAPI PStore_fnEnumItems( IPStore* This, PST_KEY Key,
323 const GUID* pItemType, const GUID* pItemSubtype, DWORD dwFlags,
324 IEnumPStoreItems** ppenum)
325 {
326 FIXME("\n");
327 return E_NOTIMPL;
328 }
329
330
331 static const IPStoreVtbl pstores_vtbl =
332 {
333 PStore_fnQueryInterface,
334 PStore_fnAddRef,
335 PStore_fnRelease,
336 PStore_fnGetInfo,
337 PStore_fnGetProvParam,
338 PStore_fnSetProvParam,
339 PStore_fnCreateType,
340 PStore_fnGetTypeInfo,
341 PStore_fnDeleteType,
342 PStore_fnCreateSubtype,
343 PStore_fnGetSubtypeInfo,
344 PStore_fnDeleteSubtype,
345 PStore_fnReadAccessRuleset,
346 PStore_fnWriteAccessRuleset,
347 PStore_fnEnumTypes,
348 PStore_fnEnumSubtypes,
349 PStore_fnDeleteItem,
350 PStore_fnReadItem,
351 PStore_fnWriteItem,
352 PStore_fnOpenItem,
353 PStore_fnCloseItem,
354 PStore_fnEnumItems
355 };
356
357 HRESULT WINAPI PStoreCreateInstance( IPStore** ppProvider,
358 PST_PROVIDERID* pProviderID, void* pReserved, DWORD dwFlags)
359 {
360 PStore_impl *ips;
361
362 TRACE("%p %s %p %08x\n", ppProvider, debugstr_guid(pProviderID), pReserved, dwFlags);
363
364 ips = HeapAlloc( GetProcessHeap(), 0, sizeof (PStore_impl) );
365 if( !ips )
366 return E_OUTOFMEMORY;
367
368 ips->IPStore_iface.lpVtbl = &pstores_vtbl;
369 ips->ref = 1;
370
371 *ppProvider = (IPStore*) ips;
372
373 return S_OK;
374 }
375
376 HRESULT WINAPI DllRegisterServer(void)
377 {
378 FIXME("\n");
379 return S_OK;
380 }
381
382 HRESULT WINAPI DllUnregisterServer(void)
383 {
384 FIXME("\n");
385 return S_OK;
386 }
387
388 /***********************************************************************
389 * DllGetClassObject (PSTOREC.@)
390 */
391 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
392 {
393 FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv);
394 return CLASS_E_CLASSNOTAVAILABLE;
395 }
396
397 HRESULT WINAPI DllCanUnloadNow(void)
398 {
399 return S_FALSE;
400 }