// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_COMMON_IMPORTER_PSTORE_DECLARATIONS_H_
#define CHROME_COMMON_IMPORTER_PSTORE_DECLARATIONS_H_

#ifdef __PSTORE_H__
#error Should not include pstore.h and this file simultaneously.
#endif

#include <ole2.h>

// pstore.h is no longer shipped in the Windows 8 SDK. Define a minimal set
// here.

// These types are referenced in interfaces we use, but our code does not use
// refer to these types, so simply make them opaque.
class IEnumPStoreTypes;
struct PST_ACCESSRULESET;
struct PST_PROMPTINFO;
struct PST_PROVIDERINFO;
struct PST_TYPEINFO;

EXTERN_C const IID IID_IPStore;
EXTERN_C const IID IID_IEnumPStoreItems;

typedef DWORD PST_KEY;
typedef DWORD PST_ACCESSMODE;
#define PST_E_OK _HRESULT_TYPEDEF_(0x00000000L)

interface IEnumPStoreItems : public IUnknown
{
 public:
  virtual HRESULT STDMETHODCALLTYPE Next(
      DWORD celt,
      LPWSTR __RPC_FAR *rgelt,
      DWORD __RPC_FAR *pceltFetched) = 0;

  virtual HRESULT STDMETHODCALLTYPE Skip(DWORD celt) = 0;

  virtual HRESULT STDMETHODCALLTYPE Reset(void) = 0;

  virtual HRESULT STDMETHODCALLTYPE Clone(
      IEnumPStoreItems __RPC_FAR *__RPC_FAR *ppenum) = 0;
};

interface IPStore : public IUnknown
{
 public:
  virtual HRESULT STDMETHODCALLTYPE GetInfo(
      PST_PROVIDERINFO* __RPC_FAR *ppProperties) = 0;

  virtual HRESULT STDMETHODCALLTYPE GetProvParam(
      DWORD dwParam,
      DWORD __RPC_FAR *pcbData,
      BYTE __RPC_FAR *__RPC_FAR *ppbData,
      DWORD dwFlags) = 0;

  virtual HRESULT STDMETHODCALLTYPE SetProvParam(
      DWORD dwParam,
      DWORD cbData,
      BYTE __RPC_FAR *pbData,
      DWORD dwFlags) = 0;

  virtual HRESULT STDMETHODCALLTYPE CreateType(
      PST_KEY Key,
      const GUID __RPC_FAR *pType,
      PST_TYPEINFO* pInfo,
      DWORD dwFlags) = 0;

  virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(
      PST_KEY Key,
      const GUID __RPC_FAR *pType,
      PST_TYPEINFO* __RPC_FAR *ppInfo,
      DWORD dwFlags) = 0;

  virtual HRESULT STDMETHODCALLTYPE DeleteType(
      PST_KEY Key,
      const GUID __RPC_FAR *pType,
      DWORD dwFlags) = 0;

  virtual HRESULT STDMETHODCALLTYPE CreateSubtype(
      PST_KEY Key,
      const GUID __RPC_FAR *pType,
      const GUID __RPC_FAR *pSubtype,
      PST_TYPEINFO* pInfo,
      PST_ACCESSRULESET* pRules,
      DWORD dwFlags) = 0;

  virtual HRESULT STDMETHODCALLTYPE GetSubtypeInfo(
      PST_KEY Key,
      const GUID __RPC_FAR *pType,
      const GUID __RPC_FAR *pSubtype,
      PST_TYPEINFO* __RPC_FAR *ppInfo,
      DWORD dwFlags) = 0;

  virtual HRESULT STDMETHODCALLTYPE DeleteSubtype(
      PST_KEY Key,
      const GUID __RPC_FAR *pType,
      const GUID __RPC_FAR *pSubtype,
      DWORD dwFlags) = 0;

  virtual HRESULT STDMETHODCALLTYPE ReadAccessRuleset(
      PST_KEY Key,
      const GUID __RPC_FAR *pType,
      const GUID __RPC_FAR *pSubtype,
      PST_ACCESSRULESET* __RPC_FAR *ppRules,
      DWORD dwFlags) = 0;

  virtual HRESULT STDMETHODCALLTYPE WriteAccessRuleset(
      PST_KEY Key,
      const GUID __RPC_FAR *pType,
      const GUID __RPC_FAR *pSubtype,
      PST_ACCESSRULESET* pRules,
      DWORD dwFlags) = 0;

  virtual HRESULT STDMETHODCALLTYPE EnumTypes(
      PST_KEY Key,
      DWORD dwFlags,
      IEnumPStoreTypes __RPC_FAR *__RPC_FAR *ppenum) = 0;

  virtual HRESULT STDMETHODCALLTYPE EnumSubtypes(
      PST_KEY Key,
      const GUID __RPC_FAR *pType,
      DWORD dwFlags,
      IEnumPStoreTypes __RPC_FAR *__RPC_FAR *ppenum) = 0;

  virtual HRESULT STDMETHODCALLTYPE DeleteItem(
      PST_KEY Key,
      const GUID __RPC_FAR *pItemType,
      const GUID __RPC_FAR *pItemSubtype,
      LPCWSTR szItemName,
      PST_PROMPTINFO* pPromptInfo,
      DWORD dwFlags) = 0;

  virtual HRESULT STDMETHODCALLTYPE ReadItem(
      PST_KEY Key,
      const GUID __RPC_FAR *pItemType,
      const GUID __RPC_FAR *pItemSubtype,
      LPCWSTR szItemName,
      DWORD __RPC_FAR *pcbData,
      BYTE __RPC_FAR *__RPC_FAR *ppbData,
      PST_PROMPTINFO* pPromptInfo,
      DWORD dwFlags) = 0;

  virtual HRESULT STDMETHODCALLTYPE WriteItem(
      PST_KEY Key,
      const GUID __RPC_FAR *pItemType,
      const GUID __RPC_FAR *pItemSubtype,
      LPCWSTR szItemName,
      DWORD cbData,
      BYTE __RPC_FAR *pbData,
      PST_PROMPTINFO* pPromptInfo,
      DWORD dwDefaultConfirmationStyle,
      DWORD dwFlags) = 0;

  virtual HRESULT STDMETHODCALLTYPE OpenItem(
      PST_KEY Key,
      const GUID __RPC_FAR *pItemType,
      const GUID __RPC_FAR *pItemSubtype,
      LPCWSTR szItemName,
      PST_ACCESSMODE ModeFlags,
      PST_PROMPTINFO* pPromptInfo,
      DWORD dwFlags) = 0;

  virtual HRESULT STDMETHODCALLTYPE CloseItem(
      PST_KEY Key,
      const GUID __RPC_FAR *pItemType,
      const GUID __RPC_FAR *pItemSubtype,
      LPCWSTR szItemName,
      DWORD dwFlags) = 0;

  virtual HRESULT STDMETHODCALLTYPE EnumItems(
      PST_KEY Key,
      const GUID __RPC_FAR *pItemType,
      const GUID __RPC_FAR *pItemSubtype,
      DWORD dwFlags,
      IEnumPStoreItems __RPC_FAR *__RPC_FAR *ppenum) = 0;
};

#endif  // CHROME_COMMON_IMPORTER_PSTORE_DECLARATIONS_H_
