// gpmgmt.idl : IDL source for gpmgmt.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (gpmgmt.tlb) and marshalling code.



cpp_quote("#include <winapifamily.h>")

#pragma region Desktop Family
cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)")

typedef enum {rsopUnknown, rsopPlanning, rsopLogging} GPMRSOPMode;

//
// The following GPMPermissionType constants have this structure:
//
//       3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
//       1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
//      +---------------+---------------+---------------+---------------+
//      |    Object type flags          |    Category   |     Level     |
//      +---------------+---------------+---------------+---------------+
//

typedef enum {
    //
    // GPO permissions
    //

    permGPOApply                = 0x00010000,

    permGPORead                 = 0x00010100,
    permGPOEdit                 = 0x00010101,
    permGPOEditSecurityAndDelete= 0x00010102,
    permGPOCustom               = 0x00010103,

    //
    // Per-filter WMI filter permissions
    //

    permWMIFilterEdit           = 0x00020000, 
    permWMIFilterFullControl    = 0x00020001,
    permWMIFilterCustom         = 0x00020002,

    //
    // SOM permissions
    //

    // Sites, domains, OUs

    permSOMLink                 = 0x001C0000,

    // Domains, OUs

    permSOMLogging              = 0x00180100,

    permSOMPlanning             = 0x00180200,

    // Domains

    permSOMWMICreate            = 0x00100300, 
    permSOMWMIFullControl       = 0x00100301,

    permSOMGPOCreate            = 0x00100400,

    //
    // Template permissions
    //

    permStarterGPORead            = 0x00030500,
    permStarterGPOEdit            = 0x00030501,
    permStarterGPOFullControl     = 0x00030502,
    permStarterGPOCustom          = 0x00030503,

    permSOMStarterGPOCreate       = 0x00100500  //  Added: v-joel May 30, 06 to suppot Templates folder delegation
} GPMPermissionType;

typedef enum {gpoPermissions, gpoEffectivePermissions, gpoDisplayName, gpoWMIFilter, gpoID, 
              gpoComputerExtensions, gpoUserExtensions, somLinks, gpoDomain, backupMostRecent,
              starterGPOPermissions, starterGPOEffectivePermissions, starterGPODisplayName, starterGPOID,
              starterGPODomain} GPMSearchProperty;

typedef enum {opEquals, opContains, opNotContains, opNotEquals} GPMSearchOperation;

    //
    // repXML, repHTML are the standard reports. repInfraXML is the Infrastructure XML
    // repClientHealthXML is for client health reporting
    //
typedef enum {repXML, repHTML, repInfraXML, repInfraRefreshXML, repClientHealthXML, repClientHealthRefreshXML} GPMReportType;

typedef enum {
        typeUser = 0,
        typeComputer,
        typeLocalGroup,
        typeGlobalGroup,
        typeUniversalGroup,
        typeUNCPath,
        typeUnknown
        } GPMEntryType;

typedef enum {
        opDestinationSameAsSource = 0,
        opDestinationNone,
        opDestinationByRelativeName,
        opDestinationSet
        } GPMDestinationOption;

typedef enum {
        opReportLegacy = 0,
        opReportComments = 1,
        } GPMReportingOptions;

const long GPM_USE_PDC = 0;
const long GPM_USE_ANYDC = 1;
const long GPM_DONOTUSE_W2KDC = 2;

const long GPM_DONOT_VALIDATEDC = 1;

const long GPM_MIGRATIONTABLE_ONLY = 0x1;
const long GPM_PROCESS_SECURITY = 0x2;

const long RSOP_NO_COMPUTER                   = 0x10000;
const long RSOP_NO_USER                       = 0x20000;

const long RSOP_PLANNING_ASSUME_SLOW_LINK             = 0x1;
const long RSOP_PLANNING_ASSUME_LOOPBACK_MERGE        = 0x2;
const long RSOP_PLANNING_ASSUME_LOOPBACK_REPLACE      = 0x4;
const long RSOP_PLANNING_ASSUME_USER_WQLFILTER_TRUE   = 0x8;
const long RSOP_PLANNING_ASSUME_COMP_WQLFILTER_TRUE   = 0x10;


import "oaidl.idl";
import "ocidl.idl";

interface IGPM;
interface IGPMDomain;
interface IGPMSitesContainer;
interface IGPMBackupDir;
interface IGPMSearchCriteria;
interface IGPMPermission;
interface IGPMClientSideExtension;
interface IGPMCSECollection;

interface IGPMGPO;
interface IGPMGPOCollection;

interface IGPMWMIFilter;
interface IGPMWMIFilterCollection;

interface IGPMSecurityInfo;

interface IGPMBackup;
interface IGPMBackupCollection;

interface IGPMSOM;
interface IGPMSOMCollection;

interface IGPMGPOLink;
interface IGPMGPOLinksCollection;

interface IGPMRSOP;

interface IGPMStatusMessage;
interface IGPMStatusMsgCollection;

