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屬性中設定,則屬性是建構的屬性。 |
備註
對於 classSchema 和 attributeSchema 物件, systemFlags 屬性的 0x10 位表示屬於 Active Directory 隨附之基底架構的物件。 這個位無法在新的 classSchema 和 attributeSchema 物件上設定。 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 |