#pragma namespace("\\root")

instance of __NAMESPACE
{
    Name = "MicrosoftActiveDirectory";
};

#pragma namespace("MicrosoftActiveDirectory")
// The docs say to declare it as:
//#pragma namespace("\\\\.\\root\\MicrosoftActiveDirectory")
#pragma classflags(64)
#pragma autorecover

/////////////////////////////////////////////////////////////////////
// Declare an instance of the __Win32Provider

Instance of __Win32Provider as $P
{
    Name  = "TrustPrv" ;
    ClsId = "{8065652F-4C29-4908-AAE5-201C891904C5}" ;
    ImpersonationLevel = 1;
    PerUserInitialization = TRUE;
    HostingModel = "NetworkServiceHost"; // comment this out to compile on Win2k
};

instance of __InstanceProviderRegistration
{
    Provider = $P;
    SupportsPut = FALSE;
    SupportsGet = TRUE;
    SupportsDelete = FALSE;
    SupportsEnumeration = TRUE;
};


/////////////////////////////////////////////////////////////////////
//
// Declare a class whose dynamic instances are provided by the 
// TrustPrv provider.

[
	dynamic,
	provider("TrustPrv"),
    description("Instances of this class provide information about the domains that"
                " have trust with the local domain.")
]
class Microsoft_DomainTrustStatus
{
    [key]
    String TrustedDomain;

    [Description ("Pre-Windows 2000 domain name.")]
    String FlatName;

    [Description ("Security Identifier for the domain.")]
    String SID;

    [Description ("Direction of trust: 1 is inbound, 2 is outbound,	"
                  "3 is bi-directional.")]
    uint32 TrustDirection;

    [Description ("Type of trust: 1 is downlevel, 2 is uplevel, 3 is "
                  "non-Windows Kerberos Realm, 4 is DCE.")]
    uint32 TrustType;

    [Description ("Attributes can be a combination of: 1 is non-"
                  "transitive, 2 is uplevel clients only, 40000 is "
                  "tree parent and 80000 is tree root.")]
    uint32 TrustAttributes;

    [Description ("Name of trusted domain's domain controller.")]
    String TrustedDCName;

    [Description ("Error code of trust failure. Zero means no failure.")]
    uint32 TrustStatus;

    [Description ("String description of trust status.")]
    String TrustStatusString;

    Boolean TrustIsOk = FALSE;
};

[
    singleton,
    description("The properties of this class parameterize the operation of"
                " the trust monitor.")
]
class Microsoft_TrustProvider
{
    [Description ("Integer in minutes: if current request for trust enumeration"
                  " within this window, use last listing.")]
    uint32 TrustListLifetime;

    [Description ("Integer in minutes: if current request for status within this"
                  " window, use last results.")]
    uint32 TrustStatusLifetime;

    [Description ("0 don't verify, just enum; 1 do an SC_QUERY; 2 do a PW check"
                  " (if available); 3 do an SC_RESET.")]
    uint32 TrustCheckLevel;

    [Description ("If true, return trusting as well as trusted domains (if different)")]
    Boolean ReturnAll;
};

instance of Microsoft_TrustProvider
{
    TrustListLifetime = 20;

    TrustStatusLifetime = 3;

    TrustCheckLevel = 2;

    ReturnAll = TRUE;
};

[
    singleton,
    dynamic,
    provider("TrustPrv"),
    description("This class provides information about the domain on which this"
                " instance of the trust monitor is running.")
]
class Microsoft_LocalDomainInfo
{
    [description("DNS name of local domain.")]
    String DNSname;

    [description("SAM name of local domain.")]
    String FlatName;

    [description("Security ID of local domain.")]
    String SID;

    [description("Name of enterprise tree root.")]
    String TreeName;

    [description("Name of the DC on whom TrustMon is running.")]
    String DCname;
};
