Source code of Windows XP (NT5)
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.

349 lines
8.2 KiB

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (c) 1998-1999 Microsoft Corporation
  4. //
  5. // Module Name:
  6. // SmbSPage.cpp
  7. //
  8. // Abstract:
  9. // CClusterFileShareSecurityPage class implementation. This class will encapsulate
  10. // the cluster file share security page.
  11. //
  12. // Author:
  13. // Galen Barbee (galenb) February 11, 1998
  14. //
  15. // Revision History:
  16. //
  17. // Notes:
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "resource.h"
  22. #include "SmbSPage.h"
  23. #include "AclUtils.h"
  24. #include <clusudef.h>
  25. #include "SmbShare.h"
  26. #include "SmbSSht.h"
  27. static GENERIC_MAPPING ShareMap =
  28. {
  29. FILE_GENERIC_READ,
  30. FILE_GENERIC_WRITE,
  31. FILE_GENERIC_EXECUTE,
  32. FILE_ALL_ACCESS
  33. };
  34. static SI_ACCESS siFileShareAccesses[] =
  35. {
  36. { &GUID_NULL, FILE_ALL_ACCESS, MAKEINTRESOURCE(IDS_ACLEDIT_PERM_GEN_ALL), SI_ACCESS_GENERAL },
  37. { &GUID_NULL, FILE_GENERIC_WRITE | DELETE, MAKEINTRESOURCE(IDS_ACLEDIT_PERM_GEN_MODIFY), SI_ACCESS_GENERAL },
  38. { &GUID_NULL, FILE_GENERIC_READ | FILE_GENERIC_EXECUTE, MAKEINTRESOURCE(IDS_ACLEDIT_PERM_GEN_READ), SI_ACCESS_GENERAL }
  39. };
  40. /////////////////////////////////////////////////////////////////////////////
  41. // CClusterFileShareSecurityInformation security page
  42. /////////////////////////////////////////////////////////////////////////////
  43. /////////////////////////////////////////////////////////////////////////////
  44. //++
  45. //
  46. // CClusterFileShareSecurityInformation::CClusterFileShareSecurityInformation
  47. //
  48. // Routine Description:
  49. // Default contructor
  50. //
  51. // Arguments:
  52. // none
  53. //
  54. // Return Value:
  55. // none
  56. //
  57. //--
  58. /////////////////////////////////////////////////////////////////////////////
  59. CClusterFileShareSecurityInformation::CClusterFileShareSecurityInformation(
  60. void
  61. )
  62. {
  63. m_pShareMap = &ShareMap;
  64. m_psiAccess = (SI_ACCESS *) &siFileShareAccesses;
  65. m_nAccessElems = ARRAYSIZE( siFileShareAccesses );
  66. m_nDefAccess = 2; // FILE_GEN_READ
  67. m_dwFlags = SI_EDIT_PERMS
  68. | SI_NO_ACL_PROTECT
  69. //| SI_UGOP_PROVIDED
  70. ;
  71. } //*** CClusterFileShareSecurityInformation::CClusterFileShareSecurityInformation()
  72. /////////////////////////////////////////////////////////////////////////////
  73. //++
  74. //
  75. // CClusterFileShareSecurityInformation::~CClusterFileShareSecurityInformation
  76. //
  77. // Routine Description:
  78. // Destructor
  79. //
  80. // Arguments:
  81. // none
  82. //
  83. // Return Value:
  84. // none
  85. //
  86. //--
  87. /////////////////////////////////////////////////////////////////////////////
  88. CClusterFileShareSecurityInformation::~CClusterFileShareSecurityInformation(
  89. void
  90. )
  91. {
  92. } //*** CClusterFileShareSecurityInformation::~CClusterFileShareSecurityInformation()
  93. /////////////////////////////////////////////////////////////////////////////
  94. //++
  95. //
  96. // CClusterFileShareSecurityInformation::GetSecurity
  97. //
  98. // Routine Description:
  99. // Give the security descriptor to the common UI.
  100. //
  101. // Arguments:
  102. // RequestedInformation [IN]
  103. // ppSecurityDescriptor [IN, OUT] get the security descriptor
  104. // fDefault [IN]
  105. //
  106. // Return Value:
  107. //
  108. //
  109. //--
  110. /////////////////////////////////////////////////////////////////////////////
  111. STDMETHODIMP CClusterFileShareSecurityInformation::GetSecurity(
  112. IN SECURITY_INFORMATION RequestedInformation,
  113. IN OUT PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
  114. IN BOOL fDefault
  115. )
  116. {
  117. AFX_MANAGE_STATE( AfxGetStaticModuleState() );
  118. HRESULT hr = E_FAIL;
  119. try
  120. {
  121. if ( ppSecurityDescriptor != NULL )
  122. {
  123. *ppSecurityDescriptor = ::ClRtlCopySecurityDescriptor( Pcsp()->Pss()->Ppp()->Psec() );
  124. hr = S_OK;
  125. }
  126. }
  127. catch ( ... )
  128. {
  129. TRACE( _T("CClusterFileShareSecurityInformation::GetSecurity() - Unknown error occurred.\n") );
  130. }
  131. return hr;
  132. } //*** CClusterFileShareSecurityInformation::GetSecurity()
  133. /////////////////////////////////////////////////////////////////////////////
  134. //++
  135. //
  136. // CClusterFileShareSecurityInformation::SetSecurity
  137. //
  138. // Routine Description:
  139. // Save the passed in descriptor
  140. //
  141. // Arguments:
  142. // RequestedInformation [IN]
  143. // ppSecurityDescriptor [IN] the new security descriptor
  144. // fDefault [IN]
  145. //
  146. // Return Value:
  147. //
  148. //
  149. //--
  150. /////////////////////////////////////////////////////////////////////////////
  151. STDMETHODIMP CClusterFileShareSecurityInformation::SetSecurity(
  152. SECURITY_INFORMATION SecurityInformation,
  153. PSECURITY_DESCRIPTOR pSecurityDescriptor
  154. )
  155. {
  156. AFX_MANAGE_STATE( AfxGetStaticModuleState() );
  157. HRESULT hr = E_FAIL;
  158. try
  159. {
  160. hr = CSecurityInformation::SetSecurity( SecurityInformation, pSecurityDescriptor );
  161. if ( hr == S_OK )
  162. {
  163. hr = Pcsp()->Pss()->Ppp()->SetSecurityDescriptor( pSecurityDescriptor );
  164. }
  165. }
  166. catch( ... )
  167. {
  168. ;
  169. }
  170. return hr;
  171. } //*** CClusterFileShareSecurityInformation::SetSecurity()
  172. /////////////////////////////////////////////////////////////////////////////
  173. //++
  174. //
  175. // CFileShareParamsPage::HrInit
  176. //
  177. // Routine Description:
  178. // Initialize the object
  179. //
  180. // Arguments:
  181. // pcsp [IN] back pointer to the parent property page
  182. // strServer [IN] cluster name
  183. //
  184. // Return Value:
  185. //
  186. //
  187. //--
  188. /////////////////////////////////////////////////////////////////////////////
  189. HRESULT CClusterFileShareSecurityInformation::HrInit(
  190. CClusterFileShareSecurityPage * pcsp,
  191. IN CString const & strServer,
  192. IN CString const & strNode
  193. )
  194. {
  195. ASSERT( pcsp != NULL );
  196. ASSERT( strServer.GetLength() > 0 );
  197. AFX_MANAGE_STATE( AfxGetStaticModuleState() );
  198. m_pcsp = pcsp;
  199. m_strServer = strServer;
  200. m_strNode = strNode;
  201. m_nLocalSIDErrorMessageID = IDS_LOCAL_ACCOUNTS_SPECIFIED_SMB;
  202. return S_OK;
  203. } //*** CClusterFileShareSecurityInformation::HrInit()
  204. //*************************************************************************//
  205. /////////////////////////////////////////////////////////////////////////////
  206. // CClusterFileShareSecurityPage security property page
  207. /////////////////////////////////////////////////////////////////////////////
  208. /////////////////////////////////////////////////////////////////////////////
  209. //++
  210. //
  211. // CClusterFileShareSecurityPage::CClusterFileShareSecurityPage
  212. //
  213. // Routine Description:
  214. // Default contructor
  215. //
  216. // Arguments:
  217. // none
  218. //
  219. // Return Value:
  220. // none
  221. //
  222. //--
  223. /////////////////////////////////////////////////////////////////////////////
  224. CClusterFileShareSecurityPage::CClusterFileShareSecurityPage( void )
  225. : m_hpage( 0 )
  226. , m_hkey( 0 )
  227. , m_psecinfo( NULL )
  228. , m_pss( NULL )
  229. {
  230. // AFX_MANAGE_STATE( AfxGetStaticModuleState() );
  231. } //*** CClusterFileShareSecurityPage::CClusterFileShareSecurityPage()
  232. /////////////////////////////////////////////////////////////////////////////
  233. //++
  234. //
  235. // CClusterFileShareSecurityPage::~CClusterFileShareSecurityPage
  236. //
  237. // Routine Description:
  238. // Destructor
  239. //
  240. // Arguments:
  241. // none
  242. //
  243. // Return Value:
  244. // none
  245. //
  246. //--
  247. /////////////////////////////////////////////////////////////////////////////
  248. CClusterFileShareSecurityPage::~CClusterFileShareSecurityPage( void )
  249. {
  250. AFX_MANAGE_STATE( AfxGetStaticModuleState() );
  251. m_psecinfo->Release();
  252. } //*** CClusterFileShareSecurityPage::~CClusterFileShareSecurityPage()
  253. /////////////////////////////////////////////////////////////////////////////
  254. //++
  255. //
  256. // CClusterFileShareSecurityPage::HrInit
  257. //
  258. // Routine Description:
  259. //
  260. //
  261. // Arguments:
  262. //
  263. //
  264. // Return Value:
  265. //
  266. //
  267. //--
  268. /////////////////////////////////////////////////////////////////////////////
  269. HRESULT CClusterFileShareSecurityPage::HrInit(
  270. IN CExtObject * peo,
  271. IN CFileShareSecuritySheet * pss,
  272. IN CString const & strNode
  273. )
  274. {
  275. ASSERT( peo != NULL );
  276. ASSERT( pss != NULL );
  277. AFX_MANAGE_STATE( AfxGetStaticModuleState() );
  278. HRESULT hr = E_FAIL;
  279. if ( ( pss != NULL ) && ( peo != NULL ) )
  280. {
  281. m_peo = peo;
  282. m_pss = pss;
  283. hr = CComObject<CClusterFileShareSecurityInformation>::CreateInstance( &m_psecinfo );
  284. if ( SUCCEEDED( hr ) )
  285. {
  286. m_psecinfo->AddRef();
  287. m_hkey = GetClusterKey( Hcluster(), KEY_ALL_ACCESS );
  288. if ( m_hkey != NULL )
  289. {
  290. m_hpage = CreateClusterSecurityPage( m_psecinfo );
  291. if ( m_hpage != NULL )
  292. {
  293. CString strServer;
  294. strServer.Format( _T( "\\\\%s" ), Peo()->StrClusterName() );
  295. hr = m_psecinfo->HrInit( this, strServer, strNode );
  296. }
  297. else
  298. {
  299. hr = E_FAIL;
  300. }
  301. }
  302. else
  303. {
  304. DWORD sc = ::GetLastError();
  305. hr = HRESULT_FROM_WIN32( sc );
  306. }
  307. }
  308. }
  309. return hr;
  310. } //*** CClusterFileShareSecurityPage::HrInit()