ReactOS 0.4.17-dev-966-gf06eace
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
46/**************************************************************************
47 * IPStore->QueryInterface
48 */
50 IPStore* iface,
52 LPVOID *ppvObj)
53{
55
56 TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObj);
57
58 *ppvObj = NULL;
59
60 if (IsEqualIID(riid, &IID_IPStore) || IsEqualIID(riid, &IID_IUnknown))
61 {
62 *ppvObj = &This->IPStore_iface;
63 }
64
65 if (*ppvObj)
66 {
67 IUnknown_AddRef((IUnknown*)(*ppvObj));
68 return S_OK;
69 }
70 TRACE("-- Interface: E_NOINTERFACE\n");
71 return E_NOINTERFACE;
72}
73
74/******************************************************************************
75 * IPStore->AddRef
76 */
77static ULONG WINAPI PStore_fnAddRef(IPStore* iface)
78{
80
81 TRACE("%p %lu\n", This, This->ref);
82
83 return InterlockedIncrement( &This->ref );
84}
85
86/******************************************************************************
87 * IPStore->Release
88 */
89static ULONG WINAPI PStore_fnRelease(IPStore* iface)
90{
92 LONG ref;
93
94 TRACE("%p %lu\n", This, This->ref);
95
96 ref = InterlockedDecrement( &This->ref );
97 if( !ref )
99
100 return ref;
101}
102
103/******************************************************************************
104 * IPStore->GetInfo
105 */
106static HRESULT WINAPI PStore_fnGetInfo( IPStore* iface, PPST_PROVIDERINFO* ppProperties)
107{
108 FIXME("\n");
109 return E_NOTIMPL;
110}
111
112/******************************************************************************
113 * IPStore->GetProvParam
114 */
115static HRESULT WINAPI PStore_fnGetProvParam( IPStore* iface,
116 DWORD dwParam, DWORD* pcbData, BYTE** ppbData, DWORD dwFlags)
117{
118 FIXME("\n");
119 return E_NOTIMPL;
120}
121
122/******************************************************************************
123 * IPStore->SetProvParam
124 */
126 DWORD dwParam, DWORD cbData, BYTE* pbData, DWORD* dwFlags)
127{
128 FIXME("\n");
129 return E_NOTIMPL;
130}
131
132/******************************************************************************
133 * IPStore->CreateType
134 */
136 PST_KEY Key, const GUID* pType, PPST_TYPEINFO pInfo, DWORD dwFlags)
137{
138 FIXME("%p %08lx %s %p(%ld,%s) %08lx\n", This, Key, debugstr_guid(pType),
139 pInfo, pInfo->cbSize, debugstr_w(pInfo->szDisplayName), dwFlags);
140
141 return E_NOTIMPL;
142}
143
144/******************************************************************************
145 * IPStore->GetTypeInfo
146 */
148 PST_KEY Key, const GUID* pType, PPST_TYPEINFO** ppInfo, DWORD dwFlags)
149{
150 FIXME("\n");
151 return E_NOTIMPL;
152}
153
154/******************************************************************************
155 * IPStore->DeleteType
156 */
158 PST_KEY Key, const GUID* pType, DWORD dwFlags)
159{
160 FIXME("%p %ld %s %08lx\n", This, Key, debugstr_guid(pType), dwFlags);
161 return E_NOTIMPL;
162}
163
164/******************************************************************************
165 * IPStore->CreateSubtype
166 */
168 PST_KEY Key, const GUID* pType, const GUID* pSubtype,
169 PPST_TYPEINFO pInfo, PPST_ACCESSRULESET pRules, DWORD dwFlags)
170{
171 FIXME("%p %08lx %s %s %p %p %08lx\n", This, Key, debugstr_guid(pType),
172 debugstr_guid(pSubtype), pInfo, pRules, dwFlags);
173 return E_NOTIMPL;
174}
175
176/******************************************************************************
177 * IPStore->GetSubtypeInfo
178 */
180 PST_KEY Key, const GUID* pType, const GUID* pSubtype,
181 PPST_TYPEINFO** ppInfo, DWORD dwFlags)
182{
183 FIXME("\n");
184 return E_NOTIMPL;
185}
186
187/******************************************************************************
188 * IPStore->DeleteSubtype
189 */
191 PST_KEY Key, const GUID* pType, const GUID* pSubtype, DWORD dwFlags)
192{
193 FIXME("%p %lu %s %s %08lx\n", This, Key,
194 debugstr_guid(pType), debugstr_guid(pSubtype), dwFlags);
195 return E_NOTIMPL;
196}
197
198/******************************************************************************
199 * IPStore->ReadAccessRuleset
200 */
202 PST_KEY Key, const GUID* pType, const GUID* pSubtype, PPST_TYPEINFO pInfo,
203 PPST_ACCESSRULESET** ppRules, DWORD dwFlags)
204{
205 FIXME("\n");
206 return E_NOTIMPL;
207}
208
209/******************************************************************************
210 * IPStore->WriteAccessRuleSet
211 */
213 PST_KEY Key, const GUID* pType, const GUID* pSubtype,
214 PPST_TYPEINFO pInfo, PPST_ACCESSRULESET pRules, DWORD dwFlags)
215{
216 FIXME("\n");
217 return E_NOTIMPL;
218}
219
220/******************************************************************************
221 * IPStore->EnumTypes
222 */
224 DWORD dwFlags, IEnumPStoreTypes** ppenum)
225{
226 FIXME("\n");
227 return E_NOTIMPL;
228}
229
230/******************************************************************************
231 * IPStore->EnumSubtypes
232 */
234 const GUID* pType, DWORD dwFlags, IEnumPStoreTypes** ppenum)
235{
236 FIXME("\n");
237 return E_NOTIMPL;
238}
239
240/******************************************************************************
241 * IPStore->DeleteItem
242 */
244 const GUID* pItemType, const GUID* pItemSubType, LPCWSTR szItemName,
245 PPST_PROMPTINFO pPromptInfo, DWORD dwFlags)
246{
247 FIXME("\n");
248 return E_NOTIMPL;
249}
250
251/******************************************************************************
252 * IPStore->ReadItem
253 */
255 const GUID* pItemType, const GUID* pItemSubtype, LPCWSTR szItemName,
256 DWORD *cbData, BYTE** pbData, PPST_PROMPTINFO pPromptInfo, DWORD dwFlags)
257{
258 FIXME("%p %08lx %s %s %s %p %p %p %08lx\n", This, Key,
259 debugstr_guid(pItemType), debugstr_guid(pItemSubtype),
260 debugstr_w(szItemName), cbData, pbData, pPromptInfo, dwFlags);
261 return E_NOTIMPL;
262}
263
264/******************************************************************************
265 * IPStore->WriteItem
266 */
268 const GUID* pItemType, const GUID* pItemSubtype, LPCWSTR szItemName,
269 DWORD cbData, BYTE* ppbData, PPST_PROMPTINFO pPromptInfo,
270 DWORD dwDefaultConfirmationStyle, DWORD dwFlags)
271{
272 FIXME("%p %08lx %s %s %s %ld %p %p %08lx\n", This, Key,
273 debugstr_guid(pItemType), debugstr_guid(pItemSubtype),
274 debugstr_w(szItemName), cbData, ppbData, pPromptInfo, dwFlags);
275 return E_NOTIMPL;
276}
277
278/******************************************************************************
279 * IPStore->OpenItem
280 */
282 const GUID* pItemType, const GUID* pItemSubtype, LPCWSTR szItemName,
283 PST_ACCESSMODE ModeFlags, PPST_PROMPTINFO pPromptInfo, DWORD dwFlags )
284{
285 FIXME("(%p,%08lx,%s,%s,%s,%08lx,%p,%08lx) stub\n", This, Key, debugstr_guid(pItemType),
286 debugstr_guid(pItemSubtype), debugstr_w(szItemName), ModeFlags, pPromptInfo, dwFlags);
287 return E_NOTIMPL;
288}
289
290/******************************************************************************
291 * IPStore->CloseItem
292 */
294 const GUID* pItemType, const GUID* pItemSubtype, LPCWSTR* szItemName,
296{
297 FIXME("\n");
298 return E_NOTIMPL;
299}
300
301/******************************************************************************
302 * IPStore->EnumItems
303 */
305 const GUID* pItemType, const GUID* pItemSubtype, DWORD dwFlags,
306 IEnumPStoreItems** ppenum)
307{
308 FIXME("\n");
309 return E_NOTIMPL;
310}
311
312
313static const IPStoreVtbl pstores_vtbl =
314{
337};
338
339HRESULT WINAPI PStoreCreateInstance( IPStore** ppProvider,
340 PST_PROVIDERID* pProviderID, void* pReserved, DWORD dwFlags)
341{
342 PStore_impl *ips;
343
344 TRACE("%p %s %p %08lx\n", ppProvider, debugstr_guid(pProviderID), pReserved, dwFlags);
345
346 ips = HeapAlloc( GetProcessHeap(), 0, sizeof (PStore_impl) );
347 if( !ips )
348 return E_OUTOFMEMORY;
349
350 ips->IPStore_iface.lpVtbl = &pstores_vtbl;
351 ips->ref = 1;
352
353 *ppProvider = &ips->IPStore_iface;
354
355 return S_OK;
356}
357
358/***********************************************************************
359 * DllGetClassObject (PSTOREC.@)
360 */
362{
363 FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv);
365}
#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
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 GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
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
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
_Out_ PVOID pReserved
Definition: netsh.h:77
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
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
Definition: shlwapi.h:761
_In_ _Out_writes_opt_ pcchValueName _Inout_opt_ LPDWORD _Out_opt_ _Out_writes_bytes_to_opt_ pcbData _Inout_opt_ LPDWORD pcbData
Definition: shlwapi.h:757
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:106
static HRESULT WINAPI PStore_fnGetTypeInfo(IPStore *This, PST_KEY Key, const GUID *pType, PPST_TYPEINFO **ppInfo, DWORD dwFlags)
Definition: pstorec.c:147
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:167
static HRESULT WINAPI PStore_fnEnumItems(IPStore *This, PST_KEY Key, const GUID *pItemType, const GUID *pItemSubtype, DWORD dwFlags, IEnumPStoreItems **ppenum)
Definition: pstorec.c:304
static ULONG WINAPI PStore_fnRelease(IPStore *iface)
Definition: pstorec.c:89
static HRESULT WINAPI PStore_fnQueryInterface(IPStore *iface, REFIID riid, LPVOID *ppvObj)
Definition: pstorec.c:49
static const IPStoreVtbl pstores_vtbl
Definition: pstorec.c:313
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:243
static HRESULT WINAPI PStore_fnGetSubtypeInfo(IPStore *This, PST_KEY Key, const GUID *pType, const GUID *pSubtype, PPST_TYPEINFO **ppInfo, DWORD dwFlags)
Definition: pstorec.c:179
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:254
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:201
static HRESULT WINAPI PStore_fnGetProvParam(IPStore *iface, DWORD dwParam, DWORD *pcbData, BYTE **ppbData, DWORD dwFlags)
Definition: pstorec.c:115
static HRESULT WINAPI PStore_fnDeleteType(IPStore *This, PST_KEY Key, const GUID *pType, DWORD dwFlags)
Definition: pstorec.c:157
HRESULT WINAPI PStoreCreateInstance(IPStore **ppProvider, PST_PROVIDERID *pProviderID, void *pReserved, DWORD dwFlags)
Definition: pstorec.c:339
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:281
static HRESULT WINAPI PStore_fnSetProvParam(IPStore *This, DWORD dwParam, DWORD cbData, BYTE *pbData, DWORD *dwFlags)
Definition: pstorec.c:125
static HRESULT WINAPI PStore_fnCloseItem(IPStore *This, PST_KEY Key, const GUID *pItemType, const GUID *pItemSubtype, LPCWSTR *szItemName, DWORD dwFlags)
Definition: pstorec.c:293
static ULONG WINAPI PStore_fnAddRef(IPStore *iface)
Definition: pstorec.c:77
static HRESULT WINAPI PStore_fnCreateType(IPStore *This, PST_KEY Key, const GUID *pType, PPST_TYPEINFO pInfo, DWORD dwFlags)
Definition: pstorec.c:135
static PStore_impl * impl_from_IPStore(IPStore *iface)
Definition: pstorec.c:41
static HRESULT WINAPI PStore_fnEnumTypes(IPStore *This, PST_KEY Key, DWORD dwFlags, IEnumPStoreTypes **ppenum)
Definition: pstorec.c:223
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
Definition: pstorec.c:361
static HRESULT WINAPI PStore_fnEnumSubtypes(IPStore *This, PST_KEY Key, const GUID *pType, DWORD dwFlags, IEnumPStoreTypes **ppenum)
Definition: pstorec.c:233
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:212
static HRESULT WINAPI PStore_fnDeleteSubtype(IPStore *This, PST_KEY Key, const GUID *pType, const GUID *pSubtype, DWORD dwFlags)
Definition: pstorec.c:190
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:267
#define TRACE(s)
Definition: solgame.cpp:4
LONG ref
Definition: pstorec.c:38
IPStore IPStore_iface
Definition: pstorec.c:37
Definition: send.c:48
const uint16_t * LPCWSTR
Definition: typedefs.h:57
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:3479
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772
unsigned char BYTE
Definition: xxhash.c:193