Bagikan melalui


Cara Menentukan Nilai Perbandingan

Setiap jenis atribut memiliki sintaks yang menentukan jenis nilai perbandingan yang dapat Anda tentukan dalam filter pencarian untuk atribut tersebut.

Bagian berikut menjelaskan persyaratan untuk setiap sintaks atribut. Untuk informasi selengkapnya tentang sintaks atribut, lihat Sintaks untuk Atribut di Active Directory Domain Services.

Boolean

Nilai yang ditentukan dalam filter harus berupa nilai string yang "TRUE" atau "FALSE". Contoh berikut menunjukkan cara menentukan string perbandingan Boolean.

Contoh berikut akan mencari objek yang memiliki showInAdvancedViewOnly diatur ke TRUE:

(showInAdvancedViewOnly=TRUE)

Contoh berikut akan mencari objek yang memiliki showInAdvancedViewOnly diatur ke FALSE:

(showInAdvancedViewOnly=FALSE)

Bilangan Bulat dan Enumerasi

Nilai yang ditentukan dalam filter harus berupa Bilangan Bulat desimal. Nilai heksadesimal harus dikonversi ke desimal. String perbandingan nilai mengambil formulir berikut:

<attribute name>:<value>

"<nama> atribut" adalah lDAPDisplayName dari atribut dan "<nilai>" adalah nilai yang digunakan untuk perbandingan.

Contoh kode berikut menunjukkan filter yang akan mencari objek yang memiliki nilai groupType yang sama dengan bendera ADS_GROUP_TYPE_UNIVERSAL_GROUP (8) dan bendera ADS_GROUP_TYPE_SECURITY_ENABLED (0x80000000). Dua bendera digabungkan sama dengan 0x80000008, yang dikonversi ke desimal 2147483656.

(groupType=2147483656)

Operator aturan pencocokan LDAP juga dapat digunakan untuk melakukan perbandingan bitwise. Untuk informasi selengkapnya tentang aturan yang cocok, lihat Sintaks Filter Pencarian. Contoh kode berikut menunjukkan filter yang akan mencari objek yang memiliki groupType dengan kumpulan bit ADS_GROUP_TYPE_SECURITY_ENABLED (0x80000000 = 2147483648).

(groupType:1.2.840.113556.1.4.803:=2147483648))

OctetString

Nilai yang ditentukan dalam filter adalah data yang akan ditemukan. Data harus direpresentasikan sebagai string byte yang dikodekan dua karakter di mana setiap byte didahului oleh garis miring terbalik (\). Misalnya, nilai 0x05 akan muncul dalam string sebagai "\05".

Fungsi ADsEncodeBinaryData dapat digunakan untuk membuat representasi string yang dikodekan dari data biner. Fungsi ADsEncodeBinaryData tidak mengodekan nilai byte yang mewakili karakter alfa-numerik. Sebagai gantinya, ia akan menempatkan karakter ke dalam string tanpa mengodekannya. Ini menghasilkan string yang berisi campuran karakter yang dikodekan dan tidak dikodekan. Misalnya, jika data biner 0x05|0x1A|0x1B|0x43|0x32, string yang dikodekan akan berisi "\05\1A\1BC2". Ini tidak berpengaruh pada filter dan filter pencarian akan bekerja dengan benar dengan jenis string ini.

Kartubebas diterima.

Contoh kode berikut menunjukkan filter yang berisi string yang dikodekan untuk schemaIDGUID dengan nilai GUID "{BF967ABA-0DE6-11D0-A285-00AA003049E2}":

(schemaidguid=\BA\7A\96\BF\E6\0D\D0\11\A2\85\00\AA\00\30\49\E2)

Sid

Nilai yang ditentukan dalam filter adalah representasi string byte yang dikodekan dari SID. Untuk informasi selengkapnya tentang string byte yang dikodekan, lihat bagian sebelumnya dalam topik ini yang membahas sintaks OctetString.

Contoh kode berikut menunjukkan filter yang berisi string yang dikodekan untuk objectSid dengan nilai string SID "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

Seluruh nama khusus, yang akan dicocokkan, harus disediakan.

Kartubebas tidak diterima.

Ketahuilah bahwa atribut objectCategory juga memungkinkan Anda menentukan lDAPDisplayName dari class yang diatur pada atribut .

Contoh berikut menunjukkan filter yang menentukan anggota yang berisi "CN=TestUser,DC=Fabrikam,DC=COM":

(member=CN=TestUser,DC=Fabrikam,DC=COM)

INTEGER8

Nilai yang ditentukan dalam filter harus berupa bilangan bulat desimal. Mengonversi nilai heksadesimal menjadi desimal.

Contoh kode berikut menunjukkan filter yang menentukan creationTime yang diatur ke FILETIME "1999-12-31 23:59:59 (UTC/GMT)":