interface IGPMAsyncCancel;
interface IGPMAsyncProgress;
interface IGPMTrustee;
interface IGPMConstants;
interface IGPMResult;
interface IGPMMigrationTable;
interface IGPMMapEntryCollection;
interface IGPMMapEntry; 

   [
      object,
      uuid(F5FAE809-3BD6-4DA9-A65E-17665B41D763),
      dual,
      helpstring("IGPM Interface"),
      pointer_default(unique)
   ]

   interface IGPM : IDispatch
   {
      [id(1), helpstring("method GetDomain")] HRESULT GetDomain([in] BSTR bstrDomain, [in, unique] BSTR bstrDomainController,  [in] long lDCFlags, [out, retval] IGPMDomain **pIGPMDomain);
      [id(2), helpstring("method GetBackupDir")] HRESULT GetBackupDir([in] BSTR bstrBackupDir, [out, retval] IGPMBackupDir **pIGPMBackupDir);
      [id(3), helpstring("method GetSitesContainer")] HRESULT GetSitesContainer([in] BSTR bstrForest, [in, unique] BSTR bstrDomain, [in, unique] BSTR bstrDomainController, [in] long lDCFlags, [out, retval] IGPMSitesContainer **ppIGPMSitesContainer);
      [id(4), helpstring("method GetRSOP")] HRESULT GetRSOP([in] GPMRSOPMode gpmRSoPMode, [in] BSTR bstrNamespace, [in] long lFlags, [out, retval] IGPMRSOP **ppIGPMRSOP);
      [id(5), helpstring("method CreatePermission")] HRESULT CreatePermission([in] BSTR bstrTrustee, [in] GPMPermissionType perm, [in] VARIANT_BOOL bInheritable, [out, retval] IGPMPermission **ppPerm);
      [id(6), helpstring("method CreateSearchCriteria")] HRESULT CreateSearchCriteria([out, retval] IGPMSearchCriteria **ppIGPMSearchCriteria);
      [id(7), helpstring("method CreateTrustee")] HRESULT CreateTrustee([in] BSTR bstrTrustee, [out, retval] IGPMTrustee **ppIGPMTrustee);
      [id(8), helpstring("method GetClientSideExtensions")] HRESULT GetClientSideExtensions([out, retval] IGPMCSECollection **ppIGPMCSECollection);
      [id(9), helpstring("method GetConstants")] HRESULT GetConstants([out, retval] IGPMConstants **ppIGPMConstants);
      [id(10), helpstring("method GetMigrationTable")] HRESULT GetMigrationTable([in] BSTR bstrMigrationTablePath, [out, retval] IGPMMigrationTable **ppMigrationTable);
      [id(11), helpstring("method CreateMigrationTable")] HRESULT CreateMigrationTable([out, retval] IGPMMigrationTable **ppMigrationTable);
      [id(12), helpstring("method InitializeReporting")] HRESULT InitializeReporting([in, unique] BSTR bstrAdmPath);
   };

   [
      object,
      uuid(6B21CC14-5A00-4F44-A738-FEEC8A94C7E3),
      dual,
      helpstring("IGPMDomain Interface"),
      pointer_default(unique)
   ]
   interface IGPMDomain : IDispatch
   {
      [propget, id(1), helpstring("property DomainController")] HRESULT DomainController([out, retval] BSTR *pVal);
      [propget, id(2), helpstring("property Domain")] HRESULT Domain([out, retval] BSTR *pVal);
      
      [id(4),  helpstring("method CreateGPO")] HRESULT CreateGPO([out, retval] IGPMGPO **ppNewGPO);
      [id(5),  helpstring("method GetGPO")] HRESULT GetGPO([in] BSTR bstrGuid, [out, retval] IGPMGPO **ppGPO);
      [id(6),  helpstring("method SearchGPOs")] HRESULT SearchGPOs([in] IGPMSearchCriteria *pIGPMSearchCriteria, [out, retval] IGPMGPOCollection **ppIGPMGPOCollection );
      
      [id(7),  helpstring("method RestoreGPO")] HRESULT RestoreGPO(
                [in] IGPMBackup *pIGPMBackup, 
                [in] long lDCFlags,
                [in, optional]  VARIANT     *pvarGPMProgress,
                [out, optional]  VARIANT     *pvarGPMCancel,
                [out, retval] IGPMResult **ppIGPMResult);
      
      [id(8),  helpstring("method GetSOM")] HRESULT GetSOM([in, unique] BSTR bstrPath, [out, retval] IGPMSOM **ppSOM);
      [id(9),  helpstring("method SearchSOMs")] HRESULT SearchSOMs([in] IGPMSearchCriteria *pIGPMSearchCriteria, [out, retval] IGPMSOMCollection **ppIGPMSOMCollection);
      
      [id(10), helpstring("method GetWMIFilter")] HRESULT GetWMIFilter([in] BSTR bstrPath, [out, retval] IGPMWMIFilter **ppWMIFilter);
      [id(11), helpstring("method SearchWMIFilters")] HRESULT SearchWMIFilters([in] IGPMSearchCriteria *pIGPMSearchCriteria, [out, retval]  IGPMWMIFilterCollection **ppIGPMWMIFilterCollection);
   };


   [
      object,
      uuid(B1568BED-0A93-4ACC-810F-AFE7081019B9),
      dual,
      helpstring("IGPMBackupDir Interface"),
      pointer_default(unique)
   ]
   interface IGPMBackupDir : IDispatch
   {
      [propget, id(1), helpstring("property BackupDirectory")] HRESULT BackupDirectory([out, retval]  BSTR *pVal);
      [id(2), helpstring("method GetBackup")] HRESULT GetBackup([in] BSTR bstrID, [out, retval] IGPMBackup **ppBackup);
      [id(3), helpstring("method SearchBackups")] HRESULT SearchBackups([in] IGPMSearchCriteria  *pIGPMSearchCriteria,  [out, retval] IGPMBackupCollection **ppIGPMBackupCollection);
   };

   [
      object,
      uuid(4725A899-2782-4D27-A6BB-D499246FFD72),
      dual,
      helpstring("IGPMSitesContainer Interface"),
      pointer_default(unique)
   ]
   interface IGPMSitesContainer : IDispatch
   {
      [propget, id(1), helpstring("property DomainController")] HRESULT DomainController([out, retval] BSTR *pVal);
      [propget, id(2), helpstring("property Domain")] HRESULT Domain([out, retval] BSTR *pVal);
      [propget, id(3), helpstring("property Forest")] HRESULT Forest([out, retval] BSTR *pVal);
      [id(4), helpstring("method GetSite")] HRESULT GetSite([in] BSTR bstrSiteName, [out, retval] IGPMSOM **ppSOM);
      [id(5), helpstring("method SearchSites")] HRESULT SearchSites([in] IGPMSearchCriteria *pIGPMSearchCriteria, [out, retval] IGPMSOMCollection **ppIGPMSOMCollection);
   };
   

   [
      object,
      uuid(D6F11C42-829B-48D4-83F5-3615B67DFC22),
      dual,
      helpstring("IGPMSearchCriteria Interface"),
      pointer_default(unique)
   ]
   interface IGPMSearchCriteria : IDispatch
   {
      [id(1), helpstring("method Add")] HRESULT Add([in] GPMSearchProperty searchProperty, [in] GPMSearchOperation searchOperation, [in] VARIANT varValue);
   };
   
   [
      object,
      uuid(3B466DA8-C1A4-4B2A-999A-BEFCDD56CEFB),
      dual,
      helpstring("IGPMTrustee Interface"),
      pointer_default(unique)
   ]
   interface IGPMTrustee : IDispatch
   {
      [propget, id(1), helpstring("property Sid")] HRESULT TrusteeSid([out, retval] BSTR *bstrVal);
      [propget, id(2), helpstring("property Name")] HRESULT TrusteeName([out, retval] BSTR *bstrVal);
      [propget, id(3), helpstring("property Domain")] HRESULT TrusteeDomain([out, retval] BSTR *bstrVal);
      [propget, id(4), helpstring("property TrusteeDSPath")] HRESULT TrusteeDSPath([out, retval] BSTR *pVal);
      [propget, id(5), helpstring("property TrusteeType")] HRESULT TrusteeType([out, retval] long *lVal);
   };

   [
      object,
      uuid(35EBCA40-E1A1-4A02-8905-D79416FB464A),
      dual,
      helpstring("IGPMPermission Interface"),
      pointer_default(unique)
   ]
   interface IGPMPermission : IDispatch
   {
      [propget, id(1), helpstring("property Inherited")] HRESULT Inherited([out, retval] VARIANT_BOOL *pVal);
      [propget, id(2), helpstring("property Inheritable")] HRESULT Inheritable([out, retval] VARIANT_BOOL *pVal);
      [propget, id(3), helpstring("property Denied")] HRESULT Denied([out, retval] VARIANT_BOOL *pVal);
      [propget, id(4), helpstring("property Permission")] HRESULT Permission([out, retval] GPMPermissionType *pVal);
      [propget, id(5), helpstring("property Trustee")] HRESULT Trustee([out, retval] IGPMTrustee **ppIGPMTrustee);
   };
   
   [
      object,
      uuid(B6C31ED4-1C93-4D3E-AE84-EB6D61161B60),
      dual,
      helpstring("IGPMSecurityInfo Interface"),
      pointer_default(unique)
   ]
   interface IGPMSecurityInfo : IDispatch
   {
      [propget, id(1), helpstring("property Count")] HRESULT Count([out, retval] long *pVal);
      [propget, id(DISPID_VALUE), helpstring("property Item")] HRESULT Item(long lIndex, [out, retval] VARIANT *pVal);
      [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IEnumVARIANT **ppEnum);
      [id(5), helpstring("method Add")] HRESULT Add([in] IGPMPermission *pPerm);
      [id(6), helpstring("method Remove")] HRESULT Remove([in] IGPMPermission *pPerm);
      [id(7), helpstring("method RemoveTrustee")] HRESULT RemoveTrustee([in] BSTR bstrTrustee);
   };

   [
      object,
      uuid(D8A16A35-3B0D-416B-8D02-4DF6F95A7119),
      dual,
      helpstring("IGPMBackup Interface"),
      pointer_default(unique)
   ]
   interface IGPMBackup : IDispatch
   {
      [propget, id(1), helpstring("property ID")] HRESULT ID([out, retval] BSTR *pVal);
      [propget, id(2), helpstring("property GPOID")] HRESULT GPOID([out, retval] BSTR *pVal);
      [propget, id(3), helpstring("property GPODomain")] HRESULT GPODomain([out, retval] BSTR *pVal);
      [propget, id(4), helpstring("property GPODisplayName")] HRESULT GPODisplayName([out, retval] BSTR *pVal);
      [propget, id(5), helpstring("property Timestamp")] HRESULT Timestamp([out, retval] DATE *pVal);
      [propget, id(6), helpstring("property Comment")] HRESULT Comment([out, retval] BSTR *pVal);
      [propget, id(7), helpstring("property BackupDir")] HRESULT BackupDir([out, retval] BSTR *pVal);
      [id(8), helpstring("method Delete")] HRESULT Delete();

      [id(9), helpstring("method GenerateReport")] HRESULT GenerateReport(
                         [in] GPMReportType gpmReportType, 
                         [in, optional]  VARIANT  *pvarGPMProgress, 
                         [out,optional]  VARIANT  *pvarGPMCancel,
                         [out,retval] IGPMResult **ppIGPMResult);

      [id(10), helpstring("method GenerateReportToFile")] HRESULT GenerateReportToFile(
                         [in] GPMReportType gpmReportType,
                         [in] BSTR          bstrTargetFilePath,
                         [out, retval] IGPMResult **ppIGPMResult);

   };

   [
      object,
      uuid(C786FC0F-26D8-4BAB-A745-39CA7E800CAC),
      dual,
      helpstring("IGPMBackupCollection Interface"),
      pointer_default(unique)
   ]
   interface IGPMBackupCollection : IDispatch
   {
      [propget, id(1), helpstring("property Count")] HRESULT Count([out, retval] long *pVal);
      [propget, id(DISPID_VALUE), helpstring("property Item")] HRESULT Item(long lIndex, [out, retval] VARIANT *pVal);
      [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IEnumVARIANT* *ppIGPMBackup);
   };
   
   [
      object,
      uuid(C0A7F09E-05A1-4F0C-8158-9E5C33684F6B),
      dual,
      helpstring("IGPMSOM Interface"),
      pointer_default(unique)
   ]
   interface IGPMSOM : IDispatch
   {
      typedef enum {somSite, somDomain, somOU} GPMSOMType;

      [propget, id(1), helpstring("property GPOInheritanceBlocked")] HRESULT GPOInheritanceBlocked([out, retval] VARIANT_BOOL *pVal);
      [propput, id(1), helpstring("property GPOInheritanceBlocked")] HRESULT GPOInheritanceBlocked([in] VARIANT_BOOL newVal);
      [propget, id(3), helpstring("property Name")] HRESULT Name([out, retval] BSTR *pVal);
      [propget, id(4), helpstring("property Path")] HRESULT Path([out, retval] BSTR *pVal);
      [id(5), helpstring("method CreateGPOLink")] HRESULT CreateGPOLink([in] long lLinkPos, [in] IGPMGPO *pGPO, [out, retval] IGPMGPOLink **ppNewGPOLink);
      [propget, id(6), helpstring("property Type")] HRESULT Type([out, retval] GPMSOMType *pVal);
      [id(7), helpstring("method GetGPOLinks")] HRESULT GetGPOLinks([out, retval] IGPMGPOLinksCollection **ppGPOLinks);
      [id(8), helpstring("method GetInheritedGPOLinks")] HRESULT GetInheritedGPOLinks([out, retval] IGPMGPOLinksCollection **ppGPOLinks);
      [id(9), helpstring("method GetSecurityInfo")] HRESULT GetSecurityInfo([out, retval] IGPMSecurityInfo **ppSecurityInfo);
      [id(10), helpstring("method SetSecurityInfo")] HRESULT SetSecurityInfo([in] IGPMSecurityInfo *pSecurityInfo);
   };

   [
      object,
      uuid(ADC1688E-00E4-4495-ABBA-BED200DF0CAB),
      dual,
      helpstring("IGPMSOMCollection Interface"),
      pointer_default(unique)
   ]
   interface IGPMSOMCollection : IDispatch
   {
      [propget, id(1), helpstring("property Count")] HRESULT Count([out, retval] long *pVal);
      [propget, id(DISPID_VALUE), helpstring("property Item")] HRESULT Item(long lIndex, [out, retval] VARIANT *pVal);
      [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IEnumVARIANT* *ppIGPMSOM);
   };

   [
      object,
      uuid(EF2FF9B4-3C27-459A-B979-038305CEC75D),
      dual,
      helpstring("IGPMWMIFilter Interface"),
      pointer_default(unique)
   ]
   interface IGPMWMIFilter : IDispatch
   {
      [propget, id(1), helpstring("property Path")] HRESULT Path([out, retval] BSTR *pVal);
      [propput, id(2), helpstring("property Name")] HRESULT Name([in] BSTR newVal);
      [propget, id(2), helpstring("property Name")] HRESULT Name([out,retval] BSTR * pVal);
      [propput, id(3), helpstring("property Description")] HRESULT Description([in] BSTR newVal);
      [propget, id(3), helpstring("property Description")] HRESULT Description([out,retval] BSTR * pVal);
      [id(4), helpstring("method GetQueryList")] HRESULT GetQueryList([out,retval] VARIANT *pQryList);
      [id(5), helpstring("method GetSecurityInfo")] HRESULT GetSecurityInfo([out, retval] IGPMSecurityInfo **ppSecurityInfo);
      [id(6), helpstring("method SetSecurityInfo")] HRESULT SetSecurityInfo([in] IGPMSecurityInfo *pSecurityInfo);
   };
   
   [
      object,
      uuid(5782D582-1A36-4661-8A94-C3C32551945B),
      dual,
      helpstring("IGPMWMIFilterCollection Interface"),
      pointer_default(unique)
   ]
   interface IGPMWMIFilterCollection : IDispatch
   {
      [propget, id(1), helpstring("property Count")] HRESULT Count([out, retval] long *pVal);
      [propget, id(DISPID_VALUE), helpstring("property Item")] HRESULT Item(long lIndex, [out, retval] VARIANT *pVal);
      [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IEnumVARIANT* *pVal);
   };
   
   [
      object,
      uuid(49ED785A-3237-4FF2-B1F0-FDF5A8D5A1EE),
      dual,
      helpstring("IGPMRSOP Interface"),
      pointer_default(unique)
   ]
   interface IGPMRSOP : IDispatch
   {
      // general properties
      [propget, id(1), helpstring("property Mode")] HRESULT Mode([out, retval] GPMRSOPMode *pVal);
      [propget, id(2), helpstring("property Namespace")] HRESULT Namespace([out, retval] BSTR *bstrVal);
      
      // logging mode properties
      [propput, id(3), helpstring("property LoggingComputer")] HRESULT LoggingComputer([in] BSTR bstrVal);
      [propget, id(3), helpstring("property LoggingComputer")] HRESULT LoggingComputer([out, retval] BSTR *bstrVal);
      
      [propput, id(4), helpstring("property LoggingUser")] HRESULT LoggingUser([in] BSTR bstrVal);
      [propget, id(4), helpstring("property LoggingUser")] HRESULT LoggingUser([out, retval] BSTR *bstrVal);
   
      [propput, id(5), helpstring("property LoggingFlags")] HRESULT LoggingFlags([in] long lVal);
      [propget, id(5), helpstring("property LoggingFlags")] HRESULT LoggingFlags([out, retval] long *lVal);
   
   
      // planning mode properties
      [propput, id(6), helpstring("property PlanningFlags")] HRESULT PlanningFlags([in] long lVal);
      [propget, id(6), helpstring("property PlanningFlags")] HRESULT PlanningFlags([out, retval] long *lVal);
   
      [propput, id(7), helpstring("property PlanningDomainController")] HRESULT PlanningDomainController([in] BSTR bstrVal);
      [propget, id(7), helpstring("property PlanningDomainController")] HRESULT PlanningDomainController([out, retval] BSTR *bstrVal);
   
      [propput, id(8), helpstring("property PlanningSiteName")] HRESULT PlanningSiteName([in] BSTR bstrVal);
      [propget, id(8), helpstring("property PlanningSiteName")] HRESULT PlanningSiteName([out, retval] BSTR *bstrVal);
      
      // planning mode user properties
      [propput, id(9), helpstring("property PlanningUser")] HRESULT PlanningUser([in] BSTR bstrVal);
      [propget, id(9), helpstring("property PlanningUser")] HRESULT PlanningUser([out, retval] BSTR *bstrVal);
   
      [propput, id(10), helpstring("property PlanningUserSOM")] HRESULT PlanningUserSOM([in] BSTR bstrVal);
      [propget, id(10), helpstring("property PlanningUserSOM")] HRESULT PlanningUserSOM([out, retval] BSTR *bstrVal);
   
      // array of IGPMWMIFilter pointers in a variant
      [propput, id(11), helpstring("property PlanningUserWMIFilters")] HRESULT PlanningUserWMIFilters([in] VARIANT varVal);
      [propget, id(11), helpstring("property PlanningUserWMIFilters")] HRESULT PlanningUserWMIFilters([out, retval] VARIANT *varVal);
   
      // array of IGPMTrustee pointers in a variant
      [propput, id(12), helpstring("property PlanningUserSecurityGroups")] HRESULT PlanningUserSecurityGroups([in] VARIANT varVal);
      [propget, id(12), helpstring("property PlanningUserSecurityGroups")] HRESULT PlanningUserSecurityGroups([out, retval] VARIANT *varVal);
   
      
      // planning mode computer properties
      [propput, id(13), helpstring("property PlanningComputer")] HRESULT PlanningComputer([in] BSTR bstrVal);
      [propget, id(13), helpstring("property PlanningComputer")] HRESULT PlanningComputer([out, retval] BSTR *bstrVal);
   
      [propput, id(14), helpstring("property PlanningComputerSOM")] HRESULT PlanningComputerSOM([in] BSTR bstrVal);
      [propget, id(14), helpstring("property PlanningComputerSOM")] HRESULT PlanningComputerSOM([out, retval] BSTR *bstrVal);
   
      // array of IGPMWMIFilter pointers in a variant
      [propput, id(15), helpstring("property PlanningComputerWMIFilters")] HRESULT PlanningComputerWMIFilters([in] VARIANT varVal);
      [propget, id(15), helpstring("property PlanningComputerWMIFilters")] HRESULT PlanningComputerWMIFilters([out, retval] VARIANT *varVal);
   
      // array of IGPMTrustee pointers in a variant
      [propput, id(16), helpstring("property PlanningComputerSecurityGroups")] HRESULT PlanningComputerSecurityGroups([in] VARIANT varVal);
      [propget, id(16), helpstring("property PlanningComputerSecurityGroups")] HRESULT PlanningComputerSecurityGroups([out, retval] VARIANT *varVal);
   
   
      // array of IGPMTrustees
      [id(17), helpstring("method LoggingEnumerateUsers")] HRESULT LoggingEnumerateUsers( [out, retval] VARIANT *varVal );
   
      [id(18), helpstring("method CreateQueryResults")] HRESULT CreateQueryResults();
      [id(19), helpstring("method ReleaseQueryResults")] HRESULT ReleaseQueryResults();
   
      [id(20), helpstring("method GenerateReport")] HRESULT GenerateReport(
                         [in] GPMReportType gpmReportType, 
                         [in, optional]  VARIANT  *pvarGPMProgress, 
                         [out,optional]  VARIANT  *pvarGPMCancel,
                         [out,retval] IGPMResult **ppIGPMResult);

      [id(21), helpstring("method GenerateReportToFile")] HRESULT GenerateReportToFile(
                         [in] GPMReportType gpmReportType,
                         [in] BSTR          bstrTargetFilePath,
                         [out, retval] IGPMResult **ppIGPMResult);
   
   };
   
   [
      object,
      uuid(58CC4352-1CA3-48E5-9864-1DA4D6E0D60F),
      dual,
      helpstring("IGPMGPO Interface"),
      pointer_default(unique)
   ]
   interface IGPMGPO : IDispatch
   {
      [propget, id(1), helpstring("property DisplayName")] HRESULT DisplayName([out, retval] BSTR *pVal);
      [propput, id(1), helpstring("property DisplayName")] HRESULT DisplayName([in] BSTR newVal);
      [propget, id(3), helpstring("property Path")] HRESULT Path([out, retval] BSTR *pVal);
      [propget, id(4), helpstring("property ID")] HRESULT ID([out, retval] BSTR *pVal);
      [propget, id(5), helpstring("property DomainName")] HRESULT DomainName([out, retval] BSTR *pVal);
      [propget, id(6), helpstring("property CreationTime")] HRESULT CreationTime([out, retval] DATE *pDate);
      [propget, id(7), helpstring("property ModificationTime")] HRESULT ModificationTime([out, retval] DATE *pDate);
      [propget, id(8), helpstring("property UserDSVersionNumber")] HRESULT UserDSVersionNumber([out, retval] long *pVal);
      [propget, id(9), helpstring("property ComputerDSVersionNumber")] HRESULT ComputerDSVersionNumber([out, retval] long *pVal);
      [propget, id(10), helpstring("property UserSysvolVersionNumber")] HRESULT UserSysvolVersionNumber([out, retval] long *pVal);
      [propget, id(11), helpstring("property ComputerSysvolVersionNumber")] HRESULT ComputerSysvolVersionNumber([out, retval] long *pVal);

      [id(12), helpstring("method GetWMIFilter")] HRESULT GetWMIFilter([out, retval] IGPMWMIFilter **ppIGPMWMIFilter);
      [id(13), helpstring("method SetWMIFilter")] HRESULT SetWMIFilter([in] IGPMWMIFilter *pIGPMWMIFilter);
      [id(14), helpstring("method SetUserEnabled")] HRESULT SetUserEnabled([in] VARIANT_BOOL vbEnabled);
      [id(15), helpstring("method SetComputerEnabled")] HRESULT SetComputerEnabled([in] VARIANT_BOOL vbEnabled);
      [id(16), helpstring("method IsUserEnabled")] HRESULT IsUserEnabled([out, retval] VARIANT_BOOL *pvbEnabled);
      [id(17), helpstring("method IsComputerEnabled")] HRESULT IsComputerEnabled([out, retval] VARIANT_BOOL *pvbEnabled);
      [id(18), helpstring("method GetSecurityInfo")] HRESULT GetSecurityInfo([out, retval] IGPMSecurityInfo **ppSecurityInfo);
      [id(19), helpstring("method SetSecurityInfo")] HRESULT SetSecurityInfo([in] IGPMSecurityInfo *pSecurityInfo);
      [id(20), helpstring("method Delete")] HRESULT Delete();

      [id(21), helpstring("method Backup")] HRESULT Backup(
                   [in] BSTR bstrBackupDir, 
                   [in] BSTR bstrComment,
                   [in, optional] VARIANT     *pvarGPMProgress,
                   [out,optional] VARIANT     *pvarGPMCancel,
                   [out,retval]   IGPMResult **ppIGPMResult);

      [id(22), helpstring("method Import")] HRESULT Import(
              [in] long lFlags,
              [in] IGPMBackup *pIGPMBackup, 
              [in, optional]  VARIANT     *pvarMigrationTable,
              [in, optional]  VARIANT     *pvarGPMProgress,
              [out,optional]  VARIANT     *pvarGPMCancel,
              [out,retval]   IGPMResult  **ppIGPMResult);

      [id(23), helpstring("method GenerateReport")] HRESULT GenerateReport(
                         [in] GPMReportType gpmReportType, 
                         [in, optional]  VARIANT  *pvarGPMProgress, 
                         [out,optional]  VARIANT  *pvarGPMCancel,
                         [out,retval] IGPMResult **ppIGPMResult);

      [id(24), helpstring("method GenerateReportToFile")] HRESULT GenerateReportToFile(
                         [in] GPMReportType gpmReportType,
                         [in] BSTR          bstrTargetFilePath,
                         [out, retval] IGPMResult **ppIGPMResult);
      
      [id(25), helpstring("method CopyTo")] HRESULT CopyTo( 
            [in] long lFlags,
            [in] IGPMDomain *pIGPMDomain, 
            [in, optional]  VARIANT     *pvarNewDisplayName,
            [in, optional]  VARIANT     *pvarMigrationTable,
            [in, optional]  VARIANT     *pvarGPMProgress,
            [out,optional]  VARIANT     *pvarGPMCancel,
            [out,retval] IGPMResult    **ppIGPMResult);
   
      [id(26), helpstring("method SetSecurityDescriptor")] HRESULT SetSecurityDescriptor([in] long lFlags, [in] IDispatch *pSD);  
      [id(27), helpstring("method GetSecurityDescriptor")] HRESULT GetSecurityDescriptor([in] long lFlags, [out, retval] IDispatch **ppSD);
      [id(28), helpstring("method IsACLConsistent")] HRESULT IsACLConsistent([out, retval] VARIANT_BOOL *pvbConsistent);
      [id(29), helpstring("method MakeACLConsistent")] HRESULT MakeACLConsistent();
   };

   [
      object,
      uuid(F0F0D5CF-70CA-4C39-9E29-B642F8726C01),
      dual,
      helpstring("IGPMGPOCollection Interface"),
      pointer_default(unique)
   ]
   interface IGPMGPOCollection : IDispatch
   {
      [propget, id(1), helpstring("property Count")] HRESULT Count([out, retval] long *pVal);
      [propget, id(DISPID_VALUE), helpstring("property Item")] HRESULT Item([in] long lIndex, [out, retval] VARIANT *pVal);
      [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IEnumVARIANT **ppIGPMGPOs);
   };
   
   [
       object,
       uuid(434B99BD-5DE7-478A-809C-C251721DF70C),
       dual,
       helpstring("IGPMGPOLink Interface"),
       pointer_default(unique)
   ]
   interface IGPMGPOLink : IDispatch
   {
      [propget, id(1), helpstring("property GPOID")] HRESULT GPOID([out, retval] BSTR *pVal);
      [propget, id(2), helpstring("property GPODomain")] HRESULT GPODomain([out, retval] BSTR *pVal);
      [propget, id(3), helpstring("property Enabled")] HRESULT Enabled([out, retval] VARIANT_BOOL *pVal);
      [propput, id(3), helpstring("property Enabled")] HRESULT Enabled([in] VARIANT_BOOL newVal);
      [propget, id(4), helpstring("property Enforced")] HRESULT Enforced([out, retval] VARIANT_BOOL *pVal);
      [propput, id(4), helpstring("property Enforced")] HRESULT Enforced([in] VARIANT_BOOL newVal);
      [propget, id(5), helpstring("property SOMLinkOrder")] HRESULT SOMLinkOrder([out, retval] long *lVal);  
      [propget, id(6), helpstring("property SOM")] HRESULT SOM([out, retval] IGPMSOM **ppIGPMSOM);  
      [id(7), helpstring("method Delete")] HRESULT Delete();  
   };

   [
      object,
      uuid(189D7B68-16BD-4D0D-A2EC-2E6AA2288C7F),
      dual,
      helpstring("IGPMGPOLinksCollection Interface"),
      pointer_default(unique)
   ]
   interface IGPMGPOLinksCollection : IDispatch
   {
      [propget, id(1), helpstring("property Count")] HRESULT Count([out, retval] long *pVal);
      [propget, id(DISPID_VALUE), helpstring("property Item")] HRESULT Item([in] long lIndex, [out, retval] VARIANT *pVal);
      [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IEnumVARIANT **ppIGPMLinks);
   };

   [
      object,
      uuid(2E52A97D-0A4A-4A6F-85DB-201622455DA0),
      dual,
      helpstring("IGPMCSECollection Interface"),
      pointer_default(unique)
   ]
   interface IGPMCSECollection : IDispatch
   {
      [propget, id(1), helpstring("property Count")] HRESULT Count([out, retval] long *pVal);
      [propget, id(DISPID_VALUE), helpstring("property Item")] HRESULT Item([in] long lIndex, [out, retval] VARIANT *pVal);
      [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IEnumVARIANT **ppIGPMCSEs);
   };

   [
      object,
      uuid(69DA7488-B8DB-415E-9266-901BE4D49928),
      dual,
      helpstring("IGPMClientSideExtension Interface"),
      pointer_default(unique)
   ]
   interface IGPMClientSideExtension : IDispatch
   {
      [propget, id(1), helpstring("property ID")] HRESULT ID([out, retval] BSTR *pVal);
      [propget, id(2), helpstring("property DisplayName")] HRESULT DisplayName([out, retval] BSTR *pVal);
      [id(3), helpstring("method IsUserEnabled")] HRESULT IsUserEnabled([out, retval] VARIANT_BOOL *pvbEnabled);
      [id(4), helpstring("method IsComputerEnabled")] HRESULT IsComputerEnabled([out, retval] VARIANT_BOOL *pvbEnabled);
   };

   [
      object,
      uuid(DDC67754-BE67-4541-8166-F48166868C9C),
      dual,
      helpstring("IGPMAsyncCancel Interface"),
      pointer_default(unique)
   ]
   interface IGPMAsyncCancel : IDispatch
   {
      [id(1), helpstring("method Cancel")] HRESULT Cancel();
   };
   [
      object,
      uuid(6AAC29F8-5948-4324-BF70-423818942DBC),
      dual,
      helpstring("IGPMAsyncProgress Interface"),
      pointer_default(unique)
   ]
   interface IGPMAsyncProgress : IDispatch
   {
      [id(1), helpstring("method Status")] HRESULT Status([in] long lProgressNumerator, [in] long lProgressDenominator, [in] HRESULT hrStatus, [in] VARIANT *pResult, [in] IGPMStatusMsgCollection *ppIGPMStatusMsgCollection);
   };

   [
      object,
      uuid(9B6E1AF0-1A92-40F3-A59D-F36AC1F728B7),
      dual,
      helpstring("IGPMStatusMsgCollection Interface"),
      pointer_default(unique)
   ]
   interface IGPMStatusMsgCollection : IDispatch
   {
      [propget, id(1), helpstring("property Count")] HRESULT Count([out, retval] long *pVal);
      [propget, id(DISPID_VALUE), helpstring("property Item")] HRESULT Item([in] long lIndex, [out, retval] VARIANT *pVal);
      [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IEnumVARIANT * *pVal);
   };

   [
      object,
      uuid(8496C22F-F3DE-4A1F-8F58-603CAAA93D7B),
      dual,
      helpstring("IGPMStatusMessage Interface"),
      pointer_default(unique)
   ]
   interface IGPMStatusMessage : IDispatch
   {
      [propget, id(1), helpstring("property ObjectPath")] HRESULT ObjectPath([out, retval] BSTR *pVal);
      [id(2), helpstring("method ErrorCode")] HRESULT ErrorCode();
      [propget, id(3), helpstring("property ExtensionName")] HRESULT ExtensionName([out, retval] BSTR *pVal);
      [propget, id(4), helpstring("property SettingsName")] HRESULT SettingsName([out, retval] BSTR *pVal);
      [id(5), helpstring("method OperationCode")] HRESULT OperationCode();
      [propget, id(6), helpstring("property Message")] HRESULT Message([out, retval] BSTR *pVal);
   };

   [
        object,
        uuid(50EF73E6-D35C-4C8D-BE63-7EA5D2AAC5C4),
        dual,
        helpstring("IGPMConstants Interface"),
        pointer_default(unique)
    ]
    interface IGPMConstants : IDispatch
    {
        [propget, id(1), helpstring("property PermGPOApply")] HRESULT PermGPOApply([out, retval] GPMPermissionType *pVal);
        [propget, id(2), helpstring("property PermGPORead")] HRESULT PermGPORead([out, retval] GPMPermissionType *pVal);
        [propget, id(3), helpstring("property PermGPOEdit")] HRESULT PermGPOEdit([out, retval] GPMPermissionType *pVal);
        [propget, id(4), helpstring("property PermGPOEditSecurityAndDelete")] HRESULT PermGPOEditSecurityAndDelete([out, retval] GPMPermissionType *pVal);
        [propget, id(5), helpstring("property PermGPOCustom")] HRESULT PermGPOCustom([out, retval] GPMPermissionType *pVal);
        [propget, id(6), helpstring("property PermWMIFilterEdit")] HRESULT PermWMIFilterEdit([out, retval] GPMPermissionType *pVal);
        [propget, id(7), helpstring("property PermWMIFilterFullControl")] HRESULT PermWMIFilterFullControl([out, retval] GPMPermissionType *pVal);
        [propget, id(8), helpstring("property PermWMIFilterCustom")] HRESULT PermWMIFilterCustom([out, retval] GPMPermissionType *pVal);
        [propget, id(9), helpstring("property PermSOMLink")] HRESULT PermSOMLink([out, retval] GPMPermissionType *pVal);
        [propget, id(10), helpstring("property PermSOMLogging")] HRESULT PermSOMLogging([out, retval] GPMPermissionType *pVal);
        [propget, id(11), helpstring("property PermSOMPlanning")] HRESULT PermSOMPlanning([out, retval] GPMPermissionType *pVal);
        [propget, id(12), helpstring("property PermSOMGPOCreate")] HRESULT PermSOMGPOCreate([out, retval] GPMPermissionType *pVal);
        [propget, id(13), helpstring("property PermSOMWMICreate")] HRESULT PermSOMWMICreate([out, retval] GPMPermissionType *pVal);
        [propget, id(14), helpstring("property PermSOMWMIFullControl")] HRESULT PermSOMWMIFullControl([out, retval] GPMPermissionType *pVal);
        [propget, id(15), helpstring("property SearchPropertyGPOPermissions")] HRESULT SearchPropertyGPOPermissions([out, retval] GPMSearchProperty *pVal);
        [propget, id(16), helpstring("property SearchPropertyGPOEffectivePermissions")] HRESULT SearchPropertyGPOEffectivePermissions([out, retval] GPMSearchProperty *pVal);
        [propget, id(17), helpstring("property SearchPropertyGPODisplayName")] HRESULT SearchPropertyGPODisplayName([out, retval] GPMSearchProperty *pVal);
        [propget, id(18), helpstring("property SearchPropertyGPOWMIFilter")] HRESULT SearchPropertyGPOWMIFilter([out, retval] GPMSearchProperty *pVal);
        [propget, id(19), helpstring("property SearchPropertyGPOID")] HRESULT SearchPropertyGPOID([out, retval] GPMSearchProperty *pVal);
        [propget, id(20), helpstring("property SearchPropertyGPOComputerExtensions")] HRESULT SearchPropertyGPOComputerExtensions([out, retval] GPMSearchProperty *pVal);
        [propget, id(21), helpstring("property SearchPropertyGPOUserExtensions")] HRESULT SearchPropertyGPOUserExtensions([out, retval] GPMSearchProperty *pVal);
        [propget, id(22), helpstring("property SearchPropertySOMLinks")] HRESULT SearchPropertySOMLinks([out, retval] GPMSearchProperty *pVal);
        [propget, id(23), helpstring("property SearchPropertyGPODomain")] HRESULT SearchPropertyGPODomain([out, retval] GPMSearchProperty *pVal);
        [propget, id(24), helpstring("property SearchPropertyBackupMostRecent")] HRESULT SearchPropertyBackupMostRecent([out, retval] GPMSearchProperty *pVal);
        [propget, id(25), helpstring("property SearchOpEquals")] HRESULT SearchOpEquals([out, retval] GPMSearchOperation *pVal);
        [propget, id(26), helpstring("property SearchOpContains")] HRESULT SearchOpContains([out, retval] GPMSearchOperation *pVal);
        [propget, id(27), helpstring("property SearchOpNotContains")] HRESULT SearchOpNotContains([out, retval] GPMSearchOperation *pVal);
        [propget, id(28), helpstring("property SearchOpNotEquals")] HRESULT SearchOpNotEquals([out, retval] GPMSearchOperation *pVal);
        [propget, id(29), helpstring("property UsePDC")] HRESULT UsePDC([out, retval] long *pVal);
        [propget, id(30), helpstring("property UseAnyDC")] HRESULT UseAnyDC([out, retval] long *pVal);
        [propget, id(31), helpstring("property DoNotUseW2KDC")] HRESULT DoNotUseW2KDC([out, retval] long *pVal);
        [propget, id(32), helpstring("property SOMSite")] HRESULT SOMSite([out, retval] GPMSOMType *pVal);
        [propget, id(33), helpstring("property SOMDomain")] HRESULT SOMDomain([out, retval] GPMSOMType *pVal);
        [propget, id(34), helpstring("property SOMOU")] HRESULT SOMOU([out, retval] GPMSOMType *pVal);
        [propget, id(35), helpstring("property SecurityFlags")] HRESULT SecurityFlags([in] VARIANT_BOOL vbOwner, [in] VARIANT_BOOL vbGroup, [in] VARIANT_BOOL vbDACL, [in] VARIANT_BOOL vbSACL, [out, retval] long *pVal);
        [propget, id(36), helpstring("property DoNotValidateDC")] HRESULT DoNotValidateDC([out, retval] long *pVal);
        [propget, id(37), helpstring("property ReportHTML")] HRESULT ReportHTML([out, retval] GPMReportType *pVal);
        [propget, id(38), helpstring("property ReportXML")] HRESULT ReportXML([out, retval] GPMReportType *pVal);
        [propget, id(39), helpstring("property RSOPModeUnknown")] HRESULT RSOPModeUnknown([out, retval] GPMRSOPMode *pVal);
        [propget, id(40), helpstring("property RSOPModePlanning")] HRESULT RSOPModePlanning([out, retval] GPMRSOPMode *pVal);
        [propget, id(41), helpstring("property RSOPModeLogging")] HRESULT RSOPModeLogging([out, retval] GPMRSOPMode *pVal);
        [propget, id(42), helpstring("property EntryTypeUser")] HRESULT EntryTypeUser([out, retval] GPMEntryType *pVal);
        [propget, id(43), helpstring("property EntryTypeComputer")] HRESULT EntryTypeComputer([out, retval] GPMEntryType *pVal);
        [propget, id(44), helpstring("property EntryTypeLocalGroup")] HRESULT EntryTypeLocalGroup([out, retval] GPMEntryType *pVal);
        [propget, id(45), helpstring("property EntryTypeGlobalGroup")] HRESULT EntryTypeGlobalGroup([out, retval] GPMEntryType *pVal);
        [propget, id(46), helpstring("property EntryTypeUniversalGroup")] HRESULT EntryTypeUniversalGroup([out, retval] GPMEntryType *pVal);
        [propget, id(47), helpstring("property EntryTypeUNCPath")] HRESULT EntryTypeUNCPath([out, retval] GPMEntryType *pVal);
        [propget, id(48), helpstring("property EntryTypeUnknown")] HRESULT EntryTypeUnknown([out, retval] GPMEntryType *pVal);
        [propget, id(49), helpstring("property DestinationOptionSameAsSource")] HRESULT DestinationOptionSameAsSource([out, retval] GPMDestinationOption *pVal);
        [propget, id(50), helpstring("property DestinationOptionNone")] HRESULT DestinationOptionNone([out, retval] GPMDestinationOption *pVal);
        [propget, id(51), helpstring("property DestinationOptionByRelativeName")] HRESULT DestinationOptionByRelativeName([out, retval] GPMDestinationOption *pVal);
        [propget, id(52), helpstring("property DestinationOptionSet")] HRESULT DestinationOptionSet([out, retval] GPMDestinationOption *pVal);
        [propget, id(53), helpstring("property MigrationTableOnly")] HRESULT MigrationTableOnly([out, retval] long *pVal);
        [propget, id(54), helpstring("property ProcessSecurity")] HRESULT ProcessSecurity([out, retval] long *pVal);
        [propget, id(55), helpstring("property RsopLoggingNoComputer")] HRESULT RsopLoggingNoComputer([out, retval] long *pVal);
        [propget, id(56), helpstring("property RsopLoggingNoUser")] HRESULT RsopLoggingNoUser([out, retval] long *pVal);
        [propget, id(57), helpstring("property RsopPlanningAssumeSlowLink")] HRESULT RsopPlanningAssumeSlowLink([out, retval] long *pVal);
        [propget, id(58), helpstring("property RsopPlanningLoopbackOption")] HRESULT RsopPlanningLoopbackOption([in] VARIANT_BOOL vbMerge, [out, retval] long  *pVal);
        [propget, id(59), helpstring("property RsopPlanningAssumeUserWQLFilterTrue")] HRESULT RsopPlanningAssumeUserWQLFilterTrue([out, retval] long *pVal);
        [propget, id(60), helpstring("property RsopPlanningAssumeCompWQLFilterTrue")] HRESULT RsopPlanningAssumeCompWQLFilterTrue([out, retval] long *pVal);
   };

    [
        object,
        uuid(86DFF7E9-F76F-42AB-9570-CEBC6BE8A52D),
        dual,
        helpstring("IGPMResult Interface"),
        pointer_default(unique)
    ]
    interface IGPMResult : IDispatch
    {
        [propget, id(1), helpstring("property Status")] HRESULT Status([out, retval] IGPMStatusMsgCollection   **ppIGPMStatusMsgCollection);
        [propget, id(2), helpstring("property Result")] HRESULT Result([out, retval] VARIANT *pvarResult);
        [id(3), helpstring("method OverallStatus")] HRESULT OverallStatus();
    };

    [
        object,
        uuid(BB0BF49B-E53F-443F-B807-8BE22BFB6D42),
        dual,
        helpstring("IGPMMapEntryCollection Interface"),
        pointer_default(unique)
    ]
    interface IGPMMapEntryCollection : IDispatch
    {
        [propget, id(1), helpstring("property Count")] HRESULT Count([out, retval] long *pVal);
        [propget, id(DISPID_VALUE), helpstring("property Item")] HRESULT Item([in] long lIndex, [out, retval] VARIANT *pVal);
        [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IEnumVARIANT * *pVal);
    };

    [
        object,
        uuid(8E79AD06-2381-4444-BE4C-FF693E6E6F2B),
        dual,
        helpstring("IGPMMapEntry Interface"),
        pointer_default(unique)
    ]
    interface IGPMMapEntry : IDispatch
    {
        [propget, id(1), helpstring("property Source")] HRESULT Source([out, retval] BSTR *pbstrSource);
        [propget, id(2), helpstring("property Destination")] HRESULT Destination([out, retval] BSTR *pbstrDestination);
        [propget, id(3), helpstring("property DestinationOption")] HRESULT DestinationOption([out, retval] GPMDestinationOption *pgpmDestOption);
        [propget, id(4), helpstring("property EntryType")] HRESULT EntryType([out, retval] GPMEntryType *pgpmEntryType);
    };

    [
        object,
        uuid(48F823B1-EFAF-470B-B6ED-40D14EE1A4EC),
        dual,
        helpstring("IGPMMigrationTable Interface"),
        pointer_default(unique)
    ]
    interface IGPMMigrationTable : IDispatch
    {
        [id(1), helpstring("method Save")] HRESULT Save([in] BSTR bstrMigrationTablePath);
        [id(2), helpstring("method Add")] HRESULT Add([in] long lFlags, [in] VARIANT var);
        [id(3), helpstring("method AddEntry")] HRESULT AddEntry([in] BSTR bstrSource, 
                                                                [in] GPMEntryType gpmEntryType,
                                                                [in, optional] VARIANT *pvarDestination,
                                                                [out, retval] IGPMMapEntry **ppEntry);
        [id(4), helpstring("method GetEntry")] HRESULT GetEntry([in] BSTR bstrSource, 
                                                                [out, retval] IGPMMapEntry **ppEntry);
        [id(5), helpstring("method DeleteEntry")] HRESULT DeleteEntry([in] BSTR bstrSource);
        [id(6), helpstring("method UpdateDestination")] HRESULT UpdateDestination([in] BSTR bstrSource, 
                                                                                  [in, optional] VARIANT *pvarDestination, 
                                                                                  [out, retval] IGPMMapEntry **ppEntry);
        [id(7), helpstring("method Validate")] HRESULT Validate([out, retval] IGPMResult **ppResult);
        [id(8), helpstring("method GetEntries")] HRESULT GetEntries([out, retval] IGPMMapEntryCollection **ppEntries);
    };

