다음을 통해 공유


ADS_SYSTEMFLAG_ENUM 열거형(iads.h)

ADS_SYSTEMFLAG_ENUM 열거형은 systemFlags 특성에 할당할 수 있는 일부 값을 정의합니다. 열거형의 일부 값은 attributeSchema 개체와 관련이 있습니다. 다른 값은 모든 클래스의 개체에 설정할 수 있습니다.

Syntax

typedef enum __MIDL___MIDL_itf_ads_0001_0017_0001 {
  ADS_SYSTEMFLAG_DISALLOW_DELETE = 0x80000000,
  ADS_SYSTEMFLAG_CONFIG_ALLOW_RENAME = 0x40000000,
  ADS_SYSTEMFLAG_CONFIG_ALLOW_MOVE = 0x20000000,
  ADS_SYSTEMFLAG_CONFIG_ALLOW_LIMITED_MOVE = 0x10000000,
  ADS_SYSTEMFLAG_DOMAIN_DISALLOW_RENAME = 0x8000000,
  ADS_SYSTEMFLAG_DOMAIN_DISALLOW_MOVE = 0x4000000,
  ADS_SYSTEMFLAG_CR_NTDS_NC = 0x1,
  ADS_SYSTEMFLAG_CR_NTDS_DOMAIN = 0x2,
  ADS_SYSTEMFLAG_ATTR_NOT_REPLICATED = 0x1,
  ADS_SYSTEMFLAG_ATTR_IS_CONSTRUCTED = 0x4
} ADS_SYSTEMFLAG_ENUM;

상수

 
ADS_SYSTEMFLAG_DISALLOW_DELETE
값: 0x80000000
삭제할 수 없는 개체를 식별합니다.
ADS_SYSTEMFLAG_CONFIG_ALLOW_RENAME
값: 0x40000000
구성 파티션의 개체에 대해 이 플래그를 설정하면 개체의 이름을 바꿀 수 있습니다. 그렇지 않으면 개체의 이름을 바꿀 수 없습니다. 기본적으로 이 플래그는 구성 파티션에서 만든 새 개체에 대해 설정되지 않으며 개체를 만드는 동안에만 이 플래그를 설정할 수 있습니다.
ADS_SYSTEMFLAG_CONFIG_ALLOW_MOVE
값: 0x20000000
구성 파티션의 개체에 대해 이 플래그를 설정하면 개체를 이동할 수 있습니다. 그렇지 않으면 개체를 이동할 수 없습니다. 기본적으로 이 플래그는 구성 파티션에서 만든 새 개체에 대해 설정되지 않으며 개체를 만드는 동안에만 이 플래그를 설정할 수 있습니다.
ADS_SYSTEMFLAG_CONFIG_ALLOW_LIMITED_MOVE
값: 0x10000000
구성 파티션의 개체에 대해 이 플래그를 설정하면 제한 사항으로 개체를 이동할 수 있습니다. 그렇지 않으면 개체를 이동할 수 없습니다. 기본적으로 이 플래그는 구성 파티션에서 만든 새 개체에 대해 설정되지 않으며 개체를 만드는 동안에만 이 플래그를 설정할 수 있습니다.
ADS_SYSTEMFLAG_DOMAIN_DISALLOW_RENAME
값: 0x8000000
이름을 바꿀 수 없는 도메인 개체를 식별합니다.
ADS_SYSTEMFLAG_DOMAIN_DISALLOW_MOVE
값: 0x4000000
이동할 수 없는 도메인 개체를 식별합니다.
ADS_SYSTEMFLAG_CR_NTDS_NC
값: 0x1
명명 컨텍스트는 NTDS에 있습니다.
ADS_SYSTEMFLAG_CR_NTDS_DOMAIN
값: 0x2
명명 컨텍스트는 도메인입니다.
ADS_SYSTEMFLAG_ATTR_NOT_REPLICATED
값: 0x1
이 플래그가 attributeSchema 개체의 systemFlags 특성에 설정된 경우 특성은 복제되지 않습니다.
ADS_SYSTEMFLAG_ATTR_IS_CONSTRUCTED
값: 0x4
이 플래그가 attributeSchema 개체의 systemFlags 특성에 설정된 경우 특성은 생성된 속성입니다.

설명

classSchemaattributeSchema 개체의 경우 systemFlags 특성의 0x10 비트는 Active Directory에 포함된 기본 스키마의 일부인 개체를 나타냅니다. 이 비트는 새 classSchemaattributeSchema 개체에서 설정할 수 없습니다. ADS_SYSTEMFLAG_ENUM 열거형에는 이 비트에 대한 상수가 포함되지 않습니다.

참고 VBScript는 형식 라이브러리에서 데이터를 읽을 수 없으므로 VBScript 애플리케이션은 위에서 정의한 대로 기호 상수를 인식하지 못합니다. 대신 숫자 상수를 사용하여 VBScript 애플리케이션에서 적절한 플래그를 설정합니다. 심볼 상수를 좋은 프로그래밍 사례로 사용하려면 VBScript 애플리케이션에서 여기에서와 같이 이러한 상수를 명시적으로 선언해야 합니다.
 

예제

다음 코드 예제에서는 IDirectorySearch 인터페이스와 함께 ADS_SYSTEMFLAG_ENUM 열거형의 요소를 사용하여 복제되지 않은 속성을 검색하는 방법을 보여 줍니다.

#include <wchar.h>
#include <activeds.h>
#include <atlbase.h>
 
HRESULT hr = E_FAIL;
LPWSTR szPrefix = L"LDAP://%s";
LPWSTR szPath = NULL;
IDirectorySearch *pSchemaNC = NULL;
IADs *pObject = NULL;
size_t nLength = 0;
LPWSTR pszSearchFilterTemplate = L"(&(objectCategory=attributeSchema)(systemFlags:1.2.840.113556.1.4.804:=%d))";
LPWSTR pszSearchFilter = NULL;
 
CoInitialize(NULL);     // Initialize COM

// Get rootDSE and the schema container distinguished name.
// Bind to current user's domain using current user's security context.
hr = ADsOpenObject(L"LDAP://rootDSE",
                NULL,
                NULL,
                ADS_SECURE_AUTHENTICATION, // Use Secure Authentication.
                IID_IADs,
                (void**)&pObject);
if (SUCCEEDED(hr))
{
    CComVarinat svar;
    hr = pObject->Get(CComBSTR("schemaNamingContext"), &svar);
    if (SUCCEEDED(hr))
    {
        nLength = wcslen(szPrefix) + wcslen(svar.bstrVal) + 1;
        szPath = new WCHAR[nLength];
        swprintf_s(szPath, szPrefix, svar.bstrVal);

        hr = ADsOpenObject(szPath,
            NULL,
            NULL,
            ADS_SECURE_AUTHENTICATION, 
            IID_IDirectorySearch,
            (void**)&pSchemaNC);

        delete [] szPath;

        if (SUCCEEDED(hr))
        {
            wprintf(L"Find non-replicated attributes\n");
 
            // Create search filter to find attributes with systemFlags that 
            // match ADS_SYSTEMFLAG_ATTR_NOT_REPLICATED
            nLength = wcslen(pszSearchFilterTemplate) + 25 + 1;
            pszSearchFilter = new WCHAR[nLength];
            swprintf_s(pszSearchFilter, pszSearchFilterTemplate, ADS_SYSTEMFLAG_ATTR_NOT_REPLICATED);
     
            // Attributes are one-level deep in the schema container 
            // so only need to search one level.
            ADS_SEARCHPREF_INFO SearchPrefs;
            SearchPrefs.dwSearchPref = ADS_SEARCHPREF_SEARCH_SCOPE;
            SearchPrefs.vValue.dwType = ADSTYPE_INTEGER;
            SearchPrefs.vValue.Integer = ADS_SCOPE_ONELEVEL;
            DWORD dwNumPrefs = 1;
     
            // COL for iterations.
            ADS_SEARCH_COLUMN    col;
     
            // Handle used for searching.
            ADS_SEARCH_HANDLE hSearch;
     
            IADs    *pObj = NULL;
            IADs    * pIADs = NULL;
 
            // Set the search preference.
            hr = pSchemaNC->SetSearchPreference( &SearchPrefs, dwNumPrefs);
            if (FAILED(hr)) 
            {
                return hr;
            }
 
            CONST DWORD dwAttrNameSize = 1;
            LPOLESTR pszAttribute[dwAttrNameSize];
            pszAttribute[0] = L"cn";

            // Execute the search.
            hr = pSchemaNC->ExecuteSearch(pszSearchFilter,
                                          pszAttribute,
                                          dwAttrNameSize,
                                          &hSearch );

            delete [] pszSearchFilter;
            if ( SUCCEEDED(hr) ) 
            { 
                // Call IDirectorySearch::GetNextRow() to retrieve 
                // the next row of data.
                while( pSchemaNC->GetNextRow( hSearch) != S_ADS_NOMORE_ROWS) 
                {
                    // Loop through the array of passed column names,
                    // print the data for each column.
                    for (DWORD x = 0; x < dwAttrNameSize; x++) 
                    {
                        // Get the data for this column.
                        hr = pSchemaNC->GetColumn( hSearch, 
                                           pszAttribute[x], 
                                           &col );
                        if ( SUCCEEDED(hr) ) 
                        {
                            // Print the data for the column and 
                            // free the column.
                            if (col.dwADsType == ADSTYPE_CASE_IGNORE_STRING)
                            {
                                wprintf(L"%s: %s\r\n", 
                                pszAttribute[x], 
                                col.pADsValues->CaseIgnoreString); 
                            }
                            else
                            {
                                wprintf(L"<%s property is not a string>", pszAttribute[x]);
                            }

                            pSchemaNC->FreeColumn( &col );
                        }
                    }
                }

                // Close the search handle to clean up.
                pSchemaNC->CloseSearchHandle(hSearch);
            } 
        }
    } 

    pObject->Release();
}

CoUninitialize();    // uninitialize COM.

요구 사항

   
지원되는 최소 클라이언트 Windows Vista
지원되는 최소 서버 Windows Server 2008
머리글 iads.h

참고 항목

ADSI 열거형

IDirectorySearch