(creationTime=125911583990000000)

Fungsi berikut membuat filter kecocokan yang tepat (=) untuk atribut bilangan bulat besar dan memverifikasi atribut dalam skema dan sintaksnya:

//***************************************************************************
//
//  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

Atribut dengan sintaks ini harus mematuhi set karakter tertentu. Untuk informasi selengkapnya, lihat Sintaks untuk Atribut di Active Directory Domain Services.

Saat ini, Active Directory Domain Services tidak memberlakukan kumpulan karakter tersebut.

Nilai yang ditentukan dalam filter adalah string. Perbandingan peka huruf besar/kecil.

GeneralizedTime

Nilai yang ditentukan dalam filter adalah string yang mewakili tanggal dalam formulir berikut:

YYYYMMDDHHMMSS.0Z

"0Z" menunjukkan tidak ada diferensial waktu. Ketahuilah bahwa server Direktori Aktif menyimpan tanggal/waktu sebagai Greenwich Mean Time (GMT). Jika diferensial waktu tidak ditentukan, defaultnya adalah GMT.

Jika zona waktu lokal bukan GMT, gunakan nilai diferensial untuk menentukan zona waktu lokal Anda dan terapkan diferensial ke GMT. Diferensial didasarkan pada: GMT=Local+diferensial.

Untuk menentukan diferensial, gunakan:

YYYYMMDDHHMMSS.0[+/-]HHMM

Contoh berikut menunjukkan filter yang menentukan waktu saat Dibuat diatur ke 23/3/99 20:52:58 GMT:

(whenCreated=19990323205258.0Z)

Contoh berikut menunjukkan filter yang menentukan waktu ketikaBuat diatur ke 23/3/99 20:52:58 PM Waktu Standar Selandia Baru (diferensial adalah +12 jam):

(whenCreated=19990323205258.0+1200)

Contoh kode berikut menunjukkan cara menghitung diferensial zona waktu. Fungsi mengembalikan diferensial antara zona waktu lokal saat ini dan GMT. Nilai yang dikembalikan adalah string dalam format berikut:

[+/-]HHMM

Misalnya, Waktu Standar Pasifik adalah -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

Nilai yang ditentukan dalam filter adalah string yang mewakili tanggal dalam formulir berikut:

YYMMDDHHMMSSZ

Z menunjukkan tidak ada diferensial waktu. Ketahuilah bahwa server Direktori Aktif menyimpan tanggal dan waktu sebagai waktu GMT. Jika diferensial waktu tidak ditentukan, GMT adalah default.

Nilai detik ("SS") bersifat opsional.

Jika GMT bukan zona waktu lokal, terapkan nilai diferensial lokal untuk menentukan zona waktu lokal Anda. Diferensialnya adalah: GMT=Local+diferensial.

Untuk menentukan diferensial, gunakan formulir berikut:

YYMMDDHHMMSS[+/-]HHMM

Contoh berikut menunjukkan filter yang menentukan waktu myTimeAttrib yang diatur ke 23/3/99 20:52:58 GMT:

(myTimeAttrib=990323205258Z)

Contoh berikut menunjukkan filter yang menentukan waktu myTimeAttrib yang diatur ke 23/3/99 20:52:58 tanpa detik yang ditentukan:

(myTimeAttrib=9903232052Z)

Contoh berikut menunjukkan filter yang menentukan waktu myTimeAttrib yang diatur ke 23/3/99 20:52:58 PM Waktu Standar Selandia Baru (diferensial adalah 12 jam). Ini setara dengan 23/3/99 8:52:58 AM GMT.

(myTimeAttrib=990323205258+1200)

DirectoryString

Nilai yang ditentukan dalam filter adalah string. DirectoryString dapat berisi karakter Unicode. Perbandingannya adalah tidak peka huruf besar/kecil.

OID

Seluruh OID yang akan dicocokkan harus disediakan.

Kartubebas tidak diterima.

Atribut objectCategory memungkinkan Anda menentukan lDAPDisplayName dari class yang ditetapkan untuk atribut .

Contoh berikut menunjukkan filter yang menentukan governsID untuk kelas volume:

(governsID=1.2.840.113556.1.5.36)

Dua filter setara yang menentukan atribut systemMustContain yang berisi uNCName, yang memiliki OID 1.2.840.113556.1.4.137:

(SystemMustContain=uNCName)
 
(SystemMustContain=1.2.840.113556.1.4.137)

Sintaksis Lainnya

Sintaks berikut dievaluasi dalam filter yang mirip dengan string oktet:

  • ObjectSecurityDescriptor
  • AccessPointDN
  • PresentationAddresses
  • ReplicaLink
  • DNWithString
  • DNWithOctetString
  • ORName