//+-------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1997 - 2000. // // File: AdminCustomizer.hxx // // Contents: Definition of class to provide default customization // of queries by adding objects and offering prefix searching // of those objects. // // Classes: CAdminCustomizer // // History: 06-22-2000 DavidMun Created // //--------------------------------------------------------------------------- #ifndef __ADMIN_CUSTOMIZER_HXX_ #define __ADMIN_CUSTOMIZER_HXX_ struct SID_INFO { SID_IDENTIFIER_AUTHORITY sii; ULONG rid; PSID psid; WCHAR wzAccountName[MAX_PATH]; WCHAR wzPath[MAX_PATH]; }; #define NUM_SID_INFOS 15 //+-------------------------------------------------------------------------- // // Class: StringICompare // // Purpose: Functional object for use with map having class String as // the key. // // History: 08-26-1998 DavidMun Created // //--------------------------------------------------------------------------- class StringICompare { public: bool operator()(const String &lhs, const String &rhs) const; }; //+-------------------------------------------------------------------------- // // Member: StringICompare::operator // // Synopsis: Return TRUE if a case insensitive comparison shows lhs < rhs. // // History: 08-26-1998 DavidMun Created // //--------------------------------------------------------------------------- inline bool StringICompare::operator()(const String &lhs, const String &rhs) const { return lhs.icompare(rhs) < 0; } typedef map CStringDsObjectListMap; //+-------------------------------------------------------------------------- // // Class: CAdminCustomizer // // Purpose: Serve as the default customizer object, which adds special // objects to a query result and performs prefix searches // among them. // // History: 03-10-2000 davidmun Created from CCustomizeDsBrowser // //--------------------------------------------------------------------------- class CAdminCustomizer { public: CAdminCustomizer( const CObjectPicker &rop); ~CAdminCustomizer(); void PrefixSearch( HWND hwnd, const CScope &ForScope, const String &strName, CDsObjectList *pdsolMatches) const; void AddObjects( HWND hwnd, const CScope &ForScope, CDsObjectList *pdsolMatches) const; PSID LookupDownlevelName( const String &strName) const; PCWSTR LookupDownlevelPath( PCWSTR pwzAccountName) const; void Clear() { TRACE_METHOD(CAdminCustomizer, Clear); m_dsolWKSP.clear(); m_dsomapBuiltins.clear(); } private: void _GetUplevelAddition( HWND hwnd, ULONG idOwningScope, CDsObjectList *pdsol) const; void _GetDownlevelAddition( CDsObjectList *pdsol) const; void _AddDownlevelIfMatches( ULONG idOwningScope, ULONG flCurObject, ULONG flObjectsToCompare, const String &strSearchFor, CDsObjectList *pdsol) const; void _AddBuiltins( HWND hwnd, ULONG idOwningScope, const String &strScopePath, const String &strSearchFor, CDsObjectList *pdsol) const; void _InitBuiltinsList( HWND hwnd, ULONG idOwningScope, const String &strScopePath, CDsObjectList *pdsol) const; void _AddLocalizedWKSP( ULONG idOwningScope, LSA_HANDLE hLsa, IADs *pADs, VARIANT *pvarSid) const; void _AddWellKnownPrincipals( HWND hwnd, ULONG idOwningScope, const String &strSearchFor, CDsObjectList *pdsol) const; void _InitWellKnownPrincipalsList( HWND hwnd, ULONG idOwningScope) const; void _AddFromList( const String &strSearchFor, const CDsObjectList *pdsolIn, CDsObjectList *pdsolOut) const; String _GetAccountName( ULONG flUser) const; // not supported; included to prevent compiler error 4512 CAdminCustomizer &operator =(const CAdminCustomizer &); const CObjectPicker &m_rop; mutable CStringDsObjectListMap m_dsomapBuiltins; mutable CDsObjectList m_dsolWKSP; // well known security principals mutable SID_INFO m_aSidInfo[NUM_SID_INFOS]; }; #endif // __ADMIN_CUSTOMIZER_HXX_