702 lines
25 KiB
Plaintext
702 lines
25 KiB
Plaintext
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//
|
||
|
// File: propidl.idl
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
cpp_quote("//+-------------------------------------------------------------------------")
|
||
|
cpp_quote("//")
|
||
|
cpp_quote("// Microsoft Windows")
|
||
|
cpp_quote("// Copyright (c) Microsoft Corporation. All rights reserved.")
|
||
|
cpp_quote("//")
|
||
|
cpp_quote("//--------------------------------------------------------------------------")
|
||
|
cpp_quote("#if ( _MSC_VER >= 800 )")
|
||
|
cpp_quote("#if _MSC_VER >= 1200")
|
||
|
cpp_quote("#pragma warning(push)")
|
||
|
cpp_quote("#endif")
|
||
|
cpp_quote("#pragma warning(disable:4201) /* Nameless struct/union */")
|
||
|
cpp_quote("#pragma warning(disable:4237) /* obsolete member named 'bool' */")
|
||
|
cpp_quote("#endif")
|
||
|
cpp_quote("#if ( _MSC_VER >= 1020 )")
|
||
|
cpp_quote("#pragma once")
|
||
|
cpp_quote("#endif")
|
||
|
|
||
|
#ifndef DO_NO_IMPORTS
|
||
|
import "objidl.idl";
|
||
|
import "oaidl.idl";
|
||
|
#endif
|
||
|
|
||
|
/****************************************************************************
|
||
|
* Property Storage Interfaces
|
||
|
****************************************************************************/
|
||
|
|
||
|
interface IPropertyStorage;
|
||
|
interface IEnumSTATPROPSTG;
|
||
|
interface IEnumSTATPROPSETSTG;
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct tagVersionedStream {
|
||
|
GUID guidVersion;
|
||
|
IStream *pStream;
|
||
|
} VERSIONEDSTREAM, *LPVERSIONEDSTREAM;
|
||
|
|
||
|
|
||
|
|
||
|
cpp_quote("")
|
||
|
cpp_quote("// Flags for IPropertySetStorage::Create")
|
||
|
const DWORD PROPSETFLAG_DEFAULT = 0;
|
||
|
const DWORD PROPSETFLAG_NONSIMPLE = 1;
|
||
|
const DWORD PROPSETFLAG_ANSI = 2;
|
||
|
cpp_quote("// (This flag is only supported on StgCreatePropStg & StgOpenPropStg")
|
||
|
const DWORD PROPSETFLAG_UNBUFFERED = 4;
|
||
|
cpp_quote("// (This flag causes a version-1 property set to be created")
|
||
|
const DWORD PROPSETFLAG_CASE_SENSITIVE = 8;
|
||
|
|
||
|
cpp_quote("")
|
||
|
cpp_quote("// Flags for the reservied PID_BEHAVIOR property")
|
||
|
const DWORD PROPSET_BEHAVIOR_CASE_SENSITIVE = 1;
|
||
|
|
||
|
|
||
|
cpp_quote("#ifdef MIDL_PASS")
|
||
|
cpp_quote("// This is the PROPVARIANT definition for marshaling.")
|
||
|
typedef struct tag_inner_PROPVARIANT PROPVARIANT;
|
||
|
cpp_quote("#else")
|
||
|
cpp_quote("// This is the standard C layout of the PROPVARIANT.")
|
||
|
cpp_quote("typedef struct tagPROPVARIANT PROPVARIANT;")
|
||
|
cpp_quote("#endif")
|
||
|
|
||
|
|
||
|
#define TYPEDEF_CA(type, name) \
|
||
|
typedef struct tag##name\
|
||
|
{\
|
||
|
ULONG cElems;\
|
||
|
[size_is( cElems )]\
|
||
|
type * pElems;\
|
||
|
} name
|
||
|
|
||
|
|
||
|
TYPEDEF_CA(CHAR, CAC);
|
||
|
TYPEDEF_CA(UCHAR, CAUB);
|
||
|
TYPEDEF_CA(SHORT, CAI);
|
||
|
TYPEDEF_CA(USHORT, CAUI);
|
||
|
TYPEDEF_CA(LONG, CAL);
|
||
|
TYPEDEF_CA(ULONG, CAUL);
|
||
|
TYPEDEF_CA(FLOAT, CAFLT);
|
||
|
TYPEDEF_CA(DOUBLE, CADBL);
|
||
|
TYPEDEF_CA(CY, CACY);
|
||
|
TYPEDEF_CA(DATE, CADATE);
|
||
|
TYPEDEF_CA(BSTR, CABSTR);
|
||
|
TYPEDEF_CA(BSTRBLOB, CABSTRBLOB);
|
||
|
TYPEDEF_CA(VARIANT_BOOL, CABOOL);
|
||
|
TYPEDEF_CA(SCODE, CASCODE);
|
||
|
TYPEDEF_CA(PROPVARIANT, CAPROPVARIANT);
|
||
|
TYPEDEF_CA(LARGE_INTEGER, CAH);
|
||
|
TYPEDEF_CA(ULARGE_INTEGER, CAUH);
|
||
|
TYPEDEF_CA(LPSTR, CALPSTR);
|
||
|
TYPEDEF_CA(LPWSTR, CALPWSTR);
|
||
|
TYPEDEF_CA(FILETIME, CAFILETIME);
|
||
|
TYPEDEF_CA(CLIPDATA, CACLIPDATA);
|
||
|
TYPEDEF_CA(CLSID, CACLSID);
|
||
|
|
||
|
|
||
|
//
|
||
|
// The new PROPVARIANT. Apr 16 1998
|
||
|
// The goal was to add all the OleAut union arms that the OleAut VARIANT
|
||
|
// supports without breaking wire compatibility with the old PROPVARIANT.
|
||
|
// Adding IDispatch* and safe ARRAYs required the creation of propidl.idl
|
||
|
// since the use of OAIDL types in PROPVARIANT means it can no longer reside
|
||
|
// in objidl.idl.
|
||
|
// Adding DECIMAL is the tricky part. OleAut VARIANTs have an extra outer
|
||
|
// union for DECIMAL. (Go look at the VARIANT definition in oaidl). Adding
|
||
|
// an outer union in the IDL description would break wire compatibility with
|
||
|
// the old PROPVARIANT. The solution has two parts:
|
||
|
// 1) If the union contained DECIMAL data (don't worry how it got there, eg.
|
||
|
// someone cast a pointer) how do we get it across the wire successfully?
|
||
|
// The types of the padding were changed so they matche the first part of a
|
||
|
// DECIMAL. Add a case for VT_DECIMAL to marshal the second half.
|
||
|
// 2) Provide an outer union, with devVal field name for the C/C++ programmer.
|
||
|
// Rename the old PROPVARIANT as tag_inner_PROPVARIANT and added some
|
||
|
// cpp_quote's that glue an outer union, named tagPROPVARIANT, around it.
|
||
|
// There are also some cpp_quote games played with the typedef LPPROPVARIANT
|
||
|
// and PROPVARIANT types.
|
||
|
|
||
|
cpp_quote("#ifdef MIDL_PASS")
|
||
|
cpp_quote("// This is the PROPVARIANT padding layout for marshaling.")
|
||
|
typedef BYTE PROPVAR_PAD1;
|
||
|
typedef BYTE PROPVAR_PAD2;
|
||
|
typedef ULONG PROPVAR_PAD3;
|
||
|
cpp_quote("#else")
|
||
|
|
||
|
cpp_quote("// This is the standard C layout of the structure.")
|
||
|
cpp_quote("typedef WORD PROPVAR_PAD1;")
|
||
|
cpp_quote("typedef WORD PROPVAR_PAD2;")
|
||
|
cpp_quote("typedef WORD PROPVAR_PAD3;")
|
||
|
cpp_quote("#define tag_inner_PROPVARIANT")
|
||
|
cpp_quote("#endif")
|
||
|
|
||
|
|
||
|
cpp_quote("#ifndef MIDL_PASS")
|
||
|
cpp_quote("struct tagPROPVARIANT {")
|
||
|
cpp_quote(" union {")
|
||
|
cpp_quote("#endif")
|
||
|
struct tag_inner_PROPVARIANT
|
||
|
{
|
||
|
VARTYPE vt;
|
||
|
PROPVAR_PAD1 wReserved1;
|
||
|
PROPVAR_PAD2 wReserved2;
|
||
|
PROPVAR_PAD3 wReserved3;
|
||
|
[switch_is((unsigned short) vt)] union
|
||
|
{
|
||
|
//
|
||
|
// Basic Types.
|
||
|
//
|
||
|
[case (VT_EMPTY, VT_NULL)] ;
|
||
|
[case (VT_I1)] CHAR cVal; // New
|
||
|
[case (VT_UI1)] UCHAR bVal;
|
||
|
[case (VT_I2)] SHORT iVal;
|
||
|
[case (VT_UI2)] USHORT uiVal;
|
||
|
[case (VT_I4)] LONG lVal;
|
||
|
[case (VT_UI4)] ULONG ulVal;
|
||
|
[case (VT_INT)] INT intVal; // New
|
||
|
[case (VT_UINT)] UINT uintVal; // New
|
||
|
[case (VT_DECIMAL, VT_I8)] LARGE_INTEGER hVal; // Decimal
|
||
|
[case (VT_UI8)] ULARGE_INTEGER uhVal;
|
||
|
[case (VT_R4)] FLOAT fltVal;
|
||
|
[case (VT_R8)] DOUBLE dblVal;
|
||
|
[case (VT_BOOL)] VARIANT_BOOL boolVal;
|
||
|
[case (VT_ILLEGAL)] _VARIANT_BOOL bool; // obsolete
|
||
|
[case (VT_ERROR)] SCODE scode;
|
||
|
[case (VT_CY)] CY cyVal;
|
||
|
[case (VT_DATE)] DATE date;
|
||
|
[case (VT_FILETIME)] FILETIME filetime;
|
||
|
[case (VT_CLSID)] CLSID * puuid;
|
||
|
[case (VT_CF)] CLIPDATA * pclipdata;
|
||
|
[case (VT_BSTR)] BSTR bstrVal;
|
||
|
[case (VT_BSTR_BLOB)] BSTRBLOB bstrblobVal; // System use only
|
||
|
[case (VT_BLOB, VT_BLOB_OBJECT)] BLOB blob;
|
||
|
[case (VT_LPSTR)] LPSTR pszVal;
|
||
|
[case (VT_LPWSTR)] LPWSTR pwszVal;
|
||
|
[case (VT_UNKNOWN)] IUnknown * punkVal; // New
|
||
|
[case (VT_DISPATCH)] IDispatch * pdispVal; // New
|
||
|
[case (VT_STREAM, VT_STREAMED_OBJECT)] IStream* pStream;
|
||
|
[case (VT_STORAGE, VT_STORED_OBJECT)] IStorage* pStorage;
|
||
|
[case (VT_VERSIONED_STREAM)] LPVERSIONEDSTREAM pVersionedStream;
|
||
|
|
||
|
//
|
||
|
// Arrays of types (only the old VARIANT types)
|
||
|
//
|
||
|
[case (VT_ARRAY|VT_I1,
|
||
|
VT_ARRAY|VT_UI1,
|
||
|
VT_ARRAY|VT_I2,
|
||
|
VT_ARRAY|VT_UI2,
|
||
|
VT_ARRAY|VT_I4,
|
||
|
VT_ARRAY|VT_UI4,
|
||
|
VT_ARRAY|VT_INT,
|
||
|
VT_ARRAY|VT_UINT,
|
||
|
VT_ARRAY|VT_R4,
|
||
|
VT_ARRAY|VT_R8,
|
||
|
VT_ARRAY|VT_CY,
|
||
|
VT_ARRAY|VT_DATE,
|
||
|
VT_ARRAY|VT_BSTR,
|
||
|
VT_ARRAY|VT_BOOL,
|
||
|
VT_ARRAY|VT_DECIMAL,
|
||
|
VT_ARRAY|VT_DISPATCH,
|
||
|
VT_ARRAY|VT_UNKNOWN,
|
||
|
VT_ARRAY|VT_ERROR,
|
||
|
VT_ARRAY|VT_VARIANT)] LPSAFEARRAY parray; // New
|
||
|
|
||
|
//
|
||
|
// Vectors of types
|
||
|
//
|
||
|
[case (VT_VECTOR|VT_I1)] CAC cac; // new
|
||
|
[case (VT_VECTOR|VT_UI1)] CAUB caub;
|
||
|
[case (VT_VECTOR|VT_I2)] CAI cai;
|
||
|
[case (VT_VECTOR|VT_UI2)] CAUI caui;
|
||
|
[case (VT_VECTOR|VT_I4)] CAL cal;
|
||
|
[case (VT_VECTOR|VT_UI4)] CAUL caul;
|
||
|
[case (VT_VECTOR|VT_I8)] CAH cah;
|
||
|
[case (VT_VECTOR|VT_UI8)] CAUH cauh;
|
||
|
[case (VT_VECTOR|VT_R4)] CAFLT caflt;
|
||
|
[case (VT_VECTOR|VT_R8)] CADBL cadbl;
|
||
|
[case (VT_VECTOR|VT_BOOL)] CABOOL cabool;
|
||
|
[case (VT_VECTOR|VT_ERROR)] CASCODE cascode;
|
||
|
[case (VT_VECTOR|VT_CY)] CACY cacy;
|
||
|
[case (VT_VECTOR|VT_DATE)] CADATE cadate;
|
||
|
[case (VT_VECTOR|VT_FILETIME)] CAFILETIME cafiletime;
|
||
|
[case (VT_VECTOR|VT_CLSID)] CACLSID cauuid;
|
||
|
[case (VT_VECTOR|VT_CF)] CACLIPDATA caclipdata;
|
||
|
[case (VT_VECTOR|VT_BSTR)] CABSTR cabstr;
|
||
|
[case (VT_VECTOR|VT_BSTR_BLOB)]CABSTRBLOB cabstrblob; // System use only
|
||
|
[case (VT_VECTOR|VT_LPSTR)] CALPSTR calpstr;
|
||
|
[case (VT_VECTOR|VT_LPWSTR)] CALPWSTR calpwstr;
|
||
|
[case (VT_VECTOR|VT_VARIANT)] CAPROPVARIANT capropvar;
|
||
|
|
||
|
//
|
||
|
// ByRefs of types.
|
||
|
//
|
||
|
[case (VT_BYREF|VT_I1)] CHAR* pcVal; // New
|
||
|
[case (VT_BYREF|VT_UI1)] UCHAR* pbVal; // New
|
||
|
[case (VT_BYREF|VT_I2)] SHORT* piVal; // New
|
||
|
[case (VT_BYREF|VT_UI2)] USHORT* puiVal; // New
|
||
|
[case (VT_BYREF|VT_I4)] LONG* plVal; // New
|
||
|
[case (VT_BYREF|VT_UI4)] ULONG* pulVal; // New
|
||
|
[case (VT_BYREF|VT_INT)] INT* pintVal; // New
|
||
|
[case (VT_BYREF|VT_UINT)] UINT* puintVal; // New
|
||
|
[case (VT_BYREF|VT_R4)] FLOAT* pfltVal; // New
|
||
|
[case (VT_BYREF|VT_R8)] DOUBLE* pdblVal; // New
|
||
|
[case (VT_BYREF|VT_BOOL)] VARIANT_BOOL* pboolVal; // New
|
||
|
[case (VT_BYREF|VT_DECIMAL)] DECIMAL* pdecVal; // New
|
||
|
[case (VT_BYREF|VT_ERROR)] SCODE* pscode; // New
|
||
|
[case (VT_BYREF|VT_CY)] CY* pcyVal; // New
|
||
|
[case (VT_BYREF|VT_DATE)] DATE* pdate; // New
|
||
|
[case (VT_BYREF|VT_BSTR)] BSTR* pbstrVal; // New
|
||
|
[case (VT_BYREF|VT_UNKNOWN)] IUnknown ** ppunkVal; // New
|
||
|
[case (VT_BYREF|VT_DISPATCH)] IDispatch ** ppdispVal; // New
|
||
|
[case (VT_BYREF|VT_ARRAY)] LPSAFEARRAY* pparray; // New
|
||
|
[case (VT_BYREF|VT_VARIANT)] PROPVARIANT* pvarVal; // New
|
||
|
};
|
||
|
};
|
||
|
cpp_quote("#ifndef MIDL_PASS")
|
||
|
cpp_quote(" DECIMAL decVal;")
|
||
|
cpp_quote(" };")
|
||
|
cpp_quote("};")
|
||
|
cpp_quote("#endif")
|
||
|
|
||
|
|
||
|
cpp_quote("#ifdef MIDL_PASS")
|
||
|
cpp_quote("// This is the LPPROPVARIANT definition for marshaling.")
|
||
|
typedef struct tag_inner_PROPVARIANT * LPPROPVARIANT;
|
||
|
cpp_quote("#else")
|
||
|
cpp_quote("// This is the standard C layout of the PROPVARIANT.")
|
||
|
cpp_quote("typedef struct tagPROPVARIANT * LPPROPVARIANT;")
|
||
|
cpp_quote("#endif")
|
||
|
|
||
|
|
||
|
cpp_quote("// Reserved global Property IDs")
|
||
|
const PROPID PID_DICTIONARY = 0x00000000;
|
||
|
const PROPID PID_CODEPAGE = 0x00000001;
|
||
|
const PROPID PID_FIRST_USABLE = 0x00000002;
|
||
|
const PROPID PID_FIRST_NAME_DEFAULT = 0x00000fff;
|
||
|
const PROPID PID_LOCALE = 0x80000000;
|
||
|
const PROPID PID_MODIFY_TIME = 0x80000001;
|
||
|
const PROPID PID_SECURITY = 0x80000002;
|
||
|
const PROPID PID_BEHAVIOR = 0x80000003;
|
||
|
const PROPID PID_ILLEGAL = 0xffffffff;
|
||
|
cpp_quote("// Range which is read-only to downlevel implementations")
|
||
|
const PROPID PID_MIN_READONLY = 0x80000000;
|
||
|
const PROPID PID_MAX_READONLY = 0xbfffffff;
|
||
|
|
||
|
cpp_quote("// Property IDs for the DiscardableInformation Property Set")
|
||
|
cpp_quote("")
|
||
|
cpp_quote("#define PIDDI_THUMBNAIL 0x00000002L // VT_BLOB")
|
||
|
cpp_quote("")
|
||
|
|
||
|
cpp_quote("// Property IDs for the SummaryInformation Property Set")
|
||
|
cpp_quote("")
|
||
|
cpp_quote("#define PIDSI_TITLE 0x00000002L // VT_LPSTR")
|
||
|
cpp_quote("#define PIDSI_SUBJECT 0x00000003L // VT_LPSTR")
|
||
|
cpp_quote("#define PIDSI_AUTHOR 0x00000004L // VT_LPSTR")
|
||
|
cpp_quote("#define PIDSI_KEYWORDS 0x00000005L // VT_LPSTR")
|
||
|
cpp_quote("#define PIDSI_COMMENTS 0x00000006L // VT_LPSTR")
|
||
|
cpp_quote("#define PIDSI_TEMPLATE 0x00000007L // VT_LPSTR")
|
||
|
cpp_quote("#define PIDSI_LASTAUTHOR 0x00000008L // VT_LPSTR")
|
||
|
cpp_quote("#define PIDSI_REVNUMBER 0x00000009L // VT_LPSTR")
|
||
|
cpp_quote("#define PIDSI_EDITTIME 0x0000000aL // VT_FILETIME (UTC)")
|
||
|
cpp_quote("#define PIDSI_LASTPRINTED 0x0000000bL // VT_FILETIME (UTC)")
|
||
|
cpp_quote("#define PIDSI_CREATE_DTM 0x0000000cL // VT_FILETIME (UTC)")
|
||
|
cpp_quote("#define PIDSI_LASTSAVE_DTM 0x0000000dL // VT_FILETIME (UTC)")
|
||
|
cpp_quote("#define PIDSI_PAGECOUNT 0x0000000eL // VT_I4")
|
||
|
cpp_quote("#define PIDSI_WORDCOUNT 0x0000000fL // VT_I4")
|
||
|
cpp_quote("#define PIDSI_CHARCOUNT 0x00000010L // VT_I4")
|
||
|
cpp_quote("#define PIDSI_THUMBNAIL 0x00000011L // VT_CF")
|
||
|
cpp_quote("#define PIDSI_APPNAME 0x00000012L // VT_LPSTR")
|
||
|
cpp_quote("#define PIDSI_DOC_SECURITY 0x00000013L // VT_I4")
|
||
|
cpp_quote("")
|
||
|
|
||
|
cpp_quote("// Property IDs for the DocSummaryInformation Property Set")
|
||
|
cpp_quote("")
|
||
|
cpp_quote("#define PIDDSI_CATEGORY 0x00000002 // VT_LPSTR")
|
||
|
cpp_quote("#define PIDDSI_PRESFORMAT 0x00000003 // VT_LPSTR")
|
||
|
cpp_quote("#define PIDDSI_BYTECOUNT 0x00000004 // VT_I4")
|
||
|
cpp_quote("#define PIDDSI_LINECOUNT 0x00000005 // VT_I4")
|
||
|
cpp_quote("#define PIDDSI_PARCOUNT 0x00000006 // VT_I4")
|
||
|
cpp_quote("#define PIDDSI_SLIDECOUNT 0x00000007 // VT_I4")
|
||
|
cpp_quote("#define PIDDSI_NOTECOUNT 0x00000008 // VT_I4")
|
||
|
cpp_quote("#define PIDDSI_HIDDENCOUNT 0x00000009 // VT_I4")
|
||
|
cpp_quote("#define PIDDSI_MMCLIPCOUNT 0x0000000A // VT_I4")
|
||
|
cpp_quote("#define PIDDSI_SCALE 0x0000000B // VT_BOOL")
|
||
|
cpp_quote("#define PIDDSI_HEADINGPAIR 0x0000000C // VT_VARIANT | VT_VECTOR")
|
||
|
cpp_quote("#define PIDDSI_DOCPARTS 0x0000000D // VT_LPSTR | VT_VECTOR")
|
||
|
cpp_quote("#define PIDDSI_MANAGER 0x0000000E // VT_LPSTR")
|
||
|
cpp_quote("#define PIDDSI_COMPANY 0x0000000F // VT_LPSTR")
|
||
|
cpp_quote("#define PIDDSI_LINKSDIRTY 0x00000010 // VT_BOOL")
|
||
|
cpp_quote("")
|
||
|
|
||
|
cpp_quote("")
|
||
|
cpp_quote("// FMTID_MediaFileSummaryInfo - Property IDs")
|
||
|
cpp_quote("")
|
||
|
cpp_quote("#define PIDMSI_EDITOR 0x00000002L // VT_LPWSTR")
|
||
|
cpp_quote("#define PIDMSI_SUPPLIER 0x00000003L // VT_LPWSTR")
|
||
|
cpp_quote("#define PIDMSI_SOURCE 0x00000004L // VT_LPWSTR")
|
||
|
cpp_quote("#define PIDMSI_SEQUENCE_NO 0x00000005L // VT_LPWSTR")
|
||
|
cpp_quote("#define PIDMSI_PROJECT 0x00000006L // VT_LPWSTR")
|
||
|
cpp_quote("#define PIDMSI_STATUS 0x00000007L // VT_UI4")
|
||
|
cpp_quote("#define PIDMSI_OWNER 0x00000008L // VT_LPWSTR")
|
||
|
cpp_quote("#define PIDMSI_RATING 0x00000009L // VT_LPWSTR")
|
||
|
cpp_quote("#define PIDMSI_PRODUCTION 0x0000000AL // VT_FILETIME (UTC)")
|
||
|
cpp_quote("#define PIDMSI_COPYRIGHT 0x0000000BL // VT_LPWSTR")
|
||
|
|
||
|
cpp_quote("")
|
||
|
cpp_quote("// PIDMSI_STATUS value definitions")
|
||
|
enum PIDMSI_STATUS_VALUE
|
||
|
{
|
||
|
PIDMSI_STATUS_NORMAL = 0,
|
||
|
PIDMSI_STATUS_NEW,
|
||
|
PIDMSI_STATUS_PRELIM,
|
||
|
PIDMSI_STATUS_DRAFT,
|
||
|
PIDMSI_STATUS_INPROGRESS,
|
||
|
PIDMSI_STATUS_EDIT,
|
||
|
PIDMSI_STATUS_REVIEW,
|
||
|
PIDMSI_STATUS_PROOF,
|
||
|
PIDMSI_STATUS_FINAL,
|
||
|
PIDMSI_STATUS_OTHER = 0x7FFF
|
||
|
} ;
|
||
|
|
||
|
|
||
|
const ULONG PRSPEC_INVALID = 0xffffffff;
|
||
|
const ULONG PRSPEC_LPWSTR = 0;
|
||
|
const ULONG PRSPEC_PROPID = 1;
|
||
|
|
||
|
typedef struct tagPROPSPEC
|
||
|
{
|
||
|
|
||
|
ULONG ulKind;
|
||
|
[switch_is(ulKind)] union
|
||
|
{
|
||
|
[case(PRSPEC_PROPID)]
|
||
|
PROPID propid;
|
||
|
[case(PRSPEC_LPWSTR)]
|
||
|
LPOLESTR lpwstr;
|
||
|
[default] ;
|
||
|
} ;
|
||
|
|
||
|
} PROPSPEC;
|
||
|
|
||
|
typedef struct tagSTATPROPSTG
|
||
|
{
|
||
|
|
||
|
LPOLESTR lpwstrName;
|
||
|
PROPID propid;
|
||
|
VARTYPE vt;
|
||
|
|
||
|
} STATPROPSTG;
|
||
|
|
||
|
cpp_quote("// Macros for parsing the OS Version of the Property Set Header")
|
||
|
cpp_quote("#define PROPSETHDR_OSVER_KIND(dwOSVer) HIWORD( (dwOSVer) )")
|
||
|
cpp_quote("#define PROPSETHDR_OSVER_MAJOR(dwOSVer) LOBYTE(LOWORD( (dwOSVer) ))")
|
||
|
cpp_quote("#define PROPSETHDR_OSVER_MINOR(dwOSVer) HIBYTE(LOWORD( (dwOSVer) ))")
|
||
|
cpp_quote("#define PROPSETHDR_OSVERSION_UNKNOWN 0xFFFFFFFF")
|
||
|
|
||
|
|
||
|
typedef struct tagSTATPROPSETSTG
|
||
|
{
|
||
|
|
||
|
FMTID fmtid;
|
||
|
CLSID clsid;
|
||
|
DWORD grfFlags;
|
||
|
FILETIME mtime;
|
||
|
FILETIME ctime;
|
||
|
FILETIME atime;
|
||
|
DWORD dwOSVersion;
|
||
|
|
||
|
} STATPROPSETSTG;
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(00000138-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
|
||
|
interface IPropertyStorage : IUnknown
|
||
|
{
|
||
|
// When this IDL file is used for "IProp.dll" (the
|
||
|
// standalone property set DLL), we must have local
|
||
|
// and remotable routines (call_as routines are used
|
||
|
// to remove BSTRs, which are not remotable with some
|
||
|
// RPC run-times).
|
||
|
//
|
||
|
// For the remotable routines, we must use pointer
|
||
|
// parameters (e.g. "*rgspec" rather than "rgspec[]")
|
||
|
// so that the MIDL 2.0 compiler will generate an
|
||
|
// interpereted proxy/stub, rather than inline.
|
||
|
|
||
|
#ifdef IPROPERTY_DLL
|
||
|
[local]
|
||
|
#endif
|
||
|
HRESULT ReadMultiple(
|
||
|
[in] ULONG cpspec,
|
||
|
[in, size_is(cpspec)]
|
||
|
const PROPSPEC rgpspec[],
|
||
|
[out, size_is(cpspec)]
|
||
|
PROPVARIANT rgpropvar[]
|
||
|
);
|
||
|
|
||
|
#ifdef IPROPERTY_DLL
|
||
|
[call_as(ReadMultiple)]
|
||
|
HRESULT RemoteReadMultiple(
|
||
|
[out] BOOL *pfBstrPresent,
|
||
|
[in] ULONG cpspec,
|
||
|
[in, size_is(cpspec)]
|
||
|
const PROPSPEC *rgpspec,
|
||
|
[out, size_is(cpspec)]
|
||
|
PROPVARIANT *rgpropvar
|
||
|
);
|
||
|
#endif
|
||
|
|
||
|
#ifdef IPROPERTY_DLL
|
||
|
[local]
|
||
|
#endif
|
||
|
HRESULT WriteMultiple(
|
||
|
[in] ULONG cpspec,
|
||
|
[in, size_is(cpspec)]
|
||
|
const PROPSPEC rgpspec[],
|
||
|
[in, size_is(cpspec)]
|
||
|
const PROPVARIANT rgpropvar[],
|
||
|
[in] PROPID propidNameFirst
|
||
|
);
|
||
|
|
||
|
#ifdef IPROPERTY_DLL
|
||
|
[call_as(WriteMultiple)]
|
||
|
HRESULT RemoteWriteMultiple(
|
||
|
[in] BOOL fBstrPresent,
|
||
|
[in] ULONG cpspec,
|
||
|
[in, size_is(cpspec)]
|
||
|
const PROPSPEC *rgpspec,
|
||
|
[in, size_is(cpspec)]
|
||
|
const PROPVARIANT *rgpropvar,
|
||
|
[in] PROPID propidNameFirst
|
||
|
);
|
||
|
#endif
|
||
|
|
||
|
#ifdef IPROPERTY_DLL
|
||
|
[local]
|
||
|
#endif
|
||
|
HRESULT DeleteMultiple(
|
||
|
[in] ULONG cpspec,
|
||
|
[in, size_is(cpspec)]
|
||
|
const PROPSPEC rgpspec[]
|
||
|
);
|
||
|
|
||
|
#ifdef IPROPERTY_DLL
|
||
|
[call_as(DeleteMultiple)]
|
||
|
HRESULT RemoteDeleteMultiple(
|
||
|
[in] ULONG cpspec,
|
||
|
[in, size_is(cpspec)]
|
||
|
const PROPSPEC *rgpspec
|
||
|
);
|
||
|
#endif
|
||
|
|
||
|
HRESULT ReadPropertyNames(
|
||
|
[in] ULONG cpropid,
|
||
|
[in, size_is(cpropid)]
|
||
|
const PROPID rgpropid[],
|
||
|
[out, size_is(cpropid)]
|
||
|
LPOLESTR rglpwstrName[]
|
||
|
);
|
||
|
|
||
|
HRESULT WritePropertyNames(
|
||
|
[in] ULONG cpropid,
|
||
|
[in, size_is(cpropid)]
|
||
|
const PROPID rgpropid[],
|
||
|
[in, size_is(cpropid)]
|
||
|
const LPOLESTR rglpwstrName[]
|
||
|
);
|
||
|
|
||
|
HRESULT DeletePropertyNames(
|
||
|
[in] ULONG cpropid,
|
||
|
[in, size_is(cpropid)]
|
||
|
const PROPID rgpropid[]
|
||
|
);
|
||
|
|
||
|
HRESULT Commit(
|
||
|
[in] DWORD grfCommitFlags
|
||
|
);
|
||
|
|
||
|
HRESULT Revert();
|
||
|
|
||
|
HRESULT Enum(
|
||
|
[out] IEnumSTATPROPSTG ** ppenum
|
||
|
);
|
||
|
|
||
|
HRESULT SetTimes(
|
||
|
[in] FILETIME const * pctime,
|
||
|
[in] FILETIME const * patime,
|
||
|
[in] FILETIME const * pmtime
|
||
|
);
|
||
|
|
||
|
HRESULT SetClass(
|
||
|
[in] REFCLSID clsid
|
||
|
);
|
||
|
|
||
|
HRESULT Stat(
|
||
|
[out] STATPROPSETSTG * pstatpsstg
|
||
|
);
|
||
|
}
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(0000013A-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
|
||
|
interface IPropertySetStorage : IUnknown
|
||
|
{
|
||
|
|
||
|
typedef [unique] IPropertySetStorage * LPPROPERTYSETSTORAGE;
|
||
|
|
||
|
HRESULT Create(
|
||
|
[in] REFFMTID rfmtid,
|
||
|
[in, unique]
|
||
|
const CLSID * pclsid,
|
||
|
[in] DWORD grfFlags,
|
||
|
[in] DWORD grfMode,
|
||
|
[out] IPropertyStorage ** ppprstg
|
||
|
);
|
||
|
|
||
|
HRESULT Open(
|
||
|
[in] REFFMTID rfmtid,
|
||
|
[in] DWORD grfMode,
|
||
|
[out] IPropertyStorage ** ppprstg
|
||
|
);
|
||
|
|
||
|
HRESULT Delete(
|
||
|
[in] REFFMTID rfmtid
|
||
|
);
|
||
|
|
||
|
HRESULT Enum(
|
||
|
[out] IEnumSTATPROPSETSTG ** ppenum
|
||
|
);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(00000139-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
|
||
|
interface IEnumSTATPROPSTG : IUnknown
|
||
|
{
|
||
|
|
||
|
typedef [unique] IEnumSTATPROPSTG * LPENUMSTATPROPSTG;
|
||
|
|
||
|
[local]
|
||
|
HRESULT Next(
|
||
|
[in] ULONG celt,
|
||
|
[out, size_is(celt), length_is(*pceltFetched)]
|
||
|
STATPROPSTG * rgelt,
|
||
|
[out] ULONG * pceltFetched
|
||
|
);
|
||
|
|
||
|
[call_as(Next)]
|
||
|
HRESULT RemoteNext(
|
||
|
[in] ULONG celt,
|
||
|
[out, size_is(celt), length_is(*pceltFetched)]
|
||
|
STATPROPSTG * rgelt,
|
||
|
[out] ULONG * pceltFetched
|
||
|
);
|
||
|
|
||
|
HRESULT Skip(
|
||
|
[in] ULONG celt
|
||
|
);
|
||
|
|
||
|
HRESULT Reset();
|
||
|
|
||
|
HRESULT Clone(
|
||
|
[out] IEnumSTATPROPSTG ** ppenum
|
||
|
);
|
||
|
}
|
||
|
|
||
|
|
||
|
[
|
||
|
object,
|
||
|
uuid(0000013B-0000-0000-C000-000000000046),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
|
||
|
interface IEnumSTATPROPSETSTG : IUnknown
|
||
|
{
|
||
|
|
||
|
typedef [unique] IEnumSTATPROPSETSTG * LPENUMSTATPROPSETSTG;
|
||
|
|
||
|
[local]
|
||
|
HRESULT Next(
|
||
|
[in] ULONG celt,
|
||
|
[out, size_is(celt), length_is(*pceltFetched)]
|
||
|
STATPROPSETSTG * rgelt,
|
||
|
[out] ULONG * pceltFetched
|
||
|
);
|
||
|
|
||
|
[call_as(Next)]
|
||
|
HRESULT RemoteNext(
|
||
|
[in] ULONG celt,
|
||
|
[out, size_is(celt), length_is(*pceltFetched)]
|
||
|
STATPROPSETSTG * rgelt,
|
||
|
[out] ULONG * pceltFetched
|
||
|
);
|
||
|
|
||
|
HRESULT Skip(
|
||
|
[in] ULONG celt
|
||
|
);
|
||
|
|
||
|
HRESULT Reset();
|
||
|
|
||
|
HRESULT Clone(
|
||
|
[out] IEnumSTATPROPSETSTG ** ppenum
|
||
|
);
|
||
|
}
|
||
|
|
||
|
typedef [unique] IPropertyStorage * LPPROPERTYSTORAGE;
|
||
|
|
||
|
|
||
|
|
||
|
cpp_quote("WINOLEAPI PropVariantCopy ( PROPVARIANT * pvarDest, const PROPVARIANT * pvarSrc );")
|
||
|
cpp_quote("WINOLEAPI PropVariantClear ( PROPVARIANT * pvar );")
|
||
|
cpp_quote("WINOLEAPI FreePropVariantArray ( ULONG cVariants, PROPVARIANT * rgvars );")
|
||
|
|
||
|
cpp_quote("")
|
||
|
cpp_quote("#define _PROPVARIANTINIT_DEFINED_")
|
||
|
cpp_quote("# ifdef __cplusplus")
|
||
|
cpp_quote("inline void PropVariantInit ( PROPVARIANT * pvar )")
|
||
|
cpp_quote("{")
|
||
|
cpp_quote(" memset ( pvar, 0, sizeof(PROPVARIANT) );")
|
||
|
cpp_quote("}")
|
||
|
cpp_quote("# else")
|
||
|
cpp_quote("# define PropVariantInit(pvar) memset ( (pvar), 0, sizeof(PROPVARIANT) )")
|
||
|
cpp_quote("# endif")
|
||
|
cpp_quote("")
|
||
|
|
||
|
cpp_quote("")
|
||
|
cpp_quote("#ifndef _STGCREATEPROPSTG_DEFINED_")
|
||
|
cpp_quote("WINOLEAPI StgCreatePropStg( IUnknown* pUnk, REFFMTID fmtid, const CLSID *pclsid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg );")
|
||
|
cpp_quote("WINOLEAPI StgOpenPropStg( IUnknown* pUnk, REFFMTID fmtid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg );")
|
||
|
cpp_quote("WINOLEAPI StgCreatePropSetStg( IStorage *pStorage, DWORD dwReserved, IPropertySetStorage **ppPropSetStg);")
|
||
|
|
||
|
cpp_quote("")
|
||
|
cpp_quote("#define CCH_MAX_PROPSTG_NAME 31")
|
||
|
cpp_quote("WINOLEAPI FmtIdToPropStgName( const FMTID *pfmtid, LPOLESTR oszName );" )
|
||
|
cpp_quote("WINOLEAPI PropStgNameToFmtId( const LPOLESTR oszName, FMTID *pfmtid );" )
|
||
|
cpp_quote("#endif")
|
||
|
|
||
|
cpp_quote("#if _MSC_VER >= 1200")
|
||
|
cpp_quote("#pragma warning(pop)")
|
||
|
cpp_quote("#else")
|
||
|
cpp_quote("#pragma warning(default:4201) /* Nameless struct/union */")
|
||
|
cpp_quote("#pragma warning(default:4237) /* keywords bool, true, false, etc.. */")
|
||
|
cpp_quote("#endif")
|