//////////////////////////////////////////////////////////////////
// Template support
//////////////////////////////////////////////////////////////////

typedef enum {
    typeGPO = 0,
    typeStarterGPO
} GPMBackupType;

typedef enum {
        typeSystem = 0,
        typeCustom
} GPMStarterGPOType;


    [
        object,
        uuid(F8DC55ED-3BA0-4864-AAD4-D365189EE1D5),
        dual,
        helpstring("IGPMBackupDirEx"),
        pointer_default(unique)
    ]
    interface IGPMBackupDirEx : IDispatch
    {
        [propget, id(1), helpstring("property BackupDirectory")] HRESULT BackupDir([out, retval] BSTR *pbstrBackupDir);
        [propget, id(2), helpstring("property BackupType")] HRESULT BackupType([out, retval] GPMBackupType *pgpmBackupType);

        [id(3), helpstring("method GetBackup")] HRESULT GetBackup([in] BSTR bstrID, [out, retval] VARIANT *pvarBackup);
        [id(4), helpstring("method SearchBackups")] HRESULT SearchBackups([in] IGPMSearchCriteria *pIGPMSearchCriteria, [out, retval] VARIANT *pvarBackupCollection);
    };
    [
        object,
        uuid(C998031D-ADD0-4bb5-8DEA-298505D8423B),
        dual,
        helpstring("IGPMStarterGPOBackupCollection Interface"),
        pointer_default(unique)
    ]
    interface IGPMStarterGPOBackupCollection : IDispatch
    {
        [propget, id(1), helpstring("property Count")] HRESULT Count([out, retval] long *pVal);
        [propget, id(DISPID_VALUE), helpstring("property Item")] HRESULT Item(long lIndex, [out, retval] VARIANT *pVal);
        [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IEnumVARIANT* *ppIGPMTmplBackup);
    };

    [
        object,
        uuid(51D98EDA-A87E-43dd-B80A-0B66EF1938D6),
        dual,
        helpstring("IGPMStarterGPOBackup Interface"),
        pointer_default(unique)
    ]
    interface IGPMStarterGPOBackup : IDispatch
    {
        [propget, id(1), helpstring("property BackupDir")] HRESULT BackupDir([out, retval] BSTR *pbstrBackupDir);
        [propget, id(2), helpstring("property Comment")] HRESULT Comment([out, retval] BSTR *pbstrComment);
        [propget, id(3), helpstring("property DisplayName")] HRESULT DisplayName([out, retval] BSTR *pbstrDisplayName);
        [propget, id(4), helpstring("property Domain")] HRESULT Domain([out, retval] BSTR *pbstrTemplateDomain);
        [propget, id(5), helpstring("property StarterGPOID")] HRESULT StarterGPOID([out, retval] BSTR *pbstrTemplateID);
        [propget, id(6), helpstring("property ID")] HRESULT ID([out, retval] BSTR *pbstrID);
        [propget, id(7), helpstring("property Timestamp")] HRESULT Timestamp([out, retval] DATE *pTimestamp);
        [propget, id(8), helpstring("property Type")] HRESULT Type([out, retval]GPMStarterGPOType *pType);
        [id(9), helpstring("method Delete")] HRESULT Delete(void);
        [id(10), helpstring("method GenerateReport")] HRESULT GenerateReport([in] GPMReportType gpmReportType, [in, optional] VARIANT *pvarGPMProgress, [out, optional] VARIANT *pvarGPMCancel, [out, retval] IGPMResult **ppIGPMResult);
        [id(11), helpstring("method GenerateReportToFile")] HRESULT GenerateReportToFile([in] GPMReportType gpmReportType, [in] BSTR bstrTargetFilePath, [out, retval] IGPMResult **ppIGPMResult);
    };

    [
        object,
        uuid(00238F8A-3D86-41ac-8F5E-06A6638A634A),
        dual,
        helpstring("IGPM2 Interface"),
        pointer_default(unique)
    ]
    interface IGPM2 : IGPM
    {
        [id(13), helpstring("method GetBackupDirEx")] HRESULT GetBackupDirEx([in] BSTR bstrBackupDir, [in] GPMBackupType backupDirType, [out, retval] IGPMBackupDirEx **ppIGPMBackupDirEx);
        [id(14), helpstring("method InitializeReportingEx")] HRESULT InitializeReportingEx([in] BSTR bstrAdmPath, [in] LONG reportingOptions);
    };

    [
        object,
        uuid(DFC3F61B-8880-4490-9337-D29C7BA8C2F0),
        dual,
        helpstring("IGPMStarterGPO Interface"),
        pointer_default(unique)
    ]
    interface IGPMStarterGPO : IDispatch
    {
        [propget, id(1), helpstring("property DisplayName")] HRESULT DisplayName([out, retval] BSTR *pVal);
        [propput, id(1), helpstring("property DisplayName")] HRESULT DisplayName([in] BSTR newVal);
        [propget, id(2), helpstring("property Description")] HRESULT Description([out, retval] BSTR *pVal);
        [propput, id(2), helpstring("property Description")] HRESULT Description([in] BSTR newVal);
        [propget, id(3), helpstring("property Author")] HRESULT Author([out, retval] BSTR *pVal);
        [propget, id(4), helpstring("property Product")] HRESULT Product([out, retval] BSTR *pVal);
        [propget, id(5), helpstring("property CreationTime")] HRESULT CreationTime([out, retval] DATE *pVal);
        [propget, id(6), helpstring("property ID")] HRESULT ID([out, retval] BSTR *pVal);
        [propget, id(7), helpstring("property ModifiedTime")] HRESULT ModifiedTime([out, retval] DATE *pVal);
        [propget, id(8), helpstring("property Type")] HRESULT Type([out, retval] GPMStarterGPOType *pVal);
        [propget, id(9), helpstring("property ComputerVersion")] HRESULT ComputerVersion([out, retval] USHORT *pVal);
        [propget, id(10), helpstring("property UserVersion")] HRESULT UserVersion([out, retval] USHORT *pVal);
        [propget, id(11), helpstring("property StarterGPOVersion")] HRESULT StarterGPOVersion([out, retval] BSTR *pVal);		

        [id(12), helpstring("method Delete")] HRESULT Delete();
        [id(13), helpstring("method Save")] HRESULT Save(	
                            [in] BSTR bstrSaveFile, 
                            [in] VARIANT_BOOL bOverwrite,
                            [in] VARIANT_BOOL bSaveAsSystem,
                            [in, optional] VARIANT* bstrLanguage,
                            [in, optional] VARIANT* bstrAuthor,
                            [in, optional] VARIANT* bstrProduct,
                            [in, optional] VARIANT* bstrUniqueID,
                            [in, optional] VARIANT* bstrVersion,
                            [in, optional] VARIANT* pvarGPMProgress,
                            [out, optional] VARIANT* pvarGPMCancel,
                            [out, retval] IGPMResult** ppIGPMResult );

        [id(14), helpstring("method Backup")] HRESULT Backup(	
                            [in] BSTR bstrBackupDir,
                            [in] BSTR bstrComment,
                            [in, optional] VARIANT* pvarGPMProgress,
                            [out, optional] VARIANT* pvarGPMCancel,
                            [out, retval] IGPMResult** ppIGPMResult); 

        [id(15), helpstring("method CopyTo")] HRESULT CopyTo(	
                            [in, optional] VARIANT* pvarNewDisplayName,
                            [in, optional] VARIANT* pvarGPMProgress,
                            [in, optional] VARIANT* pvarGPMCancel,

                            [out, retval] IGPMResult** ppIGPMResult);

        [id(16), helpstring("method GenerateReport")] HRESULT GenerateReport(	
                            [in] GPMReportType gpmReportType,
                            [in, optional] VARIANT* pvarGPMProgress,
                            [in, optional] VARIANT* pvarGPMCancel,
                            [out, retval] IGPMResult** ppIGPMResult);

        [id(17), helpstring("method GenerateReportToFile")] HRESULT GenerateReportToFile(	
                            [in] GPMReportType gpmReportType,
                            [in] BSTR          bstrTargetFilePath,
                                        [out, retval] IGPMResult **ppIGPMResult);

        [id(18), helpstring("method GetSecurityInfo")] HRESULT GetSecurityInfo([out, retval] IGPMSecurityInfo **ppSecurityInfo);
        [id(19), helpstring("method SetSecurityInfo")] HRESULT SetSecurityInfo([in] IGPMSecurityInfo *pSecurityInfo);

    };

   [
      object,
      uuid(2E522729-2219-44ad-933A-64DFD650C423),
      dual,
      helpstring("IGPMStarterGPOCollection Interface"),
      pointer_default(unique)
   ]
   interface IGPMStarterGPOCollection : IDispatch
   {
      [propget, id(1), helpstring("property Count")] HRESULT Count([out, retval] long *pVal);
      [propget, id(DISPID_VALUE), helpstring("property Item")] HRESULT Item(long lIndex, [out, retval] VARIANT *pVal);
      [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IEnumVARIANT* *ppIGPMTemplates);
   };

   [
      object,
      uuid(7CA6BB8B-F1EB-490a-938D-3C4E51C768E6),
      dual,
      helpstring("IGPMDomain2 Interface"),
      pointer_default(unique)
   ]
   interface IGPMDomain2 : IGPMDomain
   {
      [id(12), helpstring("method CreateStarterGPO")] HRESULT CreateStarterGPO([out, retval] IGPMStarterGPO **ppnewTemplate);
      [id(13), helpstring("method CreateGPOFromStarterGPO")] HRESULT CreateGPOFromStarterGPO([in] IGPMStarterGPO *pGPOTemplate, [out, retval] IGPMGPO **ppnewGPO);
      [id(14), helpstring("method GetStarterGPO")] HRESULT GetStarterGPO([in] BSTR bstrGuid, [out, retval] IGPMStarterGPO **ppTemplate);
      [id(15), helpstring("method SearchStarterGPOs")] HRESULT SearchStarterGPOs([in] IGPMSearchCriteria *pIGPMSearchCriteria, [out, retval] IGPMStarterGPOCollection **ppIGPMTemplateCollection);
      [id(16), helpstring("method LoadStarterGPO")] HRESULT LoadStarterGPO(
                            [in] BSTR bstrLoadFile,
                            [in] VARIANT_BOOL bOverwrite,
                            [in, optional]  VARIANT *pvarGPMProgress,
                               [out, optional]  VARIANT *pvarGPMCancel,
                                [out, retval] IGPMResult **ppIGPMResult);      
    [id(17),  helpstring("method RestoreStarterGPO")] HRESULT RestoreStarterGPO(
                        [in] IGPMStarterGPOBackup *pIGPMTmplBackup,
                        /* MM032206 - This parameter makes no sense here, since templates do
                             not support SI settings
                        [in] long lDCFlags,*/
                        [in, optional]  VARIANT     *pvarGPMProgress,
                        [out, optional]  VARIANT     *pvarGPMCancel,
                        [out, retval] IGPMResult **ppIGPMResult);
    };

    [
        object,
        uuid(05AE21B0-AC09-4032-A26F-9E7DA786DC19),
        dual,
        helpstring("IGPMConstants2 Interface"),
        pointer_default(unique)
    ]
    interface IGPMConstants2 : IGPMConstants
    {
        [propget, id(61), helpstring("property BackupTypeGPO")] HRESULT BackupTypeGPO([out, retval] GPMBackupType *pVal);
        [propget, id(62), helpstring("property BackupTypeStarterGPO")] HRESULT BackupTypeStarterGPO([out, retval] GPMBackupType *pVal);
        [propget, id(63), helpstring("property StarterGPOTypeSystem")] HRESULT StarterGPOTypeSystem([out, retval] GPMStarterGPOType*pVal);
        [propget, id(64), helpstring("property StarterGPOTypeCustom")] HRESULT StarterGPOTypeCustom([out, retval] GPMStarterGPOType *pVal);
        [propget, id(65), helpstring("property SearchPropertyStarterGPOPermissions")] HRESULT SearchPropertyStarterGPOPermissions([out, retval] GPMSearchProperty *pVal);
        [propget, id(66), helpstring("property SearchPropertyStarterGPOEffectivePermissions")] HRESULT SearchPropertyStarterGPOEffectivePermissions([out, retval] GPMSearchProperty *pVal);
        [propget, id(67), helpstring("property SearchPropertyStarterGPODisplayName")] HRESULT SearchPropertyStarterGPODisplayName([out, retval] GPMSearchProperty *pVal);
        [propget, id(69), helpstring("property SearchPropertyStarterGPOID")] HRESULT SearchPropertyStarterGPOID([out, retval] GPMSearchProperty *pVal);
        [propget, id(70), helpstring("property SearchPropertyStarterGPODomain")] HRESULT SearchPropertyStarterGPODomain([out, retval] GPMSearchProperty *pVal);
        [propget, id(71), helpstring("property PermStarterGPORead")] HRESULT PermStarterGPORead([out, retval] GPMPermissionType *pVal);
        [propget, id(72), helpstring("property PermStarterGPOEdit")] HRESULT PermStarterGPOEdit([out, retval] GPMPermissionType *pVal);
        [propget, id(73), helpstring("property PermStarterGPOFullControl")] HRESULT PermStarterGPOFullControl([out, retval] GPMPermissionType *pVal);
        [propget, id(74), helpstring("property PermStarterGPOCustom")] HRESULT PermStarterGPOCustom([out, retval] GPMPermissionType *pVal);
        [propget, id(75), helpstring("property ReportLegacy")] HRESULT ReportLegacy([out, retval] GPMReportingOptions *pVal);
        [propget, id(76), helpstring("property ReportComments")] HRESULT ReportComments([out, retval] GPMReportingOptions *pVal);
    };

    [
        object,
        uuid(8A66A210-B78B-4d99-88E2-C306A817C925),
        dual,
        helpstring("IGPMGPO2 Interface"),
        pointer_default(unique)
    ]
    interface IGPMGPO2 : IGPMGPO
    {
        [propget, id(30), helpstring("property Description")] HRESULT Description([out, retval] BSTR *pVal);
        [propput, id(30), helpstring("property Description")] HRESULT Description([in] BSTR newVal);
    };

    [
        object,
        uuid(0077FDFE-88C7-4acf-A11D-D10A7C310A03),
        dual,
        helpstring("IGPMDomain3 Interface"),
        pointer_default(unique)
    ]
    interface IGPMDomain3 : IGPMDomain2
    {
        [id(18), helpstring("method GenerateReport")] HRESULT GenerateReport(
                         [in] GPMReportType gpmReportType, 
                         [in, optional]  VARIANT  *pvarGPMProgress, 
                         [out,optional]  VARIANT  *pvarGPMCancel,
                         [out,retval] IGPMResult **ppIGPMResult);
        [propget, id(19), helpstring("property InfrastructureDC")] HRESULT InfrastructureDC([out, retval] BSTR *pVal);
        [propput, id(19), helpstring("property InfrastructureDC")] HRESULT InfrastructureDC([in] BSTR newVal);
        [propput, id(20), helpstring("property InfrastructureFlags")] HRESULT InfrastructureFlags([in] DWORD dwFlags);
    };

    [
        object,
        uuid(7CF123A1-F94A-4112-BFAE-6AA1DB9CB248),
        dual,
        helpstring("IGPMGPO3 Interface"),
        pointer_default(unique)
    ]
    interface IGPMGPO3 : IGPMGPO2
    {
        [propget, id(31), helpstring("property InfrastructureDC")] HRESULT InfrastructureDC([out, retval] BSTR *pVal);
        [propput, id(31), helpstring("property InfrastructureDC")] HRESULT InfrastructureDC([in] BSTR newVal);
        [propput, id(32), helpstring("property InfrastructureFlags")] HRESULT InfrastructureFlags([in] DWORD dwFlags);
    };

