Active Directory에는 다양한 가능한 개체가 있으므로 WMI는 직접 일대일 매핑을 만들 수 없습니다. 대신 디렉터리 서비스 공급자는 규칙을 사용하여 두 기술 간의 클래스를 매핑합니다.
이 항목에서는 다음 섹션에 대해 설명합니다.
매핑 클래스
다음 목록에서는 Directory Services 공급자가 Active Directory 클래스를 WMI 클래스에 매핑하는 데 사용하는 지침을 설명합니다.
Active Directory 스키마의 각 추상 클래스는 WMI 스키마의 하나의 추상 클래스에 매핑됩니다.
WMI 스키마에서 각 추상 클래스는 'DS_'라는 접두사가 붙습니다. 예를 들어 Active Directory 스키마의 person 클래스는 DS_person WMI 클래스에 매핑됩니다.
Active Directory 스키마의 각 nonabstract 클래스는 WMI 스키마의 다음 두 클래스에 매핑됩니다.
- 매핑된 첫 클래스에는 ADS_가 접두사로 붙습니다. 이러한 클래스는 아래 규칙에 따라 매핑되는 추상 클래스입니다.
- 매핑된 두 번째 클래스는 DS_ 이름 접두사를 사용하는 nonabstract 클래스입니다. 이 클래스는 ADS_ 추상 클래스에서 파생되며 Provider 한정자가 추가됩니다.
예를 들어 active Directory 스키마의 사용자 클래스는 두 클래스에 매핑됩니다. 첫 번째 클래스는 아래 규칙에 따라 매핑되는 ADS_user 추상 클래스입니다. 두 번째 클래스는 DS_user nonabstract 클래스입니다. ADS_user에서 파생되어 추가된 공급자 한정자를 포함합니다.
달리 지정하지 않는 한 매핑된 클래스의 이름은 Active Directory 클래스에서 LDAP-Display-Name 속성의 잘못된 값입니다.
Sub-Class-Of 속성이 Active Directory 클래스에 있는 경우 WMI 매핑 클래스는 지정된 클래스에서 파생됩니다.
Sub-Class-Of 속성이 없으면 WMI 매핑 클래스는 MOF 파일에 지정된 대로 DS_LDAP_Root_Class 클래스에서 파생됩니다.
메모
이 클래스에는 ADSIPath 키 속성이 있으며, 형식은 VT_BSTR입니다. 이 인스턴스를 식별하는 고유한 ADSI 경로입니다. Active Directory는 단일 상속만 지원하므로 작동합니다.
VT_BOOL형식의 동적 한정자와
WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE | WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS의 특성이 TRUE로 설정된 것이 모든 클래스에 대해 생성됩니다. 이 클래스의 인스턴스가 동적으로 제공됨을 나타내는 표준 WMI 한정자입니다.클래스가 추상이 아니면, 공급자는 모든 클래스에 대해 형식이 VT_BSTR BOOL이고 한정자 버전
WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE | WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS이 "DS 인스턴스 공급자"로 설정된 공급자 한정자를 만듭니다. 이 클래스의 인스턴스를 동적으로 제공하는 공급자의 이름을 나타내는 표준 WMI 한정자입니다.
ADSI 속성의 나머지 내용은 다음 표에 따라 클래스 한정자 및 속성에 매핑됩니다. 모든 한정자는 한정자 플래그 값이 WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE | WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS매핑됩니다.
다음은 각 Active Directory 속성에 대한 WMI 한정자 및 WMI 한정자 형식을 보여 주는 Active Directory 클래스에 대한 매핑 정보를 나열합니다.
-
일반 이름
-
CN(VT_BSTR)
문자열 값에서 직접 매핑됩니다.
-
기본-개체-범주
-
DefaultObjectCategory(VT_BSTR)
문자열 값에서 직접 매핑됩니다.
-
기본 보안 설명자
-
DefaultSecurityDescriptor(VT_BSTR)
문자열 값에서 직접 매핑됩니다.
-
Governs-Id
-
GovernsId(VT_BSTR)
OID의 문자열 표현에서 매핑됩니다. 예를 들어 "{ 1 3 3 6 }"입니다.
-
개체 클래스
-
N/A
매핑되지 않았습니다.
-
개체 클래스 범주
-
ObjectClassCategory(VT_I4)
정수 값에서 직접 매핑됩니다. 또한 값이 Abstract(2)인 경우에는, "Abstract" 한정자라고 불리는 표준 VT_BOOL CIM 한정자가 추가로 생성됩니다.
-
RDN-ATT-ID
-
RDNATTID(VT_BSTR)
OID 값의 문자열 표현에서 매핑됩니다. 예를 들어 "{ 1 3 3 6 }"입니다. 또한 여기에서 식별된 속성은 표준 인덱싱된 CIM 한정자를 TRUE설정하여 주석으로 추가됩니다.
-
시스템 전용
-
SystemOnly(VT_BOOL)
부울 값에서 직접 매핑됩니다.
다음은 WMI 클래스 속성에 매핑된 Active Directory 클래스 속성을 나열합니다.
-
포함될 수 있음
-
이 목록의 각 속성은 WMI 속성에 매핑됩니다.
-
필수
-
이 목록의 각 속성은 WMI 속성에 매핑됩니다. 표준 Not_Null CIM 한정자는 각각에 대해 만들어집니다.
-
시스템-포함할-수-있음
-
이 목록의 각 속성은 WMI 속성에 매핑됩니다. 또한 각 속성은 System 한정자를 사용하여 주석이 달리고, TRUE로 설정되어 있습니다.
-
시스템-필수-포함해야 합니다
-
이 목록의 각 속성은 WMI 속성에 매핑됩니다. 각 항목에 대해 표준 Not_Null CIM 한정자가 생성됩니다. 또한 각 속성은 System 한정자를 사용하여 TRUE로 설정됩니다.
매핑 속성
Directory Services 공급자는 이 섹션의 규칙에 따라 Active Directory 클래스의 각 특성을 해당 WMI 클래스의 정확히 하나의 속성에 매핑합니다. 일반적으로 디렉터리 서비스 공급자는 WMI 속성의 이름을 Active Directory 특성의 LDAP-Display-Name 값의 엉망 버전으로 지정합니다.
Active Directory 속성 Is-Single-Valued이 FALSE인 경우, 이 WMI 속성은 OR 연산자를 사용하여 CIM_FLAG_ARRAY와 결합됩니다. 각 속성은 VT_BSTR 한정자, ADSyntax을 붙인 태그가 있습니다. 기본 Active Directory 구문을 나타냅니다.
다음 표에서는 Active Directory 구문을 WMI 속성 데이터 형식에 매핑하는 방법을 나열합니다.
| Active Directory 요소 | WMI 데이터 형식 |
|---|---|
| 액세스 지점 | CIM_STRING |
| 불리언 | CIM_BOOLEAN |
| 대/소문자를 구분하지 않는 문자열 | CIM_STRING |
| 대/소문자 구분 문자열 | CIM_STRING |
| 식별 이름 | CIM_STRING |
| DN-Binary | 아래에 정의된 클래스 DN_With_Binary의 포함된 개체입니다. |
| DN 문자열 | 아래에 정의된 클래스 DN_With_String 포함된 개체입니다. |
| 열거형 | CIM_SINT32 |
| 열거형 | CIM_STRING |
| 정수 | CIM_SINT32 |
| LargeInteger | CIM_STRING |
| 보안 설명자 | 아래에 정의된 Uint8Array 클래스인에 내장된 객체입니다. |
| 숫자 문자열 | CIM_STRING |
| 오브젝트 ID | CIM_STRING |
| 옥텟 문자열 | 아래에 정의된 Uint8Array 클래스의 포함 객체입니다. |
| OR 이름 | CIM_STRING |
| Presentation-Address | 아래에 정의된 클래스 의 Uint8Array 객체가 포함되어 있습니다. |
| 출력 대/소문자 문자열 | CIM_STRING |
| 복제본 링크 | 아래에 정의된 Uint8Array 클래스의 포함된 개체입니다. |
| String(Sid) |
클래스의 Uint8Array 포함된 객체가 아래에 정의되어 있습니다. |
| 시간 | CIM_DATETIME |
| UTC 코딩된 시간 | CIM_DATETIME |
| 유니코드 문자열 | CIM_STRING |
uint8 값의 배열을 참조하는 Octet String 구문은 WMI에 매핑할 때 문제가 발생합니다. WMI는 uint8 형식의 속성과 uint8배열을 허용하는 반면, Active Directory는 Octet String 형식의 속성과 Octet String 배열을 허용합니다.
다음 예제에서는 Octet String 형식 속성의 배열을 매핑하는 데 사용되는 Directory Services 공급자 클래스를 보여 줍니다.
Class Uint8Array
{
uint8 values[];
uint32 numberOfValues;
};
WMI는 모든 Octet String Active Directory 속성 값을 Uint8Array포함된 인스턴스에 매핑합니다. 마찬가지로 WMI는 옥텟 문자열 배열을 포함된 Uint8Array 객체의 배열에 매핑합니다.
다음 예제에서는 DN-Binary 및 DN-String DS 속성 값에 WMI에 의해 매핑 되는 클래스를 보여 줍니다.
Class DN_With_String
{
string dnString;
string value;
};
Class DN_With_Binary
{
string dnString;
uint8 value[];
};
다음 표에서는 WMI가 나머지 Active Directory 특성 인터페이스 속성을 WMI 속성 한정자로 매핑하는 방법을 나열합니다.
| Active Directory 특성 속성 이름 | WMI 자격 지정자 | 데이터 형식 | 매핑 정보 |
|---|---|---|---|
| 특성 구문 | 속성 구문 | VT_BSTR | OID의 문자열 표현에서 매핑됩니다. |
| 일반 이름 | CN | VT_BSTR | 문자열 값에서 매핑됩니다. |
| 시스템 전용 | 시스템 | VT_BOOL | 불리언 값에서 매핑되었습니다. |
메모
WMI는 모든 Active Directory 한정자를 WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE | WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS 한정자 버전과 매핑합니다.
연관 클래스
디렉터리 서비스는 기본적으로 개체의 계층적 저장소입니다. 계층 구조에서 비리프 수준에 나타날 수 있는 객체를 "컨테이너"라고 부릅니다. 이 계층 구조는 스키마에서 클래스의 "Poss-Superiors" 및 "System-Poss-Superiors" 속성에 의해 추가로 제어됩니다. 이러한 항목을 함께 사용하여 컨테이너 클래스의 인스턴스 내에 인스턴스를 포함할 수 있는 클래스 집합을 지정합니다.
다음 예제에서는 CIM 연결을 정적 연결 클래스 DS_LDAP_Class_Containment인스턴스로 모델화합니다.
// DS Class Associations Provider
// Create a class of which instances are
// provided by this provider
[
Association : ToInstance,
dynamic,
HasClassRefs,
Provider("Microsoft|DSLDAPClassAssociationProvider|V1.0")
]
class DS_LDAP_Class_Containment
{
[key, classref{"DS_LDAP_Root_Class"} : ToInstance ToSubClass]
object Ref ChildClass;
[key, classref{"DS_LDAP_Root_Class"} : ToInstance ToSubClass]
object Ref ParentClass; // The parent DS Class
};
// Create an instance of the provider class for registration
instance of __Win32Provider as $AssociationsProvider
{
Name = "Microsoft|DSLDAPClassAssociationProvider|V1.0";
Clsid = "{33831ED4-42B8-11d2-93AD-00805F853771}";
ImpersonationLevel = 1;
};
// Specification of the instances and operation
// provided by the provider
instance of __InstanceProviderRegistration
{
Provider = $AssociationsProvider;
SupportsGet = TRUE;
SupportsPut = FALSE;
SupportsDelete = FALSE;
SupportsEnumeration = TRUE;
};
연결 클래스 공급자는 GetObjectAsync 및 CreateClassEnumAsync 메서드를 지원합니다.