Compartir a través de


enumeración ADS_SYSTEMFLAG_ENUM (iads.h)

La enumeración ADS_SYSTEMFLAG_ENUM define algunos de los valores que se pueden asignar al atributo systemFlags . Algunos de los valores de la enumeración son específicos de los objetos attributeSchema ; Otros valores se pueden establecer en objetos de cualquier clase.

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;

Constantes

 
ADS_SYSTEMFLAG_DISALLOW_DELETE
Valor: 0x80000000
Identifica un objeto que no se puede eliminar.
ADS_SYSTEMFLAG_CONFIG_ALLOW_RENAME
Valor: 0x40000000
Para los objetos de la partición de configuración, si se establece esta marca, se puede cambiar el nombre del objeto; de lo contrario, no se puede cambiar el nombre del objeto. De forma predeterminada, esta marca no se establece en los nuevos objetos creados en la partición de configuración y solo puede establecer esta marca durante la creación de objetos.
ADS_SYSTEMFLAG_CONFIG_ALLOW_MOVE
Valor: 0x20000000
Para los objetos de la partición de configuración, si se establece esta marca, se puede mover el objeto; de lo contrario, el objeto no se puede mover. De forma predeterminada, esta marca no se establece en los nuevos objetos creados en la partición de configuración y solo puede establecer esta marca durante la creación de objetos.
ADS_SYSTEMFLAG_CONFIG_ALLOW_LIMITED_MOVE
Valor: 0x10000000
Para los objetos de la partición de configuración, si se establece esta marca, el objeto se puede mover con restricciones; de lo contrario, el objeto no se puede mover. De forma predeterminada, esta marca no se establece en los nuevos objetos creados en la partición de configuración y solo puede establecer esta marca durante la creación de objetos.
ADS_SYSTEMFLAG_DOMAIN_DISALLOW_RENAME
Valor: 0x8000000
Identifica un objeto de dominio que no se puede cambiar de nombre.
ADS_SYSTEMFLAG_DOMAIN_DISALLOW_MOVE
Valor: 0x4000000
Identifica un objeto de dominio que no se puede mover.
ADS_SYSTEMFLAG_CR_NTDS_NC
Valor: 0x1
El contexto de nomenclatura está en NTDS.
ADS_SYSTEMFLAG_CR_NTDS_DOMAIN
Valor: 0x2
El contexto de nomenclatura es un dominio.
ADS_SYSTEMFLAG_ATTR_NOT_REPLICATED
Valor: 0x1
Si esta marca se establece en el atributo systemFlags de un objeto attributeSchema , el atributo no se va a replicar.
ADS_SYSTEMFLAG_ATTR_IS_CONSTRUCTED
Valor: 0x4
Si esta marca se establece en el atributo systemFlags de un objeto attributeSchema , el atributo es una propiedad construida.

Comentarios

En el caso de los objetos classSchema y attributeSchema , el 0x10 bit del atributo systemFlags indica un objeto que forma parte del esquema base incluido con Active Directory. Este bit no se puede establecer en objetos classSchema y attributeSchema nuevos. La enumeración ADS_SYSTEMFLAG_ENUM no incluye una constante para este bit.

Nota Dado que VBScript no puede leer datos de una biblioteca de tipos, las aplicaciones VBScript no reconocen las constantes simbólicas como se ha definido anteriormente. Use las constantes numéricas en su lugar para establecer las marcas adecuadas en las aplicaciones vbScript. Para usar las constantes simbólicas como práctica de programación recomendada, debe hacer declaraciones explícitas de estas constantes, como se hace aquí, en las aplicaciones VBScript.
 

Ejemplos

En el ejemplo de código siguiente se muestra cómo se usan los elementos de la enumeración ADS_SYSTEMFLAG_ENUM , junto con la interfaz IDirectorySearch , para buscar propiedades no replicadas.

#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.

Requisitos

   
Cliente mínimo compatible Windows Vista
Servidor mínimo compatible Windows Server 2008
Encabezado iads.h

Consulte también

Enumeraciones ADSI

IDirectorySearch