/* Automated generated idl file <wcmpriv>.
 * Generated by genidl tool (c) 2009, 2010 Mingw-w64 project.
 */

/* Interface forward declarations.  */
interface ISettingsEnginePriv;
interface IItemCollectionPriv;
interface ISettingsItemPriv;
interface IMetadataItemPriv;
interface IItemEnumerator;
interface INamespaceIdentityPriv;
interface ISettingsNamespacePriv;
interface ITargetInfoPriv;
interface IMetadataPriv;
interface ISettingsResult;
interface IStream;
interface ISequentialStream;
interface ISettingsContext;
interface ITargetInfo;
interface ISettingsIdentity;

/* Structure forward declarations.  */
struct _FILETIME;
struct _LARGE_INTEGER;
struct _ULARGE_INTEGER;
struct tagSTATSTG;

/* Union record forward declarations.  */
coclass SettingsEnginePriv;

/* Enumeration declarations.  */
enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0008
{
  UnknownItem = (int) 201326592,
  SettingsNamespace = (int) 201326593,
  Metadata = (int) 201327592,
  ComplexTypes = (int) 201327593,
  ComplexType = (int) 201327594,
  Member = (int) 201327595,
  SimpleTypes = (int) 201327596,
  SimpleType = (int) 201327597,
  Restriction = (int) 201327598,
  RestrictionFacet = (int) 201327599,
  Elements = (int) 201327600,
  Element = (int) 201327601,
  SecurityDefinitions = (int) 201327602,
  SecurityDefinition = (int) 201327603,
  Settings = (int) 201328592,
  ScalarSetting = (int) 201328593,
  ComplexSetting = (int) 201328594,
  List = (int) 201328595,
  Attribute = (int) 201330592,
  UnknownMetadata = (int) 201335593
};
enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0004
{
  UpdateAlways = (int) 201392128,
  NoExpansion = (int) 201457664,
  NoDefaultValue = (int) 201588736,
  NoInheritedValue = (int) 201850880,
  DefaultValueOnly = (int) 203423744
};
enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0005
{
  ValueNotExisting = (int) 201326592,
  ValueDeleted = (int) 201326593,
  ValueNull = (int) 201326594,
  ValueIsValid = (int) 201326595,
  ValueNotValid = (int) 201326596
};
enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0005
{
  restrictionFacetMaxLength = (int) 201326593,
  restrictionFacetEnumeration = (int) 201326594,
  restrictionFacetMaxInclusive = (int) 201326596,
  restrictionFacetMinInclusive = (int) 201326600
};
enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0003
{
  dataTypeByte = (int) 201326593,
  dataTypeSByte = (int) 201326594,
  dataTypeUInt16 = (int) 201326595,
  dataTypeInt16 = (int) 201326596,
  dataTypeUInt32 = (int) 201326597,
  dataTypeInt32 = (int) 201326598,
  dataTypeUInt64 = (int) 201326599,
  dataTypeInt64 = (int) 201326600,
  dataTypeBoolean = (int) 201326603,
  dataTypeString = (int) 201326604,
  dataTypeFlagArray = (int) 201359360
};
enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0006
{
  ValidateSelf = (int) 201326592,
  ValidateAll = (int) 201326593
};
enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0001
{
  ValueLocationCurrent = (int) 201326593,
  ValueLocationDefault = (int) 201326594,
  ValueLocationPolicy = (int) 201326595
};
enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0002
{
  SharedEnumeration = (int) 201326593,
  UserEnumeration = (int) 201326594,
  AllEnumeration = (int) 201326595
};
enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0007
{
  ReadOnlyAccess = (int) 201326593,
  ReadWriteAccess = (int) 201326594
};
enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0001
{
  OfflineMode = (int) 201326593,
  OnlineMode = (int) 201326594
};
enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0002
{
  SettingChangeMode = (int) 201326593,
  MetadataChangeMode = (int) 201326594
};
enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0006
{
  UnknownStatus = (int) 201326592,
  UserRegistered = (int) 201326593,
  UserUnregistered = (int) 201326594,
  UserLoaded = (int) 201326595,
  UserUnloaded = (int) 201326596
};
enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0003
{
  InstallOnly = (int) 201326593,
  InstallWithUpgrade = (int) 201326594
};

