Active Directory mehrere Attribute gleichzeitig abfragen



  • Hallo 🙂 ich programmiere zur Zeit an einem Client der aus dem Active Directory und LDAP die User und Gruppen ermitteln soweit so gut.. leider sind meine C++ Kentnisse etwas eingeschlafen mir ist momentan etwas unklar wie ich zum sAMAccountName noch weiter attribute wie den namen oder die Strasse auslesen kann. Die Attribute an sich sind klar aber nicht wie ich nachfolgende Funktion aufbohre damit noch weitere Attribute ermittelt und übergeben werden (momentan nur der Benutzeraccount). Wäre toll wenn mir jemand dabei helfen könnte ich denke C++ Kentnisse sind da eher gefragt als Ketnisse rund um das Thema AD/LDAP

    im vorraus schon mal ein dickes Dankeschön 🙂

    grüße

    --> die Funktion

    bool CActiveDirectoryUsers::FindUsersIn(CStringArray* pUserArray,IDirectorySearch *pContainerToSearch)
    {
    if(pContainerToSearch==NULL||pUserArray==NULL)
    return false;
    LPOLESTR pszSearchFilter = new OLECHAR[MAX_PATH];
    wcscpy(pszSearchFilter,L"(&(objectClass=user)(objectCategory=person))");
    ADS_SEARCHPREF_INFO SearchPrefs;
    SearchPrefs.dwSearchPref = ADS_SEARCHPREF_SEARCH_SCOPE;
    SearchPrefs.vValue.dwType = ADSTYPE_INTEGER;
    SearchPrefs.vValue.Integer = ADS_SCOPE_SUBTREE;
    DWORD dwNumPrefs = 1;
    
    LPOLESTR pszColumn = NULL; 
    ADS_SEARCH_COLUMN col;
    HRESULT hr;
    
    IADs *pObj = NULL;
    IADs * pIADs = NULL;
    
    ADS_SEARCH_HANDLE hSearch = NULL; 
    hr = pContainerToSearch->SetSearchPreference( &SearchPrefs, dwNumPrefs);
    if (FAILED(hr))
    return false;
    
    LPOLESTR pszNonVerboseList[] = {L"sAMAccountName"};
    LPOLESTR szName = new OLECHAR[MAX_PATH];
    int iCount = 0;
    
    hr = pContainerToSearch->ExecuteSearch(pszSearchFilter, pszNonVerboseList,sizeof(pszNonVerboseList)/sizeof(LPOLESTR),&hSearch);
    if ( SUCCEEDED(hr) )
    { 
    hr = pContainerToSearch->GetFirstRow( hSearch);
    if (SUCCEEDED(hr))
    {
    while( hr != S_ADS_NOMORE_ROWS )
    {
    iCount++;
    while( pContainerToSearch->GetNextColumnName( hSearch, &pszColumn ) != S_ADS_NOMORE_COLUMNS )
    {
    hr = pContainerToSearch->GetColumn( hSearch, pszColumn, &col );
    if ( SUCCEEDED(hr) )
    {
    if (0==wcscmp(L"sAMAccountName", pszColumn))
    {
    wcscpy(szName,col.pADsValues->CaseIgnoreString);
    pUserArray->Add((CW2A)(szName));
    }
    
    pContainerToSearch->FreeColumn( &col );
    }
    FreeADsMem( pszColumn );
    } 
    
    hr = pContainerToSearch->GetNextRow( hSearch);
    } 
    
    }
    else
    return false;
    
    pContainerToSearch->CloseSearchHandle(hSearch);
    } 
    else
    return false;
    
    return true;
    }
    


  • Hallo bin neu hier sorry wegen der codeformatierung 😉 aber ich denke der Beitrag ist unter Datenbanken besser aufgehoben falls jemand von den Mods die Zeit findet ihn zu verschieben.

    Danke 🙂



  • habe es hinbekommen 🙂



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum MFC (Visual C++) in das Forum Datenbanken verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten