This topic has not yet been rated - Rate this topic

6 Appendix A: Full IDL

For ease of implementation the full IDL is provided here, where "ms-dtyp.idl" refers to the IDL found in [MS-DTYP] Appendix A. The syntax uses the IDL syntax extensions that are defined in [MS-RPCE] sections 2.2.4 and 3.1.1.5.1. For example, as noted in [MS-RPCE] section 2.2.4.9, a pointer_default declaration is not required and pointer_default(unique) is assumed.

import "ms-dtyp.idl";
import "ms-dcom.idl";
import "ms-oaut.idl";

typedef [v1_enum] enum _VSS_OBJECT_TYPE {
   VSS_OBJECT_UNKNOWN      = 0x00000000,
   VSS_OBJECT_NONE         = 0x00000001,
   VSS_OBJECT_SNAPSHOT_SET = 0x00000002,
   VSS_OBJECT_SNAPSHOT     = 0x00000003,
   VSS_OBJECT_PROVIDER     = 0x00000004,
   VSS_OBJECT_TYPE_COUNT   = 0x00000005
} VSS_OBJECT_TYPE;

typedef [v1_enum] enum _VSS_SNAPSHOT_STATE {
   VSS_SS_UNKNOWN  = 0x00000000,
   VSS_SS_CREATED  = 0x0000000c,
} VSS_SNAPSHOT_STATE;

typedef [v1_enum] enum _VSS_VOLUME_SNAPSHOT_ATTRIBUTES {
   VSS_VOLSNAP_ATTR_PERSISTENT         = 0x00000001,
   VSS_VOLSNAP_ATTR_NO_AUTORECOVERY    = 0x00000002,
   VSS_VOLSNAP_ATTR_CLIENT_ACCESSIBLE  = 0x00000004,
   VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE    = 0x00000008,
   VSS_VOLSNAP_ATTR_NO_WRITERS         = 0x00000010,
} VSS_VOLUME_SNAPSHOT_ATTRIBUTES;

typedef [v1_enum] enum _VSS_MGMT_OBJECT_TYPE {
   VSS_MGMT_OBJECT_UNKNOWN     = 0x00000000,                            
   VSS_MGMT_OBJECT_VOLUME      = 0x00000001,          
   VSS_MGMT_OBJECT_DIFF_VOLUME = 0x00000002,
   VSS_MGMT_OBJECT_DIFF_AREA   = 0x00000003,
} VSS_MGMT_OBJECT_TYPE;

typedef [v1_enum] enum _VSS_PROVIDER_TYPE
{
   VSS_PROV_UNKNOWN    = 0x00000000,
} VSS_PROVIDER_TYPE;

typedef GUID VSS_ID;

typedef [unique, string] WCHAR* VSS_PWSZ;

typedef LONGLONG VSS_TIMESTAMP;

typedef struct _VSS_SNAPSHOT_PROP {
   VSS_ID m_SnapshotId;
   VSS_ID m_SnapshotSetId;
   LONG m_lSnapshotsCount;
   VSS_PWSZ m_pwszSnapshotDeviceObject;
   VSS_PWSZ m_pwszOriginalVolumeName;
   VSS_PWSZ m_pwszOriginatingMachine;
   VSS_PWSZ m_pwszServiceMachine;
   VSS_PWSZ m_pwszExposedName;
   VSS_PWSZ m_pwszExposedPath;
   VSS_ID m_ProviderId;
   LONG m_lSnapshotAttributes;
   VSS_TIMESTAMP m_tsCreationTimestamp;
   VSS_SNAPSHOT_STATE m_eStatus;
} VSS_SNAPSHOT_PROP;

typedef struct _VSS_PROVIDER_PROP {
   VSS_ID m_ProviderId;
   VSS_PWSZ m_pwszProviderName;
   VSS_PROVIDER_TYPE m_eProviderType;
   VSS_PWSZ m_pwszProviderVersion;
   VSS_ID m_ProviderVersionId;
   CLSID m_ClassId;
} VSS_PROVIDER_PROP;

[ switch_type(VSS_OBJECT_TYPE) ]
typedef union {
   [case(VSS_OBJECT_SNAPSHOT)] VSS_SNAPSHOT_PROP Snap;
   [case(VSS_OBJECT_PROVIDER)] VSS_PROVIDER_PROP Prov;
   [default];
} VSS_OBJECT_UNION;

typedef struct _VSS_OBJECT_PROP {
   VSS_OBJECT_TYPE Type;
   [ switch_is(Type) ] VSS_OBJECT_UNION Obj;
} VSS_OBJECT_PROP;

typedef struct _VSS_VOLUME_PROP {
   VSS_PWSZ m_pwszVolumeName;
   VSS_PWSZ m_pwszVolumeDisplayName;
} VSS_VOLUME_PROP;

typedef struct _VSS_DIFF_VOLUME_PROP {
   VSS_PWSZ m_pwszVolumeName;
   VSS_PWSZ m_pwszVolumeDisplayName;
   LONGLONG m_llVolumeFreeSpace;
   LONGLONG m_llVolumeTotalSpace;
} VSS_DIFF_VOLUME_PROP;

