Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Cada tipo de atributo tem uma sintaxe que determina o tipo de valores de comparação que você pode especificar em um filtro de pesquisa para esse atributo.
As seções a seguir descrevem os requisitos para cada sintaxe de atributo. Para obter mais informações sobre sintaxes de atributos, consulte Syntaxes for Attributes in Ative Directory Domain Services.
-
Booleano
-
O valor especificado em um filtro deve ser um valor de cadeia de caracteres que seja "TRUE" ou "FALSE". Os exemplos a seguir mostram como especificar uma cadeia de caracteres de comparação booleana.
O exemplo a seguir procurará objetos que tenham um showInAdvancedViewOnly definido como TRUE:
(showInAdvancedViewOnly=TRUE)O exemplo seguinte procurará por objetos que tenham showInAdvancedViewOnly definido como FALSE:
(showInAdvancedViewOnly=FALSE) -
Inteiro e Enumeração
-
O valor especificado em um filtro deve ser um inteiro decimal. Os valores hexadecimais devem ser convertidos em decimais. Uma cadeia de caracteres de comparação de valores assume a seguinte forma:
<attribute name>:<value>"<nome do atributo>" é o lDAPDisplayName do atributo e "<valor>" é o valor a ser usado para comparação.
O exemplo de código a seguir mostra um filtro que procurará objetos que tenham um valor groupType igual ao sinalizador ADS_GROUP_TYPE_UNIVERSAL_GROUP (8) e ao sinalizador ADS_GROUP_TYPE_SECURITY_ENABLED (0x80000000). As duas sinalizadores combinadas equivalem a 0x80000008, que, convertido para decimal, é 2147483656.
(groupType=2147483656)Os operadores de regra de correspondência LDAP também podem ser usados para executar comparações bitwise. Para obter mais informações sobre regras correspondentes, consulte Sintaxe do filtro de pesquisa. O exemplo de código a seguir mostra um filtro que procurará objetos que tenham um groupType com o ADS_GROUP_TYPE_SECURITY_ENABLED (0x80000000 = 2147483648) bit definido.
(groupType:1.2.840.113556.1.4.803:=2147483648)) -
OctetString
-
O valor especificado em um filtro são os dados a serem encontrados. Os dados devem ser representados como uma cadeia de bytes codificada, onde cada byte é expresso por dois caracteres precedidos por uma barra invertida (\). Por exemplo, o valor 0x05 aparecerá na cadeia de caracteres como "\05".
A funçãoADsEncodeBinaryData pode ser usada para criar uma representação de cadeia de caracteres codificada de dados binários. A função ADsEncodeBinaryData não codifica valores de byte que representam caracteres alfanuméricos. Em vez disso, ele colocará o caractere na cadeia de caracteres sem codificá-lo. Isso resulta na cadeia de caracteres contendo uma mistura de caracteres codificados e não codificados. Por exemplo, se os dados binários forem 0x05|0x1A|0x1B|0x43|0x32, a cadeia de caracteres codificada conterá "\05\1A\1BC2". Isso não tem efeito sobre o filtro e os filtros de pesquisa funcionarão corretamente com esses tipos de strings.
Curingas são aceitos.
O exemplo de código a seguir mostra um filtro que contém cadeia de caracteres codificada para schemaIDGUID com o valor GUID de "{BF967ABA-0DE6-11D0-A285-00AA003049E2}":
(schemaidguid=\BA\7A\96\BF\E6\0D\D0\11\A2\85\00\AA\00\30\49\E2) -
Sid
-
O valor especificado em um filtro é a representação codificada da cadeia de caracteres de bytes do SID. Para obter mais informações sobre cadeias de caracteres de bytes codificados, consulte a seção anterior neste tópico que discute a sintaxe OctetString.
O exemplo de código a seguir mostra um filtro que contém uma cadeia de caracteres codificada para objectSid com o valor de cadeia de caracteres SID de "S-1-5-21-1935655697-308236825-1417001333":
(ObjectSid=\01\04\00\00\00\00\00\05\15\00\00\00\11\C3\5Fs\19R\5F\12u\B9uT) -
DN
-
Todo o nome distinto, para ser correspondido, deve ser fornecido.
Curingas não são aceitos.
Lembre-se de que o atributo objectCategory também permite especificar o lDAPDisplayName do conjunto de classes no atributo.
O exemplo a seguir mostra um filtro que especifica um membro que contém "CN=TestUser,DC=Fabrikam,DC=COM":
(member=CN=TestUser,DC=Fabrikam,DC=COM) -
INTEGER8
-
O valor especificado em um filtro deve ser um inteiro decimal. Converta valores hexadecimais em decimais.
O exemplo de código a seguir mostra um filtro que especifica um creationTime definido como um FILETIME de "1999-12-31 23:59:59 (UTC/GMT)":
(creationTime=125911583990000000)As funções a seguir criam um filtro de correspondência exata (=) para um atributo inteiro grande e verificam o atributo no esquema e sua sintaxe:
//*************************************************************************** // // CheckAttribute() // //*************************************************************************** HRESULT CheckAttribute(LPOLESTR szAttribute, LPOLESTR szSyntax) { HRESULT hr = E_FAIL; BSTR bstr; IADsProperty *pObject = NULL; LPWSTR szPrefix = L"LDAP://schema/"; LPWSTR szPath; if((!szAttribute) || (!szSyntax)) { return E_POINTER; } // Allocate a buffer large enough to hold the ADsPath of the attribute. szPath = new WCHAR[lstrlenW(szPrefix) + lstrlenW(szAttribute) + 1]; if(NULL == szPath) { return E_OUTOFMEMORY; } // Create the ADsPath of the attribute. wcscpy_s(szPath, szPrefix); wcscat_s(szPath, szAttribute); hr = ADsOpenObject( szPath, NULL, NULL, ADS_SECURE_AUTHENTICATION, // Use Secure Authentication. IID_IADsProperty, (void**)&pObject); if(SUCCEEDED(hr)) { hr = pObject->get_Syntax(&bstr); if (SUCCEEDED(hr)) { if (0==lstrcmpiW(bstr, szSyntax)) { hr = S_OK; } else { hr = S_FALSE; } } SysFreeString(bstr); } if(pObject) { pObject->Release(); } delete szPath; return hr; } //*************************************************************************** // // CreateExactMatchFilterLargeInteger() // //*************************************************************************** HRESULT CreateExactMatchFilterLargeInteger( LPOLESTR szAttribute, INT64 liValue, LPOLESTR *pszFilter) { HRESULT hr = E_FAIL; if ((!szAttribute) || (!pszFilter)) { return E_POINTER; } // Verify that the attribute exists and has // Integer8 (Large Integer) syntax. hr = CheckAttribute(szAttribute, L"Integer8"); if (S_OK == hr) { LPWSTR szFormat = L"%s=%I64d"; LPWSTR szTempFilter = new WCHAR[lstrlenW(szFormat) + lstrlenW(szAttribute) + 20 + 1]; if(NULL == szTempFilter) { return E_OUTOFMEMORY; } swprintf_s(szTempFilter, L"%s=%I64d", szAttribute, liValue); // Allocate buffer for the filter string. // Caller must free the buffer using CoTaskMemFree. *pszFilter = (OLECHAR *)CoTaskMemAlloc(sizeof(OLECHAR) * (lstrlenW(szTempFilter) + 1)); if (*pszFilter) { wcscpy_s(*pszFilter, szTempFilter); hr = S_OK; } else { hr = E_OUTOFMEMORY; } delete szTempFilter; } return hr; } -
PrintableString
-
Os atributos com essas sintaxes devem aderir a conjuntos de caracteres específicos. Para obter mais informações, consulte Syntaxes for Attributes in Active Directory Domain Services.
Atualmente, os Serviços de Domínio Ative Directory não impõem esses conjuntos de caracteres.
O valor especificado em um filtro é uma cadeia de caracteres. A comparação diferencia maiúsculas de minúsculas.
-
GeneralizedTime
-
O valor especificado em um filtro é uma cadeia de caracteres que representa a data da seguinte forma:
YYYYMMDDHHMMSS.0Z"0Z" indica que não há diferença de tempo. Lembre-se de que o servidor do Ative Directory armazena data/hora como Hora de Greenwich (GMT). Se um diferencial de tempo não for especificado, o padrão será GMT.
Se o fuso horário local não for GMT, use um valor diferencial para especificar seu fuso horário local e aplique o diferencial ao GMT. O diferencial é baseado em: GMT=Local+diferencial.
Para especificar um diferencial, use:
YYYYMMDDHHMMSS.0[+/-]HHMMO exemplo a seguir mostra um filtro que especifica um whenCreated hora definida como 23/03/99 20:52:58 PM GMT:
(whenCreated=19990323205258.0Z)O exemplo a seguir mostra um filtro que especifica um whenCreated time definido como 3/23/99 8:52:58 PM New Zealand Standard Time (diferencial é +12 horas):
(whenCreated=19990323205258.0+1200)O exemplo de código a seguir mostra como calcular o diferencial de fuso horário. A função retorna o diferencial entre o fuso horário local atual e GMT. O valor retornado é uma cadeia de caracteres no seguinte formato:
[+/-]HHMMPor exemplo, a hora padrão do Pacífico é -0800.
//*************************************************************************** // // GetLocalTimeZoneDifferential() // //*************************************************************************** HRESULT GetLocalTimeZoneDifferential(LPOLESTR *pszDifferential) { if(NULL == pszDifferential) { return E_INVALIDARG; } HRESULT hr = E_FAIL; DWORD dwReturn; TIME_ZONE_INFORMATION timezoneinfo; LONG lTimeDifferential; LONG lHours; LONG lMinutes; dwReturn = GetTimeZoneInformation(&timezoneinfo); switch (dwReturn) { case TIME_ZONE_ID_STANDARD: lTimeDifferential = timezoneinfo.Bias + timezoneinfo.StandardBias; // Bias is in minutes. Calculate the hours for HHMM format. lHours = -(lTimeDifferential/60); // Bias is in minutes. Calculate the minutes for HHMM format. lMinutes = lTimeDifferential%60L; hr = S_OK; break; case TIME_ZONE_ID_DAYLIGHT: lTimeDifferential = timezoneinfo.Bias + timezoneinfo.DaylightBias; // Bias is in minutes. Calculate the hours for HHMM format. // Apply the additive inverse. // Bias is based on GMT=Local+Bias. // A differential, based on GMT=Local-Bias, is required. lHours = -(lTimeDifferential/60); // Bias is in minutes. Calculate the minutes for HHMM format. lMinutes = lTimeDifferential%60L; hr = S_OK; break; case TIME_ZONE_ID_INVALID: default: hr = E_FAIL; break; } if (SUCCEEDED(hr)) { // The caller must free the memory using CoTaskMemFree. *pszDifferential = (OLECHAR *)CoTaskMemAlloc(sizeof(OLECHAR) * (3 + 2 + 1)); if (*pszDifferential) { swprintf_s(*pszDifferential, L"%+03d%02d", lHours, lMinutes); hr = S_OK; } else { hr = E_OUTOFMEMORY; } } return hr; } -
UTCTime
-
O valor especificado em um filtro é uma cadeia de caracteres que representa a data da seguinte forma:
YYMMDDHHMMSSZZ indica que não há diferença de tempo. Lembre-se de que o servidor do Ative Directory armazena data e hora como hora GMT. Se um diferencial de tempo não for especificado, GMT é o padrão.
O valor de segundos ("SS") é opcional.
Se GMT não for o fuso horário local, aplique um valor diferencial local para especificar seu fuso horário local. O diferencial é: GMT=Local+diferencial.
Para especificar um diferencial, use o seguinte formulário:
YYMMDDHHMMSS[+/-]HHMMO exemplo a seguir mostra um filtro que especifica um myTimeAttrib hora definida como 23/03/99 20:52:58 GMT:
(myTimeAttrib=990323205258Z)O exemplo a seguir mostra um filtro que especifica um tempo do atributo myTimeAttrib definido como 23/03/99 20:52, sem os segundos especificados:
(myTimeAttrib=9903232052Z)O exemplo a seguir mostra um filtro que especifica um myTimeAttrib definido como 3/23/99 20:52:58 Hora Padrão da Nova Zelândia (com um desfasamento de 12 horas). Isto é equivalente a 23/03/99 08:52:58 AM GMT.
(myTimeAttrib=990323205258+1200) -
DirectoryString
-
O valor especificado em um filtro é uma cadeia de caracteres. DirectoryString pode conter caracteres Unicode. A comparação não diferencia maiúsculas de minúsculas.
-
OID
-
O identificador OID completo a ser correspondido deve ser fornecido.
Curingas não são aceitos.
O atributo objectCategory permite especificar o lDAPDisplayName da classe definida para o atributo.
O exemplo a seguir mostra um filtro que especifica governsID para classe de volume:
(governsID=1.2.840.113556.1.5.36)Dois filtros equivalentes que especificam atributo systemMustContain que contém uNCName, que tem um OID de 1.2.840.113556.1.4.137:
(SystemMustContain=uNCName) (SystemMustContain=1.2.840.113556.1.4.137) -
Outras sintaxes
-
As seguintes sintaxes são avaliadas em um filtro semelhante a uma cadeia de caracteres de octeto:
- ObjectSecurityDescritor
- AccessPointDN
- ApresentaçãoEndereços
- ReplicaLink
- DNWithString
- DNWithOctetString
- ORName