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