//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//
//  Copyright (C) Microsoft Corporation, 1996 - 1999
//
//  File:       pstgserv.idl
//
//--------------------------------------------------------------------------


[	uuid(af4ae0d0-a37f-11cf-8d73-00aa004cd01a),
	object,
	pointer_default(unique)
]
interface IPropertyStorageServer : IUnknown
{
    import "objidl.idl";
    import "propidl.idl";

    typedef enum _EnumImplementation
    {
        PROPIMP_UNKNOWN = 0,
        PROPIMP_DOCFILE_QI,         // Use docfile and use QI
        PROPIMP_DOCFILE_OLE32,      // Use docfile and use OLE32 Stg*Prop*Stg APIs
        PROPIMP_DOCFILE_IPROP,      // Use docfile and use IPROP Stg*Prop*Stg APIs
        PROPIMP_STORAGE,            // Use NTFS Structured Storage
        PROPIMP_NTFS                // Use NTFS native property sets
    } EnumImplementation;


    typedef enum _EnumRestrictions
    {
        RESTRICT_NONE               = 0,
        RESTRICT_UNICODE_ONLY       = 1,
        RESTRICT_SIMPLE_ONLY        = 2,
        RESTRICT_NON_HIERARCHICAL   = 4,
        RESTRICT_DIRECT_ONLY        = 8
    } EnumRestrictions;


    HRESULT StgOpenPropStg( [in, string] const OLECHAR *pwcsName,
			    [in]  REFFMTID fmtid,
                            [in] DWORD grfMode,
                            [out] IPropertyStorage **pppstg );

    HRESULT StgOpenPropSetStg( [in, string] const OLECHAR *pwcsName,
			       [in] DWORD grfMode,
			       [out] IPropertySetStorage **pppsstg );

    HRESULT MarshalUnknown( [in] IUnknown *punk );

    HRESULT Initialize( [in] EnumImplementation enumImplementation,
                        [in] ULONG Restrictions );
}