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