Leaked source code of windows server 2003
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

  1. //+---------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 2000 - 2001.
  5. //
  6. // File: headers.h
  7. //
  8. // Contents:
  9. //
  10. // History: 07-26-2001 Hiteshr Created
  11. //
  12. //----------------------------------------------------------------------------
  13. class CBaseAz;
  14. class SID_CACHE_ENTRY
  15. {
  16. public:
  17. SID_CACHE_ENTRY(PSID pSid);
  18. ~SID_CACHE_ENTRY();
  19. BOOL
  20. IsSidResolved() const {return (m_SidType != SidTypeUnknown);}
  21. const CString&
  22. GetNameToDisplay() const{ return m_strNameToDisplay;}
  23. const CString&
  24. GetSidType() const {return m_strType;}
  25. PSID GetSid() const {return m_pSid;}
  26. SID_NAME_USE GetSidNameUse() const { return m_SidType;}
  27. const CString&
  28. GetStringSid()const { return m_strSid;}
  29. VOID
  30. AddNameAndType(IN SID_NAME_USE SidType,
  31. IN const CString& strAccountName,
  32. IN const CString& strLogonName);
  33. private:
  34. SID_NAME_USE m_SidType;
  35. PSID m_pSid;
  36. CString m_strSid;
  37. CString m_strType;
  38. CString m_strAccountName;
  39. CString m_strLogonName;
  40. CString m_strNameToDisplay;
  41. };
  42. typedef SID_CACHE_ENTRY* PSID_CACHE_ENTRY;
  43. struct ltstr
  44. {
  45. bool operator()(const CString* s1, const CString* s2) const
  46. {
  47. return (*s1 < *s2) ;
  48. }
  49. };
  50. typedef map<const CString*,PSID_CACHE_ENTRY,ltstr> SidCacheMap;
  51. class CMachineInfo
  52. {
  53. public:
  54. CMachineInfo();
  55. ~CMachineInfo();
  56. VOID
  57. InitializeMacineConfiguration(IN const CString& strTargetComputerName);
  58. const CString&
  59. GetMachineName(){return m_strTargetComputerName;}
  60. BOOL
  61. IsStandAlone(){return m_bIsStandAlone;}
  62. const CString&
  63. GetDCName(){return m_strDCName;}
  64. BOOL
  65. IsDC(){return m_bIsDC;}
  66. const CString&
  67. GetTargetDomainFlat(){return m_strTargetDomainFlat;}
  68. const CString&
  69. GetTargetDomainDNS(){return m_strTargetDomainDNS;}
  70. private:
  71. CString m_strTargetComputerName;
  72. BOOL m_bIsStandAlone;
  73. CString m_strDCName;
  74. BOOL m_bIsDC;
  75. CString m_strTargetDomainFlat;
  76. CString m_strTargetDomainDNS;
  77. };
  78. class CSidHandler
  79. {
  80. public:
  81. CSidHandler(CMachineInfo* pMachineInfo);
  82. ~CSidHandler();
  83. HRESULT
  84. LookupSids(IN CBaseAz* pOwnerAz,
  85. IN CList<PSID,PSID>& listSids,
  86. OUT CList<CBaseAz*,CBaseAz*>& listSidCacheEntries);
  87. //
  88. //Popsup Object Picker and returns selected users/groups listSids
  89. //
  90. HRESULT
  91. GetUserGroup(IN HWND hDlg,
  92. IN CBaseAz*pOwnerAz,
  93. OUT CList<CBaseAz*,CBaseAz*>& listSidCacheEntry);
  94. private:
  95. VOID
  96. GetUserFriendlyName(IN const CString & strSamLogonName,
  97. OUT CString *pstrLogonName,
  98. OUT CString *pstrDisplayName);
  99. VOID
  100. LookupSidsHelper(IN OUT CList<PSID_CACHE_ENTRY,PSID_CACHE_ENTRY>& listSids,
  101. IN const CString& strServerName,
  102. IN BOOL bStandAlone,
  103. IN BOOL bIsDC,
  104. IN BOOL bSecondTry);
  105. HRESULT
  106. GetObjectPicker();
  107. HRESULT
  108. InitObjectPicker();
  109. PSID_CACHE_ENTRY
  110. GetEntryFromCache(PSID pSid);
  111. HRESULT
  112. GetSidCacheListFromOPOutput(IN PDS_SELECTION_LIST pDsSelList,
  113. OUT CList<PSID_CACHE_ENTRY,PSID_CACHE_ENTRY>& listSidCacheEntry,
  114. OUT CList<PSID_CACHE_ENTRY,PSID_CACHE_ENTRY>& listUnresolvedSidCacheEntry);
  115. HRESULT
  116. GetSidCacheListFromSidList(IN CList<PSID,PSID>& listSid,
  117. OUT CList<PSID_CACHE_ENTRY,PSID_CACHE_ENTRY>& listSidCacheEntry,
  118. OUT CList<PSID_CACHE_ENTRY,PSID_CACHE_ENTRY>& listUnresolvedSidCacheEntry);
  119. CComPtr<IDsObjectPicker> m_spDsObjectPicker;
  120. BOOL m_bObjectPickerInitialized;
  121. CMachineInfo *m_pMachineInfo;
  122. SidCacheMap m_mapSidCache;
  123. //This critical section is used to protect SidHandler function
  124. //from multiple threads
  125. CRITICAL_SECTION m_csSidHandlerLock;
  126. //Need this lock before modifying an entry in SidCache
  127. CRITICAL_SECTION m_csSidCacheLock;
  128. void LockSidHandler() { EnterCriticalSection(&m_csSidHandlerLock); }
  129. void UnlockSidHandler() { LeaveCriticalSection(&m_csSidHandlerLock); }
  130. void LockSidCacheEntry() { EnterCriticalSection(&m_csSidCacheLock); }
  131. void UnlockSidCacheEntry(){ LeaveCriticalSection(&m_csSidCacheLock); }
  132. };
  133. void
  134. GetFileServerName(const CString& strPath,
  135. OUT CString& strTargetMachineName);