// Copyright (c) 1997-2003 Microsoft Corporation, All Rights Reserved

#pragma autorecover
#pragma namespace("\\\\.\\root")

Instance of __Namespace
{
  Name = "directory";
};
#pragma namespace("\\\\.\\root\\directory")

Instance of __Namespace
{
  Name = "LDAP";
};
#pragma namespace("\\\\.\\root\\directory\\LDAP")

class Uint8Array
{
  [Read] uint8 value[];
};

class DN_With_String
{
  [Read] string dnString;
  [Read] string value;
};

class DN_With_Binary
{
  [Read] string dnString;
  [Read] uint8 value[];
};

[singleton,dynamic,provider("Microsoft|DSLDAPInstanceProvider|V1.0")] 
class RootDSE
{
  [Read] string subschemaSubentry;
  [Read] string currentTime;
  [Read] string serverName;
  [Read] string namingContexts[];
  [Read] string defaultNamingContext;
  [Read] string schemaNamingContext;
  [Read] string configurationNamingContext;
  [Read] string rootDomainNamingContext;
  [Read] string supportedControl[];
  [Read] string supportedLDAPVersion[];
  [Read] string dnsHostName;
  [Read] string dsServiceName;
  [Read] string highestCommittedUSN;
  [Read] string LDAPServiceName;
  [Read] string supportedCapabilities;
  [Read] string supportedLDAPPolicies[];
  [Read] string supportedSASLMechanisms[];
};

[Abstract] 
class DS_LDAP_Root_Class
{
  [Read,KEY] string ADSIPath;
};

Instance of __Win32Provider as $ClassProvider
{
  Name = "Microsoft|DSLDAPClassProvider|V1.0";
  Clsid = "{1EF94880-01A8-11d2-A90B-00AA00BF3363}";
  ImpersonationLevel = 1;
  PerUserInitialization = TRUE;
  HostingModel = "NetworkServiceHost";
};

Instance of __ClassProviderRegistration
{
  Provider = $ClassProvider;
  SupportsGet = TRUE;
  SupportsPut = FALSE;
  SupportsDelete = FALSE;
  SupportsEnumeration = TRUE;
  ResultSetQueries = {"Select * From meta_class Where __this isa \"DS_LDAP_Root_Class\""};
  UnsupportedQueries = {"Select * From meta_class Where __Class = \"DS_LDAP_Root_Class\""};
};

[Association : ToInstance,dynamic,HasClassRefs,provider("Microsoft|DSLDAPClassAssociationsProvider|V1.0")] 
class DS_LDAP_Class_Containment
{
  [Read,key,classref{"DS_LDAP_Root_Class"} : ToInstance ToSubclass] object Ref ChildClass;
  [Read,key,classref{"DS_LDAP_Root_Class"} : ToInstance ToSubclass] object Ref ParentClass;
};

Instance of __Win32Provider as $AssociationsProvider
{
  Name = "Microsoft|DSLDAPClassAssociationsProvider|V1.0";
  Clsid = "{33831ED4-42B8-11d2-93AD-00805F853771}";
  ImpersonationLevel = 1;
  HostingModel = "NetworkServiceHost";
};

Instance of __InstanceProviderRegistration
{
  Provider = $AssociationsProvider;
  SupportsGet = TRUE;
  SupportsPut = FALSE;
  SupportsDelete = FALSE;
  SupportsEnumeration = TRUE;
};

[Association : ToInstance,dynamic,provider("Microsoft|DSLDAPInstanceProvider|V1.0")] 
class DS_LDAP_Instance_Containment
{
  [Read,KEY] DS_LDAP_Root_Class Ref ChildInstance;
  [Read,KEY] DS_LDAP_Root_Class Ref ParentInstance;
};

Instance of __Win32Provider as $InstanceProvider
{
  Name = "Microsoft|DSLDAPInstanceProvider|V1.0";
  Clsid = "{AA527A40-4D9A-11d2-93AD-00805F853771}";
  PerUserInitialization = TRUE;
  ImpersonationLevel = 1;
  HostingModel = "NetworkServiceHost";
};

Instance of __InstanceProviderRegistration
{
  Provider = $InstanceProvider;
  SupportsGet = TRUE;
  SupportsPut = TRUE;
  SupportsDelete = TRUE;
  SupportsEnumeration = TRUE;
  QuerySupportLevels = {"WQL:UnarySelect"};
};

class DN_Class
{
  [Read,KEY] string DN;
};

[Association : ToInstance] 
class DSClass_To_DNInstance
{
  [Read,KEY,classref("DS_LDAP_Root_Class") : ToInstance ToSubclass] string DSClass;
  [Read,KEY] DN_Class Ref RootDNForSearchAndQuery;
};
#pragma autorecover
#pragma namespace("\\\\.\\root\\directory\\LDAP")
instance of __namespace{ name="ms_409";};
#pragma namespace("\\\\.\\root\\directory\\LDAP\\ms_409")