[
   uuid(C2F48CC2-305B-4672-BAA7-76A57738F48A),
   version(1.0),
   helpstring("gpmgmt 1.0 Type Library")
]
library GPMGMTLib
{
   importlib("stdole32.tlb");
   importlib("stdole2.tlb");

   [
      uuid(F5694708-88FE-4B35-BABF-E56162D5FBC8),
      helpstring("GPM Class")
   ]
   coclass GPM
   {
      [default] interface IGPM2;
   };
   
   [
      uuid(710901BE-1050-4CB1-838A-C5CFF259E183),
      helpstring("GPMDomain Class")
   ]
   coclass GPMDomain
   {
      [default] interface IGPMDomain3;
   };

   [
      uuid(229F5C42-852C-4B30-945F-C522BE9BD386),
      helpstring("GPMSitesContainer Class")
   ]
   coclass GPMSitesContainer
   {
      [default] interface IGPMSitesContainer;
   };

   [
      uuid(FCE4A59D-0F21-4AFA-B859-E6D0C62CD10C),
      helpstring("GPMBackupDir Class")
   ]
   coclass GPMBackupDir
   {
      [default] interface IGPMBackupDir;
   };

   [
      uuid(32D93FAC-450E-44CF-829C-8B22FF6BDAE1),
      helpstring("GPMSOM Class")
   ]
   coclass GPMSOM
   {
      [default] interface IGPMSOM;
   };
   
   [
      uuid(17AACA26-5CE0-44FA-8CC0-5259E6483566),
      helpstring("GPMSearchCriteria Class")
   ]
   coclass GPMSearchCriteria
   {
      [default] interface IGPMSearchCriteria;
   };
   
   [
      uuid(5871A40A-E9C0-46EC-913E-944EF9225A94),
      helpstring("GPMPermission Class")
   ]
   coclass GPMPermission
   {
      [default] interface IGPMPermission;
   };
   
   [
      uuid(547A5E8F-9162-4516-A4DF-9DDB9686D846),
      helpstring("GPMSecurityInfo Class")
   ]
   coclass GPMSecurityInfo
   {
      [default] interface IGPMSecurityInfo;
   };
   
   [
      uuid(ED1A54B8-5EFA-482A-93C0-8AD86F0D68C3),
      helpstring("GPMBackup Class")
   ]
   coclass GPMBackup
   {
      [default] interface IGPMBackup;
   };
   
   [
      uuid(EB8F035B-70DB-4A9F-9676-37C25994E9DC),
      helpstring("GPMBackupCollection Class")
   ]
   coclass GPMBackupCollection
   {
      [default] interface IGPMBackupCollection;
   };
   
   [
      uuid(24C1F147-3720-4F5B-A9C3-06B4E4F931D2),
      helpstring("GPMSOMCollection Class")
   ]
   coclass GPMSOMCollection
   {
      [default] interface IGPMSOMCollection;
   };
   
   [
      uuid(626745D8-0DEA-4062-BF60-CFC5B1CA1286),
      helpstring("GPMWMIFilter Class")
   ]
   coclass GPMWMIFilter
   {
      [default] interface IGPMWMIFilter;
   };
   
   [
      uuid(74DC6D28-E820-47D6-A0B8-F08D93D7FA33),
      helpstring("GPMWMIFilterCollection Class")
   ]
   coclass GPMWMIFilterCollection
   {
      [default] interface IGPMWMIFilterCollection;
   };
   
   [
      uuid(489B0CAF-9EC2-4EB7-91F5-B6F71D43DA8C),
      helpstring("GPMRSOP Class")
   ]
   coclass GPMRSOP
   {
      [default] interface IGPMRSOP;
   };
   
   [
      uuid(D2CE2994-59B5-4064-B581-4D68486A16C4),
      helpstring("GPMGPO Class")
   ]
   coclass GPMGPO
   {
      [default] interface IGPMGPO3;
   };
   
   [
      uuid(7A057325-832D-4DE3-A41F-C780436A4E09),
      helpstring("GPMGPOCollection Class")
   ]
   coclass GPMGPOCollection
   {
      [default] interface IGPMGPOCollection;
   };
   
   [
      uuid(C1DF9880-5303-42C6-8A3C-0488E1BF7364),
      helpstring("GPMGPOLink Class")                                                               
   ]
   coclass GPMGPOLink
   {
      [default] interface IGPMGPOLink;
   };
   
   [
      uuid(F6ED581A-49A5-47E2-B771-FD8DC02B6259),
      helpstring("GPMGPOLinksCollection Class")
   ]
   coclass GPMGPOLinksCollection
   {
      [default] interface IGPMGPOLinksCollection;
   };

   [
      uuid(372796A9-76EC-479D-AD6C-556318ED5F9D),
      helpstring("GPMAsyncCancel Class")
   ]
   coclass GPMAsyncCancel
   {
      [default] interface IGPMAsyncCancel;
   };

   [
      uuid(2824E4BE-4BCC-4CAC-9E60-0E3ED7F12496),
      helpstring("GPMStatusMsgCollection Class")
   ]
   coclass GPMStatusMsgCollection
   {
      [default] interface IGPMStatusMsgCollection;
   };

   [
      uuid(4B77CC94-D255-409B-BC62-370881715A19),
      helpstring("GPMStatusMessage Class")
   ]
   coclass GPMStatusMessage
   {
      [default] interface IGPMStatusMessage;
   };

/****
   Commenting it out to remove dependency on stdole.dll
   Bug 1458451 [Windows OS Bugs]
   [
      uuid(36ED64E5-7266-4545-8E14-1645EEBA2A90),
      helpstring("GPMEnum Class")
   ]
   coclass GPMEnum
   {
      [default] interface IEnumVARIANT;
   };
****/   
   [
      uuid(C54A700D-19B6-4211-BCB0-E8E2475E471E),
      helpstring("GPMTrustee Class")
   ]
   coclass GPMTrustee
   {
      [default] interface IGPMTrustee;
   };

   [
      uuid(C1A2E70E-659C-4B1A-940B-F88B0AF9C8A4),
      helpstring("GPMClientSideExtension Class")
   ]
   coclass GPMClientSideExtension
   {
      [default] interface IGPMClientSideExtension;
   };

   [
      uuid(CF92B828-2D44-4B61-B10A-B327AFD42DA8),
      helpstring("GPMCSECollection Class")
   ]
   coclass GPMCSECollection
   {
      [default] interface IGPMCSECollection;
   };

   [
        uuid(3855E880-CD9E-4D0C-9EAF-1579283A1888),
        helpstring("GPMConstants Class")
   ]
   coclass GPMConstants
   {
        [default] interface IGPMConstants2;
   };

   [
        uuid(92101AC0-9287-4206-A3B2-4BDB73D225F6),
        helpstring("GPMResult Class")
   ]
   coclass GPMResult
   {
        [default] interface IGPMResult;
   };

   [
        uuid(0CF75D5B-A3A1-4C55-B4FE-9E149C41F66D),
        helpstring("GPMMapEntryCollection Class")
   ]
   coclass GPMMapEntryCollection
   {
        [default] interface IGPMMapEntryCollection;
   };

   [
        uuid(8C975253-5431-4471-B35D-0626C928258A),
        helpstring("GPMMapEntry Class")
   ]
   coclass GPMMapEntry
   {
        [default] interface IGPMMapEntry;
   };

   [
        uuid(55AF4043-2A06-4F72-ABEF-631B44079C76),
        helpstring("GPMMigrationTable Class")
   ]
   coclass GPMMigrationTable
   {
        [default] interface IGPMMigrationTable;
   };

   [
       uuid(E8C0988A-CF03-4c5b-8BE2-2AA9AD32AADA),
       helpstring("GPMBackupDirEx Class")
   ]
   coclass GPMBackupDirEx
   {
       [default] interface IGPMBackupDirEx;
   };

   [
       uuid(E75EA59D-1AEB-4cb5-A78A-281DAA582406),
       helpstring("GPMTemplateBackupCollection Class")
   ]
   coclass GPMStarterGPOBackupCollection
   {
       [default] interface IGPMStarterGPOBackupCollection;
   };

   [
       uuid(389E400A-D8EF-455b-A861-5F9CA34A6A02),
       helpstring("GPMTemplateBackup Class")
   ]
   coclass GPMStarterGPOBackup
   {
       [default] interface IGPMStarterGPOBackup;
   };

   [
        uuid(ECF1D454-71DA-4e2f-A8C0-8185465911D9),
        helpstring("GPMTemplate Class")
   ]
   coclass GPMTemplate
   {
        [default] interface IGPMStarterGPO;
   };

   [
        uuid(82F8AA8B-49BA-43b2-956E-3397F9B94C3A),
        helpstring("GPMTemplate Class")
   ]
   coclass GPMStarterGPOCollection
   {
        [default] interface IGPMStarterGPOCollection;
   };
};

cpp_quote("#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */")
#pragma endregion