/* Structure/union declarations.  */
struct _FILETIME
{
  UINT dwLowDateTime;
  UINT dwHighDateTime;
};
struct _LARGE_INTEGER
{
  LONGLONG QuadPart;
};
struct _ULARGE_INTEGER
{
  ULONGLONG QuadPart;
};
struct tagSTATSTG
{
  LPWSTR pwcsName;
  UINT Type;
  struct _ULARGE_INTEGER cbSize;
  struct _FILETIME mtime;
  struct _FILETIME ctime;
  struct _FILETIME atime;
  UINT grfMode;
  UINT grfLocksSupported;
  struct GUID clsid;
  UINT grfStateBits;
  UINT reserved;
};

/* Type definitions.  */
typedef enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0008 WcmNodeType;
typedef enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0004 WcmProcessingOptions;
typedef enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0005 WcmValueStatus;
typedef enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0005 WcmRestrictionFacets;
typedef enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0003 WcmDataType;
typedef enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0006 WcmValidateOption;
typedef enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0001 WcmValueLocation;
typedef enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0002 WcmNamespaceEnumerationFlags;
typedef enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0007 WcmNamespaceAccess;
typedef enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0001 WcmTargetMode;
typedef enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0002 WcmNamespaceMode;
typedef enum __MIDL___MIDL_itf_wcmconfigp_0001_0071_0006 WcmUserStatus;
typedef enum __MIDL___MIDL_itf_wcmconfigp_0000_0000_0003 WcmInstallMode;
typedef ULONGLONG ULONG_PTR;

[
  uuid(90A45ABD-2C77-11D9-BDF0-000874CD1BAE),
  version(1.0),
  helpstring("Settings Management Infrastructure Library for Private Use"),
  helpfile("WcmConfig.HLP")
]
library wcmpriv
{
  importlib("stdole2.tlb");

   /* CoClass declarations.  */
   [
     uuid(90A45ABE-2C77-11D9-BDF0-000874CD1BAE),
     helpstring("SMI engine class for private use"),
     cancreate
   ]
   coclass SettingsEnginePriv
   {
     interface ISettingsEnginePriv;
   };

};