[Description("This is the class used to model the AD Syntax Octet String") : Amended,AMENDMENT, LOCALE("ms_409")] 
class Uint8Array
{
  [Description("This is array of uint8 values that for the Octet String") : Amended] uint8 value[];
};

[Description("This is the class used to model the AD Syntax DN_With_String") : Amended,AMENDMENT, LOCALE("ms_409")] 
class DN_With_String
{
  [Description("This is the DN string component of the tuple") : Amended] string dnString;
  [Description("This is the Value component of the tuple") : Amended] string value;
};

[Description("This is the class used to model the AD Syntax DN_With_Binary") : Amended,AMENDMENT, LOCALE("ms_409")] 
class DN_With_Binary
{
  [Description("This is the DN string component of the tuple") : Amended] string dnString;
  [Description("This is the Value component of the tuple") : Amended] uint8 value[];
};

[Description("This is the class used to model the LDAP RootDSE object") : Amended,AMENDMENT, LOCALE("ms_409")] 
class RootDSE
{
  [Description("Distinguished name for the subSchema object. The subschemaSubentry property and subschema are defined in LDAP 3.0 (see RFC 2251).") : Amended] string subschemaSubentry;
  [Description("Current time set on this directory server") : Amended] string currentTime;
  [Description("Distinguished name for the server object for this directory server in the configuration container") : Amended] string serverName;
  [Description("DISTINGUISHED NAMEs for all naming contexts stored on this directory server. By default, a Windows 2000 domain controller contains at least three namespaces: Schema, Configuration, and one for the domain of which the server is a member") : Amended] string namingContexts[];
  [Description("The distinguished name for the domain of which this directory server is a member") : Amended] string defaultNamingContext;
  [Description("Distinguished name for the schema container") : Amended] string schemaNamingContext;
  [Description("Distinguished name for the configuration container") : Amended] string configurationNamingContext;
  [Description("Distinguished name for the first domain in the forest that contains the domain of which this directory server is a member") : Amended] string rootDomainNamingContext;
  [Description("OIDs for extension controls supported by this directory server") : Amended] string supportedControl[];
  [Description("LDAP versions (specified by major version number) supported by this directory server") : Amended] string supportedLDAPVersion[];
  [Description("DNS address for this directory server") : Amended] string dnsHostName;
  [Description("The distinguished name of the NTDS settings object for this directory server") : Amended] string dsServiceName;
  [Description("Highest USN used on this directory server. Used by directory replication") : Amended] string highestCommittedUSN;
  [Description("Service Principal Name (SPN) for the LDAP server. Used for mutual authentication") : Amended] string LDAPServiceName;
  [Description("The OBJECT IDENTIFIERs (OIDs) identifying the supported capabilities of the server") : Amended] string supportedCapabilities;
  [Description("Supported LDAP management policies.") : Amended] string supportedLDAPPolicies[];
  [Description("Security mechanisms supported for SASL negotiation (see LDAP RFCs). By default, GSSAPI is supported") : Amended] string supportedSASLMechanisms[];
};

[Description("This acts as the base class of all the classes provides by the DS Provider") : Amended,AMENDMENT, LOCALE("ms_409")] 
class DS_LDAP_Root_Class
{
  [KEY,Description("This is the key for any DS Object") : Amended] string ADSIPath;
};

[Description("This class models the possible superiors of a DS class") : Amended,AMENDMENT, LOCALE("ms_409")] 
class DS_LDAP_Class_Containment
{
  [key,Description("The child DS Class") : Amended] object Ref ChildClass;
  [key,Description("The parent DS Class") : Amended] object Ref ParentClass;
};

[Description("This class models the parent-child container relationship of instances in the DS") : Amended,AMENDMENT, LOCALE("ms_409")] 
class DS_LDAP_Instance_Containment
{
  [KEY,Description("The child DS instance") : Amended] DS_LDAP_Root_Class Ref ChildInstance;
  [KEY,Description("The child DS instance") : Amended] DS_LDAP_Root_Class Ref ParentInstance;
};

[Description("A class to encapsulate a DN") : Amended,AMENDMENT, LOCALE("ms_409")] 
class DN_Class
{
  [KEY,Description("The ADSI Path to the object in the DS") : Amended] string DN;
};

[Description(" Use an instance of this class to allow the client to give a hint to the DS Instance Provider to scope enumerations and queries to a particular sub-tree or a naming context. The client should create instances of this class if it wants the DS Provider to do enumerations and queries of a specific DS class from a specific DS Object as the root") : Amended,AMENDMENT, LOCALE("ms_409")] 
class DSClass_To_DNInstance
{
  [KEY,Description("The Name of the class for which scoping is to be used") : Amended] string DSClass;
  [KEY,Description("The reference to an instance of DN_Class that gives the ADSI path of the object below which the search should be scoped") : Amended] DN_Class Ref RootDNForSearchAndQuery;
};
