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
如果在 attributeSchema 对象的 systemFlags 属性中设置了此标志,则不会复制该属性。
ADS_SYSTEMFLAG_ATTR_IS_CONSTRUCTED
值: 0x4
如果在 attributeSchema 对象的 systemFlags 属性中设置此标志,则特性为构造属性。

注解

对于 classSchemaattributeSchema 对象, systemFlags 属性的0x10位指示属于 Active Directory 附带的基本架构的一部分的对象。 不能在新 classSchemaattributeSchema 对象上设置此位。 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