Added pstore.h and an IDL file to generate it.

diff --git a/include/pstore.idl b/include/pstore.idl
new file mode 100644
index 0000000..9002a13
--- /dev/null
+++ b/include/pstore.idl
@@ -0,0 +1,261 @@
+/*
+ * Copyright (C) 2004 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+import "oaidl.idl";
+
+cpp_quote("#define PST_KEY_CURRENT_USER    0");
+cpp_quote("#define PST_KEY_LOCAL_MACHINE   1");
+
+cpp_quote("#define PST_E_OK          0x00000000L");
+cpp_quote("#define PST_E_TYPE_EXISTS 0x800C0004L");
+
+cpp_quote("#define PST_AUTHENTICODE        1");
+cpp_quote("#define PST_BINARY_CHECK        2");
+cpp_quote("#define PST_SECURITY_DESCRIPTOR 4");
+
+typedef DWORD PST_ACCESSMODE;
+typedef DWORD PST_ACCESSCLAUSETYPE;
+typedef DWORD PST_KEY;
+typedef DWORD PST_PROVIDERCAPABILITIES;
+typedef GUID PST_PROVIDERID, *PPST_PROVIDERID;
+
+typedef struct _PST_PROVIDERINFO
+{
+    DWORD cbSize;
+    PST_PROVIDERID ID;
+    PST_PROVIDERCAPABILITIES Capabilities;
+    LPWSTR szProviderName;
+} PST_PROVIDERINFO, *PPST_PROVIDERINFO;
+
+typedef void *PPST_PROMPTIFO;
+
+
+
+typedef struct {
+    DWORD cbSize;
+    PST_ACCESSCLAUSETYPE ClauseType;
+    DWORD cbClauseData;
+    BYTE* pbClauseData;
+} PST_ACCESSCLAUSE, *PPST_ACCESSCLAUSE;
+
+typedef struct {
+    DWORD cbSize;
+    PST_ACCESSMODE AccessModeFlags;
+    DWORD cClauses;
+    PST_ACCESSCLAUSE* rgClauses;
+} PST_ACCESSRULE, *PPST_ACCESSRULE;
+
+typedef struct {
+    DWORD cbSize;
+    DWORD cClause;
+    PST_ACCESSRULE* rgRules;
+} PST_ACCESSRULESET, *PPST_ACCESSRULESET;
+
+typedef struct {
+    DWORD cbSize;
+    LPWSTR szDisplayName;
+} PST_TYPEINFO, *PPST_TYPEINFO;
+
+typedef struct {
+    DWORD cbSize;
+    DWORD dwPromptFlags;
+    DWORD_PTR  hwndApp;
+    LPCWSTR szPrompt;
+} PST_PROMPTINFO, *PPST_PROMPTINFO;
+
+[
+  object,
+  pointer_default(unique)
+]
+interface IEnumPStoreItems : IUnknown
+{
+    HRESULT Clone(
+        [in] IEnumPStoreItems** ppenum );
+
+    HRESULT Next(
+        [in] DWORD celt,
+        [in] LPWSTR* rgelt,
+        [in] DWORD* pceltFetched );
+
+    HRESULT Reset();
+
+    HRESULT Skip(
+        [in] DWORD celt );
+}
+
+[
+  object,
+  pointer_default(unique)
+]
+interface IEnumPStoreTypes : IUnknown
+{
+    HRESULT Clone(
+        [in] IEnumPStoreTypes** ppenum );
+
+    HRESULT Next(
+        [in] DWORD celt,
+        [in] LPWSTR* rgelt,
+        [in] DWORD* pceltFetched );
+
+    HRESULT Reset();
+
+    HRESULT Skip(
+        [in] DWORD celt );
+}
+
+/*****************************************************************************
+ * IPStore interface
+ */
+[
+  object,
+  pointer_default(unique)
+]
+interface IPStore : IUnknown
+{
+    HRESULT GetInfo(
+        [in] PPST_PROVIDERINFO* ppProperties );
+
+    HRESULT GetProvParam(
+        [in] DWORD dwParam,
+        [out] DWORD* pcbData,
+        [out] BYTE** ppbData,
+        [in] DWORD dwFlags );
+
+    HRESULT SetProvParam(
+        [in] DWORD dwParam,
+        [in] DWORD cbData,
+        [in] BYTE* pbData,
+        [in] DWORD* dwFlags );
+
+    HRESULT CreateType(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] PPST_TYPEINFO pInfo,
+        [in] DWORD dwFlags );
+
+    HRESULT GetTypeInfo(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] PPST_TYPEINFO** ppInfo,
+        [in] DWORD dwFlags );
+
+    HRESULT DeleteType(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] DWORD dwFlags );
+
+    HRESULT CreateSubtype(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] const GUID* pSubtype,
+        [in] PPST_TYPEINFO pInfo,
+        [in] PPST_ACCESSRULESET pRules,
+        [in] DWORD dwFlags );
+
+    HRESULT GetSubtypeInfo(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] const GUID* pSubtype,
+        [in] PPST_TYPEINFO** ppInfo,
+        [in] DWORD dwFlags );
+
+    HRESULT DeleteSubtype(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] const GUID* pSubtype,
+        [in] DWORD dwFlags );
+
+    HRESULT ReadAccessRuleset(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] const GUID* pSubtype,
+        [in] PPST_TYPEINFO pInfo,
+        [in] PPST_ACCESSRULESET** ppRules,
+        [in] DWORD dwFlags );
+
+    HRESULT WriteAccessRuleset(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] const GUID* pSubtype,
+        [in] PPST_TYPEINFO pInfo,
+        [in] PPST_ACCESSRULESET pRules,
+        [in] DWORD dwFlags );
+
+    HRESULT EnumTypes(
+        [in] PST_KEY Key,
+        [in] DWORD dwFlags,
+        [in] IEnumPStoreTypes** ppenum );
+
+    HRESULT EnumSubtypes(
+        [in] PST_KEY Key,
+        [in] const GUID* pType,
+        [in] DWORD dwFlags,
+        [in] IEnumPStoreTypes** ppenum );
+
+    HRESULT DeleteItem(
+        [in] PST_KEY Key,
+        [in] const GUID* pItemType,
+        [in] const GUID* pItemSubType,
+        [in] LPCWSTR szItemName,
+        [in] PPST_PROMPTINFO pPromptInfo,
+        [in] DWORD dwFlags );
+
+    HRESULT ReadItem(
+        [in] PST_KEY Key,
+        [in] const GUID* pItemType,
+        [in] const GUID* pItemSubtype,
+        [in] LPCWSTR szItemName,
+        [in] DWORD *cbData,
+        [in] BYTE** pbData,
+        [in] PPST_PROMPTIFO pPromptInfo,
+        [in] DWORD dwFlags );
+
+    HRESULT WriteItem(
+        [in] PST_KEY Key,
+        [in] const GUID* pItemType,
+        [in] const GUID* pItemSubtype,
+        [in] LPCWSTR szItemName,
+        [out] DWORD cbData,
+        [out] BYTE *ppbData,
+        [in] PPST_PROMPTIFO pPromptInfo,
+        [in] DWORD dwDefaultConfirmationStyle,
+        [in] DWORD dwFlags);
+
+    HRESULT OpenItem(
+        [in] PST_KEY Key,
+        [in] const GUID* pItemType,
+        [in] const GUID* pItemSubtype,
+        [in] LPCWSTR* szItemName,
+        [in] PST_ACCESSMODE ModeFlags,
+        [in] PPST_PROMPTIFO pProomptInfo,
+        [in] DWORD dwFlags );
+
+    HRESULT CloseItem( 
+        [out] PST_KEY Key, 
+        [in] const GUID* pItemType, 
+        [in] const GUID* pItemSubtype,
+        [in] LPCWSTR* szItemName,
+        [in] DWORD dwFlags );
+
+    HRESULT EnumItems(
+        [in] PST_KEY Key,
+        [in] const GUID* pItemType,
+        [in] const GUID* pItemSubtype,
+        [in] DWORD dwFlags,
+        [in] IEnumPStoreItems** ppenum );
+}