Поделиться через


перечисление ADS_SYSTEMFLAG_ENUM (iads.h)

Перечисление ADS_SYSTEMFLAG_ENUM определяет некоторые значения, которые могут быть назначены атрибуту systemFlags . Некоторые значения в перечислении относятся к объектам attributeSchema ; другие значения можно задать для объектов любого класса.

Синтаксис

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
Если этот флаг задан в атрибуте systemFlags объекта attributeSchema , реплицировать атрибут нельзя.
ADS_SYSTEMFLAG_ATTR_IS_CONSTRUCTED
Значение: 0x4
Если этот флаг задан в атрибуте systemFlags объекта attributeSchema , атрибут является сконструированным свойством.

Комментарии

Для объектов classSchema и attributeSchema бит 0x10 атрибута systemFlags указывает на объект, который является частью базовой схемы, включенной в Active Directory. Этот бит нельзя задать для новых объектов classSchema и attributeSchema . Перечисление ADS_SYSTEMFLAG_ENUM не содержит константы для этого бита.

Примечание Так как VBScript не может считывать данные из библиотеки типов, приложения VBScript не распознают символьные константы, как определено выше. Вместо этого используйте числовые константы, чтобы задать соответствующие флаги в приложениях VBScript. Чтобы использовать символьные константы в качестве рекомендуемой методики программирования, следует явно объявлять такие константы, как показано здесь, в приложениях VBScript.
 

Примеры

В следующем примере кода показано, как элементы перечисления ADS_SYSTEMFLAG_ENUM вместе с интерфейсом IDirectorySearch используются для поиска нереплицированных свойств.

#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