1// Copyright 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_COMMON_IMPORTER_PSTORE_DECLARATIONS_H_
6#define CHROME_COMMON_IMPORTER_PSTORE_DECLARATIONS_H_
7
8#ifdef __PSTORE_H__
9#error Should not include pstore.h and this file simultaneously.
10#endif
11
12#include <ole2.h>
13
14// pstore.h is no longer shipped in the Windows 8 SDK. Define a minimal set
15// here.
16
17// These types are referenced in interfaces we use, but our code does not use
18// refer to these types, so simply make them opaque.
19class IEnumPStoreTypes;
20struct PST_ACCESSRULESET;
21struct PST_PROMPTINFO;
22struct PST_PROVIDERINFO;
23struct PST_TYPEINFO;
24
25EXTERN_C const IID IID_IPStore;
26EXTERN_C const IID IID_IEnumPStoreItems;
27
28typedef DWORD PST_KEY;
29typedef DWORD PST_ACCESSMODE;
30#define PST_E_OK _HRESULT_TYPEDEF_(0x00000000L)
31
32interface IEnumPStoreItems : public IUnknown
33{
34 public:
35  virtual HRESULT STDMETHODCALLTYPE Next(
36      DWORD celt,
37      LPWSTR __RPC_FAR *rgelt,
38      DWORD __RPC_FAR *pceltFetched) = 0;
39
40  virtual HRESULT STDMETHODCALLTYPE Skip(DWORD celt) = 0;
41
42  virtual HRESULT STDMETHODCALLTYPE Reset(void) = 0;
43
44  virtual HRESULT STDMETHODCALLTYPE Clone(
45      IEnumPStoreItems __RPC_FAR *__RPC_FAR *ppenum) = 0;
46};
47
48interface IPStore : public IUnknown
49{
50 public:
51  virtual HRESULT STDMETHODCALLTYPE GetInfo(
52      PST_PROVIDERINFO* __RPC_FAR *ppProperties) = 0;
53
54  virtual HRESULT STDMETHODCALLTYPE GetProvParam(
55      DWORD dwParam,
56      DWORD __RPC_FAR *pcbData,
57      BYTE __RPC_FAR *__RPC_FAR *ppbData,
58      DWORD dwFlags) = 0;
59
60  virtual HRESULT STDMETHODCALLTYPE SetProvParam(
61      DWORD dwParam,
62      DWORD cbData,
63      BYTE __RPC_FAR *pbData,
64      DWORD dwFlags) = 0;
65
66  virtual HRESULT STDMETHODCALLTYPE CreateType(
67      PST_KEY Key,
68      const GUID __RPC_FAR *pType,
69      PST_TYPEINFO* pInfo,
70      DWORD dwFlags) = 0;
71
72  virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(
73      PST_KEY Key,
74      const GUID __RPC_FAR *pType,
75      PST_TYPEINFO* __RPC_FAR *ppInfo,
76      DWORD dwFlags) = 0;
77
78  virtual HRESULT STDMETHODCALLTYPE DeleteType(
79      PST_KEY Key,
80      const GUID __RPC_FAR *pType,
81      DWORD dwFlags) = 0;
82
83  virtual HRESULT STDMETHODCALLTYPE CreateSubtype(
84      PST_KEY Key,
85      const GUID __RPC_FAR *pType,
86      const GUID __RPC_FAR *pSubtype,
87      PST_TYPEINFO* pInfo,
88      PST_ACCESSRULESET* pRules,
89      DWORD dwFlags) = 0;
90
91  virtual HRESULT STDMETHODCALLTYPE GetSubtypeInfo(
92      PST_KEY Key,
93      const GUID __RPC_FAR *pType,
94      const GUID __RPC_FAR *pSubtype,
95      PST_TYPEINFO* __RPC_FAR *ppInfo,
96      DWORD dwFlags) = 0;
97
98  virtual HRESULT STDMETHODCALLTYPE DeleteSubtype(
99      PST_KEY Key,
100      const GUID __RPC_FAR *pType,
101      const GUID __RPC_FAR *pSubtype,
102      DWORD dwFlags) = 0;
103
104  virtual HRESULT STDMETHODCALLTYPE ReadAccessRuleset(
105      PST_KEY Key,
106      const GUID __RPC_FAR *pType,
107      const GUID __RPC_FAR *pSubtype,
108      PST_ACCESSRULESET* __RPC_FAR *ppRules,
109      DWORD dwFlags) = 0;
110
111  virtual HRESULT STDMETHODCALLTYPE WriteAccessRuleset(
112      PST_KEY Key,
113      const GUID __RPC_FAR *pType,
114      const GUID __RPC_FAR *pSubtype,
115      PST_ACCESSRULESET* pRules,
116      DWORD dwFlags) = 0;
117
118  virtual HRESULT STDMETHODCALLTYPE EnumTypes(
119      PST_KEY Key,
120      DWORD dwFlags,
121      IEnumPStoreTypes __RPC_FAR *__RPC_FAR *ppenum) = 0;
122
123  virtual HRESULT STDMETHODCALLTYPE EnumSubtypes(
124      PST_KEY Key,
125      const GUID __RPC_FAR *pType,
126      DWORD dwFlags,
127      IEnumPStoreTypes __RPC_FAR *__RPC_FAR *ppenum) = 0;
128
129  virtual HRESULT STDMETHODCALLTYPE DeleteItem(
130      PST_KEY Key,
131      const GUID __RPC_FAR *pItemType,
132      const GUID __RPC_FAR *pItemSubtype,
133      LPCWSTR szItemName,
134      PST_PROMPTINFO* pPromptInfo,
135      DWORD dwFlags) = 0;
136
137  virtual HRESULT STDMETHODCALLTYPE ReadItem(
138      PST_KEY Key,
139      const GUID __RPC_FAR *pItemType,
140      const GUID __RPC_FAR *pItemSubtype,
141      LPCWSTR szItemName,
142      DWORD __RPC_FAR *pcbData,
143      BYTE __RPC_FAR *__RPC_FAR *ppbData,
144      PST_PROMPTINFO* pPromptInfo,
145      DWORD dwFlags) = 0;
146
147  virtual HRESULT STDMETHODCALLTYPE WriteItem(
148      PST_KEY Key,
149      const GUID __RPC_FAR *pItemType,
150      const GUID __RPC_FAR *pItemSubtype,
151      LPCWSTR szItemName,
152      DWORD cbData,
153      BYTE __RPC_FAR *pbData,
154      PST_PROMPTINFO* pPromptInfo,
155      DWORD dwDefaultConfirmationStyle,
156      DWORD dwFlags) = 0;
157
158  virtual HRESULT STDMETHODCALLTYPE OpenItem(
159      PST_KEY Key,
160      const GUID __RPC_FAR *pItemType,
161      const GUID __RPC_FAR *pItemSubtype,
162      LPCWSTR szItemName,
163      PST_ACCESSMODE ModeFlags,
164      PST_PROMPTINFO* pPromptInfo,
165      DWORD dwFlags) = 0;
166
167  virtual HRESULT STDMETHODCALLTYPE CloseItem(
168      PST_KEY Key,
169      const GUID __RPC_FAR *pItemType,
170      const GUID __RPC_FAR *pItemSubtype,
171      LPCWSTR szItemName,
172      DWORD dwFlags) = 0;
173
174  virtual HRESULT STDMETHODCALLTYPE EnumItems(
175      PST_KEY Key,
176      const GUID __RPC_FAR *pItemType,
177      const GUID __RPC_FAR *pItemSubtype,
178      DWORD dwFlags,
179      IEnumPStoreItems __RPC_FAR *__RPC_FAR *ppenum) = 0;
180};
181
182#endif  // CHROME_COMMON_IMPORTER_PSTORE_DECLARATIONS_H_
183