You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
4.2 KiB
171 lines
4.2 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 2000 - 2001.
|
|
//
|
|
// File: headers.h
|
|
//
|
|
// Contents:
|
|
//
|
|
// History: 07-26-2001 Hiteshr Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
class CBaseAz;
|
|
|
|
class SID_CACHE_ENTRY
|
|
{
|
|
public:
|
|
SID_CACHE_ENTRY(PSID pSid);
|
|
~SID_CACHE_ENTRY();
|
|
|
|
BOOL
|
|
IsSidResolved() const {return (m_SidType != SidTypeUnknown);}
|
|
|
|
const CString&
|
|
GetNameToDisplay() const{ return m_strNameToDisplay;}
|
|
|
|
const CString&
|
|
GetSidType() const {return m_strType;}
|
|
|
|
PSID GetSid() const {return m_pSid;}
|
|
|
|
SID_NAME_USE GetSidNameUse() const { return m_SidType;}
|
|
|
|
const CString&
|
|
GetStringSid()const { return m_strSid;}
|
|
|
|
VOID
|
|
AddNameAndType(IN SID_NAME_USE SidType,
|
|
IN const CString& strAccountName,
|
|
IN const CString& strLogonName);
|
|
|
|
private:
|
|
SID_NAME_USE m_SidType;
|
|
PSID m_pSid;
|
|
CString m_strSid;
|
|
CString m_strType;
|
|
CString m_strAccountName;
|
|
CString m_strLogonName;
|
|
CString m_strNameToDisplay;
|
|
};
|
|
|
|
typedef SID_CACHE_ENTRY* PSID_CACHE_ENTRY;
|
|
|
|
struct ltstr
|
|
{
|
|
bool operator()(const CString* s1, const CString* s2) const
|
|
{
|
|
return (*s1 < *s2) ;
|
|
}
|
|
};
|
|
|
|
typedef map<const CString*,PSID_CACHE_ENTRY,ltstr> SidCacheMap;
|
|
|
|
|
|
class CMachineInfo
|
|
{
|
|
public:
|
|
CMachineInfo();
|
|
~CMachineInfo();
|
|
|
|
VOID
|
|
InitializeMacineConfiguration(IN const CString& strTargetComputerName);
|
|
|
|
const CString&
|
|
GetMachineName(){return m_strTargetComputerName;}
|
|
|
|
BOOL
|
|
IsStandAlone(){return m_bIsStandAlone;}
|
|
|
|
const CString&
|
|
GetDCName(){return m_strDCName;}
|
|
|
|
BOOL
|
|
IsDC(){return m_bIsDC;}
|
|
|
|
const CString&
|
|
GetTargetDomainFlat(){return m_strTargetDomainFlat;}
|
|
|
|
const CString&
|
|
GetTargetDomainDNS(){return m_strTargetDomainDNS;}
|
|
|
|
private:
|
|
CString m_strTargetComputerName;
|
|
BOOL m_bIsStandAlone;
|
|
CString m_strDCName;
|
|
BOOL m_bIsDC;
|
|
CString m_strTargetDomainFlat;
|
|
CString m_strTargetDomainDNS;
|
|
};
|
|
|
|
|
|
class CSidHandler
|
|
{
|
|
public:
|
|
CSidHandler(CMachineInfo* pMachineInfo);
|
|
~CSidHandler();
|
|
|
|
HRESULT
|
|
LookupSids(IN CBaseAz* pOwnerAz,
|
|
IN CList<PSID,PSID>& listSids,
|
|
OUT CList<CBaseAz*,CBaseAz*>& listSidCacheEntries);
|
|
|
|
//
|
|
//Popsup Object Picker and returns selected users/groups listSids
|
|
//
|
|
HRESULT
|
|
GetUserGroup(IN HWND hDlg,
|
|
IN CBaseAz*pOwnerAz,
|
|
OUT CList<CBaseAz*,CBaseAz*>& listSidCacheEntry);
|
|
|
|
private:
|
|
VOID
|
|
GetUserFriendlyName(IN const CString & strSamLogonName,
|
|
OUT CString *pstrLogonName,
|
|
OUT CString *pstrDisplayName);
|
|
VOID
|
|
LookupSidsHelper(IN OUT CList<PSID_CACHE_ENTRY,PSID_CACHE_ENTRY>& listSids,
|
|
IN const CString& strServerName,
|
|
IN BOOL bStandAlone,
|
|
IN BOOL bIsDC,
|
|
IN BOOL bSecondTry);
|
|
|
|
|
|
HRESULT
|
|
GetObjectPicker();
|
|
|
|
HRESULT
|
|
InitObjectPicker();
|
|
|
|
PSID_CACHE_ENTRY
|
|
GetEntryFromCache(PSID pSid);
|
|
|
|
HRESULT
|
|
GetSidCacheListFromOPOutput(IN PDS_SELECTION_LIST pDsSelList,
|
|
OUT CList<PSID_CACHE_ENTRY,PSID_CACHE_ENTRY>& listSidCacheEntry,
|
|
OUT CList<PSID_CACHE_ENTRY,PSID_CACHE_ENTRY>& listUnresolvedSidCacheEntry);
|
|
|
|
HRESULT
|
|
GetSidCacheListFromSidList(IN CList<PSID,PSID>& listSid,
|
|
OUT CList<PSID_CACHE_ENTRY,PSID_CACHE_ENTRY>& listSidCacheEntry,
|
|
OUT CList<PSID_CACHE_ENTRY,PSID_CACHE_ENTRY>& listUnresolvedSidCacheEntry);
|
|
|
|
|
|
CComPtr<IDsObjectPicker> m_spDsObjectPicker;
|
|
BOOL m_bObjectPickerInitialized;
|
|
CMachineInfo *m_pMachineInfo;
|
|
SidCacheMap m_mapSidCache;
|
|
//This critical section is used to protect SidHandler function
|
|
//from multiple threads
|
|
CRITICAL_SECTION m_csSidHandlerLock;
|
|
//Need this lock before modifying an entry in SidCache
|
|
CRITICAL_SECTION m_csSidCacheLock;
|
|
void LockSidHandler() { EnterCriticalSection(&m_csSidHandlerLock); }
|
|
void UnlockSidHandler() { LeaveCriticalSection(&m_csSidHandlerLock); }
|
|
void LockSidCacheEntry() { EnterCriticalSection(&m_csSidCacheLock); }
|
|
void UnlockSidCacheEntry(){ LeaveCriticalSection(&m_csSidCacheLock); }
|
|
};
|
|
|
|
void
|
|
GetFileServerName(const CString& strPath,
|
|
OUT CString& strTargetMachineName);
|