//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft shared
// source or premium shared source license agreement under which you licensed
// this source code. If you did not accept the terms of the license agreement,
// you are not authorized to use this source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the SOURCE.RTF on your install media or the root of your tools installation.
// THE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
//
//------------------------------------------------------------------------------
// File: RegBag.idl
//
// Desc: IDL source for RegBag.dll.
//
//------------------------------------------------------------------------------


cpp_quote("//+-------------------------------------------------------------------------")
cpp_quote("//")
cpp_quote("//  Microsoft Windows")
cpp_quote("//  Copyright (C) Microsoft Corporation, 1999-2000.")
cpp_quote("//")
cpp_quote("//--------------------------------------------------------------------------")
cpp_quote("#pragma once")

#ifndef DO_NO_IMPORTS
import "objidl.idl";
import "oaidl.idl";
import "ocidl.idl";
#endif

//*****************************************************************************
///////////////////////////////////////////////////////////////////////////////
//
//  Custom Factory interface
//  since com doesn't support ctors or initialization parameters on std factory interface
//  we have a custom creation interface
//
///////////////////////////////////////////////////////////////////////////////
//*****************************************************************************
///////////////////////////////////////////////////////////////////////////////////////
[object, 
	hidden, restricted,
	uuid(8A674B48-1F63-11d3-B64C-00C04F79498E),
	helpstring("Create property bag backed by registry"),
	pointer_default(unique),
	local
]
interface ICreatePropBagOnRegKey : IUnknown {
	// NOTE: it is up to the caller to set the correct registry access based on the interface
	// and methods the caller intends to use
	// IPropertyBag2::GetPropertyInfo and CountProperties require both KEY_QUERY_VALUE and KEY_ENUMERATE_SUBKEYS
	// IPropertyBagXXX::Read requires KEY_READ
	// IPropertyBagXXX::Write requires KEY_WRITE
	// also, you must CoTaskMemFree the name string from GetPropertyInfo
	// if you write a value of VT_EMPTY or VT_NULL the property will be removed from the bag and the corresponding
	// registry info will be deleted.
	HRESULT Create([in] HKEY hkey, [in] LPCOLESTR subkey, [in] DWORD ulOptions, [in] DWORD samDesired, REFIID iid, [out] LPVOID *ppBag);
};