typedef struct _VSS_DIFF_AREA_PROP {
   VSS_PWSZ m_pwszVolumeName;
   VSS_PWSZ m_pwszDiffAreaVolumeName;
   LONGLONG m_llMaximumDiffSpace;
   LONGLONG m_llAllocatedDiffSpace;
   LONGLONG m_llUsedDiffSpace;
} VSS_DIFF_AREA_PROP;

[ switch_type(VSS_MGMT_OBJECT_TYPE) ]
typedef union {                     
   [case(VSS_MGMT_OBJECT_VOLUME)] VSS_VOLUME_PROP Vol;
   [case(VSS_MGMT_OBJECT_DIFF_VOLUME)] VSS_DIFF_VOLUME_PROP DiffVol;
   [case(VSS_MGMT_OBJECT_DIFF_AREA)] VSS_DIFF_AREA_PROP DiffArea;
   [default];
} VSS_MGMT_OBJECT_UNION;

typedef struct _VSS_MGMT_OBJECT_PROP {
   VSS_MGMT_OBJECT_TYPE Type;                          
   [ switch_is(Type) ] VSS_MGMT_OBJECT_UNION Obj;      
} VSS_MGMT_OBJECT_PROP;

interface IVssSnapshotMgmt;
interface IVssDifferentialSoftwareSnapshotMgmt;
interface IVssEnumObject;
interface IVssEnumMgmtObject;

[
   object,
   uuid(FA7DF749-66E7-4986-A27F-E2F04AE53772),
   pointer_default(unique)
]
interface IVssSnapshotMgmt: IUnknown
{
   HRESULT GetProviderMgmtInterface(
       [in] VSS_ID ProviderId,
       [in] REFIID InterfaceId,
       [out, iid_is(InterfaceId)] IUnknown** ppItf
       );

   HRESULT QueryVolumesSupportedForSnapshots(
       [in] VSS_ID ProviderId,
       [in] LONG lContext,
       [out] IVssEnumMgmtObject **ppEnum
       );

   HRESULT QuerySnapshotsByVolume(
       [in] VSS_PWSZ pwszVolumeName,
       [in] VSS_ID ProviderId,
       [out] IVssEnumObject **ppEnum
       );
};

[
   object,
   uuid(214A0F28-B737-4026-B847-4F9E37D79529),
   pointer_default(unique)
]
interface IVssDifferentialSoftwareSnapshotMgmt: IUnknown
{
   HRESULT AddDiffArea(
       [in] VSS_PWSZ pwszVolumeName,
       [in] VSS_PWSZ pwszDiffAreaVolumeName,
       [in] LONGLONG llMaximumDiffSpace
       );

   HRESULT ChangeDiffAreaMaximumSize(
       [in] VSS_PWSZ pwszVolumeName,
       [in] VSS_PWSZ pwszDiffAreaVolumeName,
       [in] LONGLONG llMaximumDiffSpace
       );

   HRESULT QueryVolumesSupportedForDiffAreas(
       [in] VSS_PWSZ pwszOriginalVolumeName,
       [out] IVssEnumMgmtObject **ppEnum
       );

   HRESULT QueryDiffAreasForVolume(
       [in] VSS_PWSZ pwszVolumeName,
       [out] IVssEnumMgmtObject **ppEnum
       );

   HRESULT QueryDiffAreasOnVolume(
       [in] VSS_PWSZ pwszVolumeName,
       [out] IVssEnumMgmtObject **ppEnum
       );

   HRESULT Opnum08NotUsedOnWire(void);
};

[
       object,
       uuid(AE1C7110-2F60-11d3-8A39-00C04F72D8E3),
       pointer_default(unique)
]
interface IVssEnumObject : IUnknown
{
       HRESULT Next(
           [in] ULONG celt,
           [out, size_is(celt), length_is(*pceltFetched)] VSS_OBJECT_PROP *rgelt,
           [out] ULONG *pceltFetched
           );

       HRESULT Skip(
           [in] ULONG celt
           );

       HRESULT Reset();

       HRESULT Clone(
           [in, out] IVssEnumObject **ppenum
           );
};

[
   object,
   uuid(01954E6B-9254-4e6e-808C-C9E05D007696),
   pointer_default(unique)
]
interface IVssEnumMgmtObject : IUnknown
{
   HRESULT Next(
       [in] ULONG celt,                             
       [out, size_is(celt), length_is(*pceltFetched)] VSS_MGMT_OBJECT_PROP *rgelt,
       [out] ULONG *pceltFetched
       );

   HRESULT Skip(
       [in] ULONG celt
       );

   HRESULT Reset();

   HRESULT Clone(            
       [in, out] IVssEnumMgmtObject **ppenum
       );
}; 

 
Did you find this helpful?
(1500 characters remaining)
© 2013 Microsoft. All rights reserved.