/* Interface declarations.  */
[
  uuid(90A45AC0-2C77-11D9-BDF0-000874CD1BAE),
  helpstring("ISettingsEnginePriv Interface"),
  nonextensible
]
interface ISettingsEnginePriv : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall GetNamespaces (
    [out retval] interface IItemCollectionPriv **NamespaceCollection
  );
  HRESULT __stdcall GetNamespacesByOptions (
    [in] WcmNamespaceEnumerationFlags Flags,
    [out retval] interface IItemCollectionPriv **NamespaceCollection
  );
  HRESULT __stdcall GetNamespace (
    [in] interface INamespaceIdentityPriv *NamespaceID,
    [in] WcmNamespaceAccess Access,
    [out retval] interface ISettingsNamespacePriv **NamespaceItem
  );
  HRESULT __stdcall GetNamespaceByOptions (
    [in] interface INamespaceIdentityPriv *NamespaceID,
    [in] WcmNamespaceMode Mode,
    [in] WcmNamespaceAccess Access,
    [out retval] interface ISettingsNamespacePriv **NamespaceItem
  );
  HRESULT __stdcall GetErrorDescription (
    [in] long HResult,
    [out retval] BSTR *Message
  );
  HRESULT __stdcall CreateNamespaceIdentity (
    [out retval] interface INamespaceIdentityPriv **NamespaceID
  );
  HRESULT __stdcall GetStoreStatus (
    [out retval] WcmUserStatus *Status
  );
  HRESULT __stdcall SetStoreStatus (
    [in] UINT Flags,
    [in] WcmUserStatus Status
  );
  HRESULT __stdcall CreateNamespaceByOptions (
    [in] interface INamespaceIdentityPriv *NamespaceID,
    [in] long Overwrite,
    [out retval] interface ISettingsNamespacePriv **NamespaceItem
  );
  HRESULT __stdcall RegisterNamespaceFromFile (
    [in] WcmInstallMode Mode,
    [in] LPWSTR Manifest,
    [in] long Overwrite,
    [out retval] VARIANT *ppResult
  );
  HRESULT __stdcall UnregisterNamespace (
    [in] interface INamespaceIdentityPriv *NamespaceID,
    [in] long RemoveSettings
  );
  HRESULT __stdcall Import (
    [in] interface ISettingsNamespacePriv *Namespace,
    [in] UINT Option,
    [in] interface IStream *Stream,
    [out retval] VARIANT *Results
  );
  HRESULT __stdcall CreateTargetInfo (
    [out retval] interface ITargetInfoPriv **Target
  );
  HRESULT __stdcall GetTargetInfo (
    [out retval] interface ITargetInfoPriv **Target
  );
  HRESULT __stdcall SetTargetInfo (
    [in] interface ITargetInfoPriv *Target
  );
  HRESULT __stdcall CreateSettingsContext (
    [in] UINT Flags,
    [in] void *reserved,
    [out retval] interface ISettingsContext **SettingsContext
  );
  HRESULT __stdcall SetSettingsContext (
    [in] interface ISettingsContext *SettingsContext
  );
  HRESULT __stdcall ApplySettingsContext (
    [in] interface ISettingsContext *SettingsContext,
    [out] LPWSTR pppwzIdentities,
    [out retval] ULONG_PTR *pcIdentities
  );
  HRESULT __stdcall GetSettingsContext (
    [out retval] interface ISettingsContext **SettingsContext
  );
};
[
  uuid(90A45ABF-2C77-11D9-BDF0-000874CD1BAE),
  helpstring("Item dictionary to hold Item items or attributes"),
  nonextensible
]
interface IItemCollectionPriv : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall IsReadOnly (
    [out retval] long *ReadOnlyItem
  );
  HRESULT __stdcall Count (
    [out retval] long *Count
  );
  HRESULT __stdcall GetItem (
    [in] VARIANT *Key,
    [out retval] interface ISettingsItemPriv **Item
  );
  HRESULT __stdcall Create (
    [in] VARIANT *Key,
    [out retval] interface ISettingsItemPriv **Item
  );
  HRESULT __stdcall Contains (
    [in] VARIANT *Key,
    [out retval] long *ItemExists
  );
  HRESULT __stdcall Remove (
    [in] VARIANT *Key
  );
  HRESULT __stdcall GetEnumerator (
    [out retval] interface IItemEnumerator **Enumerator
  );
};
[
  uuid(90A45AC1-2C77-11D9-BDF0-000874CD1BAE),
  helpstring("ISettingsItemPriv Interface"),
  nonextensible
]
interface ISettingsItemPriv : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall GetName (
    [out retval] BSTR *Name
  );
  HRESULT __stdcall SetName (
    [in] LPWSTR Name
  );
  HRESULT __stdcall GetPath (
    [out retval] BSTR *Path
  );
  HRESULT __stdcall GetFullPath (
    [out retval] BSTR *Path
  );
  HRESULT __stdcall GetType (
    [out retval] long *Type
  );
  HRESULT __stdcall IsReadOnly (
    [out retval] long *ReadOnlyItem
  );
  HRESULT __stdcall GetNodeType (
    [out retval] WcmNodeType *NodeType
  );
  HRESULT __stdcall GetDisplayName (
    [out retval] BSTR *DisplayName
  );
  HRESULT __stdcall SetDisplayName (
    [in] LPWSTR DisplayName
  );
  HRESULT __stdcall GetDescription (
    [out retval] BSTR *Description
  );
  HRESULT __stdcall SetDescription (
    [in] LPWSTR Description
  );
  HRESULT __stdcall GetParent (
    [out retval] interface ISettingsItemPriv **Parent
  );
  HRESULT __stdcall HasChild (
    [out retval] long *ItemHasChild
  );
  HRESULT __stdcall GetValue (
    [out retval] VARIANT *Value
  );
  HRESULT __stdcall SetValue (
    [in] VARIANT *Value
  );
  HRESULT __stdcall GetDefaultValue (
    [out retval] VARIANT *Value
  );
  HRESULT __stdcall SetDefaultValue (
    [in] VARIANT *Value
  );
  HRESULT __stdcall GetValueByOptions (
    [in] WcmProcessingOptions Options,
    [out] WcmValueStatus *Status,
    [out] struct _FILETIME *Timestamp,
    [out retval] VARIANT *Value
  );
  HRESULT __stdcall SetValueByOptions (
    [in] VARIANT *Value,
    [in] WcmProcessingOptions Options,
    [in] struct _FILETIME Timestamp
  );
  HRESULT __stdcall Children (
    [out retval] interface IItemCollectionPriv **Children
  );
  HRESULT __stdcall AddChild (
    [in] LPWSTR Name,
    [out retval] interface ISettingsItemPriv **Child
  );
  HRESULT __stdcall GetChild (
    [in] LPWSTR Name,
    [out retval] interface ISettingsItemPriv **Child
  );
  HRESULT __stdcall RemoveChild (
    [in] LPWSTR Name
  );
  HRESULT __stdcall Attributes (
    [out retval] interface IItemCollectionPriv **Attributes
  );
  HRESULT __stdcall AddAttribute (
    [in] LPWSTR Name,
    [in] VARIANT *Value
  );
  HRESULT __stdcall GetAttribute (
    [in] LPWSTR Name,
    [out retval] VARIANT *Value
  );
  HRESULT __stdcall RemoveAttribute (
    [in] LPWSTR Name
  );
  HRESULT __stdcall GetRestrictionFacets (
    [out retval] WcmRestrictionFacets *RestrictionFacets
  );
  HRESULT __stdcall GetRestriction (
    [in] WcmRestrictionFacets RestrictionFacet,
    [out retval] VARIANT *FacetData
  );
  HRESULT __stdcall GetItemByPath (
    [in] LPWSTR Path,
    [out retval] interface ISettingsItemPriv **Item
  );
  HRESULT __stdcall CreateItemByPath (
    [in] LPWSTR Path,
    [out retval] interface ISettingsItemPriv **Item
  );
  HRESULT __stdcall RemoveItemByPath (
    [in] LPWSTR Path
  );
  HRESULT __stdcall GetValueRaw (
    [out] UCHAR *Data,
    [out retval] UINT *DataSize
  );
  HRESULT __stdcall SetValueRaw (
    [in] long DataType,
    [in] UCHAR *Data,
    [in] UINT DataSize
  );
  HRESULT __stdcall GetValueRawByOptions (
    [in] WcmProcessingOptions Options,
    [out] WcmValueStatus *Status,
    [out] UCHAR *Data,
    [out retval] UINT *DataSize
  );
  HRESULT __stdcall SetValueRawByOptions (
    [in] WcmProcessingOptions Options,
    [in] long DataType,
    [in] UCHAR *Data,
    [in] UINT DataSize
  );
  HRESULT __stdcall IsDynamic (
    [out retval] long *DynamicItem
  );
  HRESULT __stdcall ResetToDefault (void);
  HRESULT __stdcall GetSettingByPath (
    [in] LPWSTR Path,
    [out retval] interface ISettingsItemPriv **Setting
  );
  HRESULT __stdcall CreateSettingByPath (
    [in] LPWSTR Path,
    [out retval] interface ISettingsItemPriv **Setting
  );
  HRESULT __stdcall RemoveSettingByPath (
    [in] LPWSTR Path
  );
  HRESULT __stdcall GetListKeyInformation (
    [out] BSTR *KeyName,
    [out retval] WcmDataType *DataType
  );
  HRESULT __stdcall CreateListElement (
    [in] VARIANT *KeyData,
    [out retval] interface ISettingsItemPriv **Child
  );
  HRESULT __stdcall RemoveListElement (
    [in] LPWSTR ElementName
  );
  HRESULT __stdcall GetTypeDefinition (
    [out retval] interface IMetadataItemPriv **Type
  );
  HRESULT __stdcall UninstallSetting (void);
  HRESULT __stdcall DeleteValue (void);
  HRESULT __stdcall GetValueByLocation (
    [in] WcmValueLocation Location,
    [in] WcmProcessingOptions Options,
    [out] WcmValueStatus *Status,
    [out] struct _FILETIME *Timestamp,
    [out] VARIANT *Value
  );
  HRESULT __stdcall GetKeyValue (
    [out retval] VARIANT *Value
  );
};
[
  uuid(90A45AC2-2C77-11D9-BDF0-000874CD1BAE),
  helpstring("IMetadataItemPriv Interface"),
  nonextensible
]
interface IMetadataItemPriv : ISettingsItemPriv
{
  [id(1610743808)]
  HRESULT __stdcall Validate (
    [in] WcmValidateOption Option,
    [out retval] VARIANT *ppResult
  );
};
[
  uuid(9F7D7BB7-20B3-11DA-81A5-0030F1642E3C),
  helpstring("IItemEnumerator Interface"),
  nonextensible
]
interface IItemEnumerator : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall Current (
    [out retval] VARIANT *Item
  );
  HRESULT __stdcall MoveNext (
    [out retval] long *ItemValid
  );
  HRESULT __stdcall Reset (void);
};
[
  uuid(90A45ACC-2C77-11D9-BDF0-000874CD1BAE),
  helpstring("INamespaceIdentityPriv Interface"),
  nonextensible
]
interface INamespaceIdentityPriv : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall Initialize (
    [in] LPWSTR Name,
    [in] LPWSTR Version,
    [in] LPWSTR Language,
    [in] LPWSTR Architecture,
    [in] LPWSTR Token,
    [in] LPWSTR VersionScope
  );
  HRESULT __stdcall GetUri (
    [out retval] BSTR *Uri
  );
  HRESULT __stdcall SetUri (
    [in] LPWSTR Uri
  );
  HRESULT __stdcall GetName (
    [out retval] BSTR *Name
  );
  HRESULT __stdcall SetName (
    [in] LPWSTR Name
  );
  HRESULT __stdcall GetVersion (
    [out retval] BSTR *Version
  );
  HRESULT __stdcall SetVersion (
    [in] LPWSTR Version
  );
  HRESULT __stdcall GetLanguage (
    [out retval] BSTR *Language
  );
  HRESULT __stdcall SetLanguage (
    [in] LPWSTR Language
  );
  HRESULT __stdcall GetProcessorArchitecture (
    [out retval] BSTR *Architecture
  );
  HRESULT __stdcall SetProcessorArchitecture (
    [in] LPWSTR Architecture
  );
  HRESULT __stdcall GetPublicKeyToken (
    [out retval] BSTR *Token
  );
  HRESULT __stdcall SetPublicKeyToken (
    [in] LPWSTR Token
  );
  HRESULT __stdcall GetVersionScope (
    [out retval] BSTR *VersionScope
  );
  HRESULT __stdcall SetVersionScope (
    [in] LPWSTR VersionScope
  );
};
[
  uuid(90A45AC3-2C77-11D9-BDF0-000874CD1BAE),
  helpstring("ISettingsNamespacePriv Interface"),
  nonextensible
]
interface ISettingsNamespacePriv : ISettingsItemPriv
{
  [id(1610743808)]
  HRESULT __stdcall GetIdentity (
    [out retval] interface INamespaceIdentityPriv **Identity
  );
  HRESULT __stdcall SetIdentity (
    [in] interface INamespaceIdentityPriv *Identity
  );
  HRESULT __stdcall GetTargetInfo (
    [out retval] interface ITargetInfoPriv **Target
  );
  HRESULT __stdcall Settings (
    [out retval] interface IItemCollectionPriv **Settings
  );
  HRESULT __stdcall Metadata (
    [out retval] interface IMetadataPriv **Metadata
  );
  HRESULT __stdcall GetNamespaceMode (
    [out retval] WcmNamespaceMode *Mode
  );
  HRESULT __stdcall Save (
    [in] long fPushSettings,
    [out retval] interface ISettingsResult **ppResult
  );
  HRESULT __stdcall ServiceSyncSetting (
    [in] USHORT *szSettingPath,
    [in] long fCreate,
    [out retval] interface ISettingsResult **ppResult
  );
  HRESULT __stdcall GetXmlNamespaceUri (
    [in] LPWSTR NamespacePrefix,
    [out retval] BSTR *NamespaceUri
  );
  HRESULT __stdcall GetXmlNamespacePrefix (
    [in] LPWSTR NamespaceUri,
    [out retval] BSTR *NamespacePrefix
  );
  HRESULT __stdcall Validate (
    [in] WcmValidateOption Option,
    [out retval] VARIANT *ppResult
  );
  HRESULT __stdcall GetSettingValue (
    [in] LPWSTR Path,
    [out retval] VARIANT *Value
  );
  HRESULT __stdcall SetSettingValue (
    [in] LPWSTR Path,
    [in] VARIANT *Value
  );
  HRESULT __stdcall SaveWinSxS (
    long fIsInstall
  );
};
[
  uuid(90A45ACD-2C77-11D9-BDF0-000874CD1BAE),
  helpstring("ITargetInfoPriv Interface"),
  nonextensible
]
interface ITargetInfoPriv : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall GetTargetMode (
    [out retval] WcmTargetMode *TargetMode
  );
  HRESULT __stdcall SetTargetMode (
    [in] WcmTargetMode TargetMode
  );
  HRESULT __stdcall GetTemporaryStoreLocation (
    [out retval] BSTR *TemporaryStoreLocation
  );
  HRESULT __stdcall SetTemporaryStoreLocation (
    [in] LPWSTR TemporaryStoreLocation
  );
  HRESULT __stdcall GetTargetID (
    [out retval] BSTR *TargetID
  );
  HRESULT __stdcall SetTargetID (
    [in] struct GUID TargetID
  );
  HRESULT __stdcall GetTargetProcessorArchitecture (
    [out retval] BSTR *ProcessorArchitecture
  );
  HRESULT __stdcall SetTargetProcessorArchitecture (
    [in] LPWSTR ProcessorArchitecture
  );
  HRESULT __stdcall GetProperty (
    [in] long Offline,
    [in] LPWSTR Property,
    [out retval] BSTR *Value
  );
  HRESULT __stdcall SetProperty (
    [in] long Offline,
    [in] LPWSTR Property,
    [in] LPWSTR Value
  );
  HRESULT __stdcall GetEnumerator (
    [out retval] interface IItemEnumerator **Enumerator
  );
  HRESULT __stdcall ExpandTarget (
    [in] long Offline,
    [in] LPWSTR Location,
    [out retval] BSTR *ExpandedLocation
  );
  HRESULT __stdcall ExpandTargetPath (
    [in] long Offline,
    [in] LPWSTR Location,
    [out retval] BSTR *ExpandedLocation
  );
  HRESULT __stdcall SetModulePath (
    [in] LPWSTR Module,
    [in] LPWSTR Path
  );
  HRESULT __stdcall LoadModule (
    [in] LPWSTR Module,
    [out retval] void *ModuleHandle
  );
  HRESULT __stdcall SetSchemaLocation (
    [in] LPWSTR SchemaLocation
  );
  HRESULT __stdcall GetSchemaLocation (
    [out retval] BSTR *SchemaLocation
  );
  HRESULT __stdcall SetWow64Context (
    [in] LPWSTR InstallerModule,
    [in] UCHAR *Wow64Context
  );
  HRESULT __stdcall HasWow64Context (
    [out retval] long *HasContext
  );
  HRESULT __stdcall TranslateWow64 (
    [in] LPWSTR ClientArchitecture,
    [in] LPWSTR Value,
    [out retval] BSTR *TranslatedValue
  );
  HRESULT __stdcall SetSchemaHiveLocation (
    [in] LPWSTR pwzHiveDir
  );
  HRESULT __stdcall GetSchemaHiveLocation (
    [out retval] BSTR *pHiveDir
  );
  HRESULT __stdcall SetSchemaHiveMountName (
    [in] LPWSTR pwzMountName
  );
  HRESULT __stdcall GetSchemaHiveMountName (
    [out retval] BSTR *pMountName
  );
};
[
  uuid(90A45AC4-2C77-11D9-BDF0-000874CD1BAE),
  helpstring("IMetadataPriv Interface"),
  nonextensible
]
interface IMetadataPriv : ISettingsItemPriv
{
  [id(1610743808)]
  HRESULT __stdcall ComplexTypes (
    [out retval] interface IItemCollectionPriv **Collection
  );
  HRESULT __stdcall SimpleTypes (
    [out retval] interface IItemCollectionPriv **Collection
  );
  HRESULT __stdcall Elements (
    [out retval] interface IItemCollectionPriv **Collection
  );
  HRESULT __stdcall SecurityDefinitions (
    [out retval] interface IItemCollectionPriv **Collection
  );
};
[
  uuid(9F7D7BBC-20B3-11DA-81A5-0030F1642E3C),
  helpstring("ISettingsResult Interface"),
  nonextensible
]
interface ISettingsResult : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall GetDescription (
    [out retval] BSTR *Description
  );
  HRESULT __stdcall GetErrorCode (
    [out retval] HRESULT *hrOut
  );
  HRESULT __stdcall GetContextDescription (
    [out retval] BSTR *Description
  );
  HRESULT __stdcall GetLine (
    [out retval] UINT *dwLine
  );
  HRESULT __stdcall GetColumn (
    [out retval] UINT *dwColumn
  );
  HRESULT __stdcall GetSource (
    [out retval] BSTR *file
  );
};
[
  uuid(0000000C-0000-0000-C000-000000000046)
]
interface IStream : ISequentialStream
{
  [id(1610743808)]
  HRESULT __stdcall RemoteSeek (
    [in] struct _LARGE_INTEGER dlibMove,
    [in] UINT dwOrigin,
    [out] struct _ULARGE_INTEGER *plibNewPosition
  );
  HRESULT __stdcall SetSize (
    [in] struct _ULARGE_INTEGER libNewSize
  );
  HRESULT __stdcall RemoteCopyTo (
    [in] interface IStream *pstm,
    [in] struct _ULARGE_INTEGER cb,
    [out] struct _ULARGE_INTEGER *pcbRead,
    [out] struct _ULARGE_INTEGER *pcbWritten
  );
  HRESULT __stdcall Commit (
    [in] UINT grfCommitFlags
  );
  HRESULT __stdcall Revert (void);
  HRESULT __stdcall LockRegion (
    [in] struct _ULARGE_INTEGER libOffset,
    [in] struct _ULARGE_INTEGER cb,
    [in] UINT dwLockType
  );
  HRESULT __stdcall UnlockRegion (
    [in] struct _ULARGE_INTEGER libOffset,
    [in] struct _ULARGE_INTEGER cb,
    [in] UINT dwLockType
  );
  HRESULT __stdcall Stat (
    [out] struct tagSTATSTG *pstatstg,
    [in] UINT grfStatFlag
  );
  HRESULT __stdcall Clone (
    [out] interface IStream **ppstm
  );
};
[
  uuid(0C733A30-2A1C-11CE-ADE5-00AA0044773D)
]
interface ISequentialStream : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall RemoteRead (
    [out] UCHAR *pv,
    [in] UINT cb,
    [out] UINT *pcbRead
  );
  HRESULT __stdcall RemoteWrite (
    [in] UCHAR *pv,
    [in] UINT cb,
    [out] UINT *pcbWritten
  );
};
[
  uuid(9F7D7BBD-20B3-11DA-81A5-0030F1642E3C),
  helpstring("ISettingsContext Interface"),
  nonextensible
]
interface ISettingsContext : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall Serialize (
    [in] interface IStream *pStream,
    [in] interface ITargetInfo *pTarget
  );
  HRESULT __stdcall Deserialize (
    [in] interface IStream *pStream,
    [in] interface ITargetInfo *pTarget,
    [out] interface ISettingsResult ***pppResults,
    [out retval] ULONG_PTR *pcResultCount
  );
  HRESULT __stdcall SetUserData (
    [in] void *pUserData
  );
  HRESULT __stdcall GetUserData (
    [out retval] void *pUserData
  );
  HRESULT __stdcall GetNamespaces (
    [out retval] interface IItemEnumerator **ppNamespaceIds
  );
  HRESULT __stdcall GetStoredSettings (
    [in] interface ISettingsIdentity *pIdentity,
    [out] interface IItemEnumerator **ppAddedSettings,
    [out] interface IItemEnumerator **ppModifiedSettings,
    [out] interface IItemEnumerator **ppDeletedSettings
  );
  HRESULT __stdcall RevertSetting (
    [in] interface ISettingsIdentity *pIdentity,
    [in] LPWSTR pwzSetting
  );
};
[
  uuid(9F7D7BB8-20B3-11DA-81A5-0030F1642E3C),
  helpstring("ITargetInfo Interface"),
  nonextensible
]
interface ITargetInfo : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall GetTargetMode (
    [out retval] WcmTargetMode *TargetMode
  );
  HRESULT __stdcall SetTargetMode (
    [in] WcmTargetMode TargetMode
  );
  HRESULT __stdcall GetTemporaryStoreLocation (
    [out retval] BSTR *TemporaryStoreLocation
  );
  HRESULT __stdcall SetTemporaryStoreLocation (
    [in] LPWSTR TemporaryStoreLocation
  );
  HRESULT __stdcall GetTargetID (
    [out retval] BSTR *TargetID
  );
  HRESULT __stdcall SetTargetID (
    [in] struct GUID TargetID
  );
  HRESULT __stdcall GetTargetProcessorArchitecture (
    [out retval] BSTR *ProcessorArchitecture
  );
  HRESULT __stdcall SetTargetProcessorArchitecture (
    [in] LPWSTR ProcessorArchitecture
  );
  HRESULT __stdcall GetProperty (
    [in] long Offline,
    [in] LPWSTR Property,
    [out retval] BSTR *Value
  );
  HRESULT __stdcall SetProperty (
    [in] long Offline,
    [in] LPWSTR Property,
    [in] LPWSTR Value
  );
  HRESULT __stdcall GetEnumerator (
    [out retval] interface IItemEnumerator **Enumerator
  );
  HRESULT __stdcall ExpandTarget (
    [in] long Offline,
    [in] LPWSTR Location,
    [out retval] BSTR *ExpandedLocation
  );
  HRESULT __stdcall ExpandTargetPath (
    [in] long Offline,
    [in] LPWSTR Location,
    [out retval] BSTR *ExpandedLocation
  );
  HRESULT __stdcall SetModulePath (
    [in] LPWSTR Module,
    [in] LPWSTR Path
  );
  HRESULT __stdcall LoadModule (
    [in] LPWSTR Module,
    [out retval] void *ModuleHandle
  );
  HRESULT __stdcall SetWow64Context (
    [in] LPWSTR InstallerModule,
    [in] UCHAR *Wow64Context
  );
  HRESULT __stdcall TranslateWow64 (
    [in] LPWSTR ClientArchitecture,
    [in] LPWSTR Value,
    [out retval] BSTR *TranslatedValue
  );
  HRESULT __stdcall SetSchemaHiveLocation (
    [in] LPWSTR pwzHiveDir
  );
  HRESULT __stdcall GetSchemaHiveLocation (
    [out retval] BSTR *pHiveLocation
  );
  HRESULT __stdcall SetSchemaHiveMountName (
    [in] LPWSTR pwzMountName
  );
  HRESULT __stdcall GetSchemaHiveMountName (
    [out retval] BSTR *pMountName
  );
};
[
  uuid(9F7D7BB6-20B3-11DA-81A5-0030F1642E3C),
  helpstring("ISettingsIdentity Interface"),
  nonextensible
]
interface ISettingsIdentity : IUnknown
{
  [id(1610678272)]
  HRESULT __stdcall GetAttribute (
    [in] void *reserved,
    [in] LPWSTR Name,
    [out retval] BSTR *Value
  );
  HRESULT __stdcall SetAttribute (
    [in] void *reserved,
    [in] LPWSTR Name,
    [in] LPWSTR Value
  );
  HRESULT __stdcall GetFlags (
    [out retval] UINT *Flags
  );
  HRESULT __stdcall SetFlags (
    [in] UINT Flags
  );
};

