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.

607 lines
13 KiB

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (c) 2000-2001 Microsoft Corporation
  4. //
  5. // Module Name:
  6. // CResourcePhysicalDiskPartition.cpp
  7. //
  8. // Description:
  9. // CResourcePhysicalDiskPartition implementation.
  10. //
  11. // Maintained By:
  12. // Galen Barbee (GalenB) 02-AUG-2000
  13. //
  14. //////////////////////////////////////////////////////////////////////////////
  15. //////////////////////////////////////////////////////////////////////////////
  16. // Include Files
  17. //////////////////////////////////////////////////////////////////////////////
  18. #include "Pch.h"
  19. #include "CResourcePhysicalDiskPartition.h"
  20. #include <ClusCfgPrivate.h>
  21. //////////////////////////////////////////////////////////////////////////////
  22. // Constant Definitions
  23. //////////////////////////////////////////////////////////////////////////////
  24. DEFINE_THISCLASS("CResourcePhysicalDiskPartition")
  25. //////////////////////////////////////////////////////////////////////////////
  26. //++
  27. //
  28. // CResourcePhysicalDiskPartition::S_HrCreateInitializedInstance
  29. //
  30. // Description:
  31. // Create a CResourcePhysicalDiskPartition instance.
  32. //
  33. // Arguments:
  34. // ppunkOut
  35. //
  36. // Return Values:
  37. // S_OK
  38. // Success.
  39. //
  40. // E_POINTER
  41. // A passed in argument is NULL.
  42. //
  43. // E_OUTOFMEMORY
  44. // Out of memory.
  45. //
  46. // Other HRESULT error.
  47. //
  48. //--
  49. //////////////////////////////////////////////////////////////////////////////
  50. HRESULT
  51. CResourcePhysicalDiskPartition::S_HrCreateInstance(
  52. IUnknown ** ppunkOut
  53. )
  54. {
  55. TraceFunc( "" );
  56. HRESULT hr = S_OK;
  57. CResourcePhysicalDiskPartition * prpdp = NULL;
  58. if ( ppunkOut == NULL )
  59. {
  60. hr = THR( E_POINTER );
  61. goto Cleanup;
  62. }
  63. prpdp = new CResourcePhysicalDiskPartition;
  64. if ( prpdp == NULL )
  65. {
  66. hr = THR( E_OUTOFMEMORY );
  67. goto Cleanup;
  68. }
  69. hr = THR( prpdp->HrInit() );
  70. if ( FAILED( hr ) )
  71. {
  72. goto Cleanup;
  73. }
  74. hr = THR( prpdp->TypeSafeQI( IUnknown, ppunkOut ) );
  75. if ( FAILED( hr ) )
  76. {
  77. goto Cleanup;
  78. }
  79. Cleanup:
  80. if ( prpdp != NULL )
  81. {
  82. prpdp->Release();
  83. } // if:
  84. HRETURN( hr );
  85. } //*** CResourcePhysicalDiskPartition::S_HrCreateInitializedInstance
  86. //////////////////////////////////////////////////////////////////////////////
  87. //++
  88. //
  89. // CResourcePhysicalDiskPartition::CResourcePhysicalDiskPartition
  90. //
  91. // Description:
  92. // Constructor of the CResourcePhysicalDiskPartition class. This initializes
  93. // the m_cRef variable to 1 instead of 0 to account of possible
  94. // QueryInterface failure in DllGetClassObject.
  95. //
  96. // Arguments:
  97. // None.
  98. //
  99. // Return Value:
  100. // None.
  101. //
  102. // Remarks:
  103. // None.
  104. //
  105. //--
  106. //////////////////////////////////////////////////////////////////////////////
  107. CResourcePhysicalDiskPartition::CResourcePhysicalDiskPartition( void )
  108. : m_cRef( 1 )
  109. {
  110. TraceFunc( "" );
  111. InterlockedIncrement( &g_cObjects );
  112. TraceFuncExit();
  113. } //*** CResourcePhysicalDiskPartition::CResourcePhysicalDiskPartition
  114. //////////////////////////////////////////////////////////////////////////////
  115. //++
  116. //
  117. // CResourcePhysicalDiskPartition::~CResourcePhysicalDiskPartition
  118. //
  119. // Description:
  120. // Destructor of the CResourcePhysicalDiskPartition class.
  121. //
  122. // Arguments:
  123. // None.
  124. //
  125. // Return Value:
  126. // None.
  127. //
  128. // Remarks:
  129. // None.
  130. //
  131. //--
  132. //////////////////////////////////////////////////////////////////////////////
  133. CResourcePhysicalDiskPartition::~CResourcePhysicalDiskPartition( void )
  134. {
  135. TraceFunc( "" );
  136. InterlockedDecrement( &g_cObjects );
  137. TraceFuncExit();
  138. } //*** CResourcePhysicalDiskPartition::~CResourcePhysicalDiskPartition
  139. //
  140. //
  141. //
  142. HRESULT
  143. CResourcePhysicalDiskPartition::HrInit( void )
  144. {
  145. TraceFunc( "" );
  146. HRESULT hr = S_OK;
  147. // IUnknown
  148. Assert( m_cRef == 1 );
  149. HRETURN( hr );
  150. } //*** CResourcePhysicalDiskPartition::HrInit
  151. //*************************************************************************//
  152. /////////////////////////////////////////////////////////////////////////////
  153. // CResourcePhysicalDiskPartition -- IUknkown interface.
  154. /////////////////////////////////////////////////////////////////////////////
  155. //////////////////////////////////////////////////////////////////////////////
  156. //++
  157. //
  158. // CResourcePhysicalDiskPartition::QueryInterface
  159. //
  160. // Description:
  161. // Query this object for the passed in interface.
  162. //
  163. // Arguments:
  164. // riidIn
  165. // Id of interface requested.
  166. //
  167. // ppvOut
  168. // Pointer to the requested interface.
  169. //
  170. // Return Value:
  171. // S_OK
  172. // If the interface is available on this object.
  173. //
  174. // E_NOINTERFACE
  175. // If the interface is not available.
  176. //
  177. // E_POINTER
  178. // ppvOut was NULL.
  179. //
  180. // Remarks:
  181. // None.
  182. //
  183. //--
  184. //////////////////////////////////////////////////////////////////////////////
  185. STDMETHODIMP
  186. CResourcePhysicalDiskPartition::QueryInterface(
  187. REFIID riidIn
  188. , void ** ppvOut
  189. )
  190. {
  191. TraceQIFunc( riidIn, ppvOut );
  192. HRESULT hr = S_OK;
  193. //
  194. // Validate arguments.
  195. //
  196. Assert( ppvOut != NULL );
  197. if ( ppvOut == NULL )
  198. {
  199. hr = THR( E_POINTER );
  200. goto Cleanup;
  201. }
  202. //
  203. // Handle known interfaces.
  204. //
  205. if ( IsEqualIID( riidIn, IID_IUnknown ) )
  206. {
  207. *ppvOut = static_cast< IClusCfgPartitionInfo * >( this );
  208. } // if: IUnknown
  209. else if ( IsEqualIID( riidIn, IID_IClusCfgPartitionInfo) )
  210. {
  211. *ppvOut = TraceInterface( __THISCLASS__, IClusCfgPartitionInfo, this, 0 );
  212. } // else if: IClusCfgPartitionInfo
  213. else
  214. {
  215. *ppvOut = NULL;
  216. hr = E_NOINTERFACE;
  217. } // else
  218. //
  219. // Add a reference to the interface if successful.
  220. //
  221. if ( SUCCEEDED( hr ) )
  222. {
  223. ((IUnknown *) *ppvOut)->AddRef();
  224. } // if: success
  225. Cleanup:
  226. QIRETURN_IGNORESTDMARSHALLING( hr, riidIn );
  227. } //*** CResourcePhysicalDiskPartition::QueryInterface
  228. //////////////////////////////////////////////////////////////////////////////
  229. //++
  230. //
  231. // CResourcePhysicalDiskPartition::AddRef
  232. //
  233. // Description:
  234. // Increment the reference count of this object by one.
  235. //
  236. // Arguments:
  237. // None.
  238. //
  239. // Return Value:
  240. // The new reference count.
  241. //
  242. // Remarks:
  243. // None.
  244. //
  245. //--
  246. //////////////////////////////////////////////////////////////////////////////
  247. STDMETHODIMP_( ULONG )
  248. CResourcePhysicalDiskPartition::AddRef( void )
  249. {
  250. TraceFunc( "[IUnknown]" );
  251. InterlockedIncrement( &m_cRef );
  252. CRETURN( m_cRef );
  253. } //*** CResourcePhysicalDiskPartition::AddRef
  254. //////////////////////////////////////////////////////////////////////////////
  255. //++
  256. //
  257. // CResourcePhysicalDiskPartition::Release
  258. //
  259. // Description:
  260. // Decrement the reference count of this object by one.
  261. //
  262. // Arguments:
  263. // None.
  264. //
  265. // Return Value:
  266. // The new reference count.
  267. //
  268. // Remarks:
  269. // None.
  270. //
  271. //--
  272. //////////////////////////////////////////////////////////////////////////////
  273. STDMETHODIMP_( ULONG )
  274. CResourcePhysicalDiskPartition::Release( void )
  275. {
  276. TraceFunc( "[IUnknown]" );
  277. LONG cRef;
  278. cRef = InterlockedDecrement( &m_cRef );
  279. if ( cRef == 0 )
  280. {
  281. TraceDo( delete this );
  282. }
  283. CRETURN( cRef );
  284. } //*** CResourcePhysicalDiskPartition::Release
  285. //*************************************************************************//
  286. /////////////////////////////////////////////////////////////////////////////
  287. // CResourcePhysicalDiskPartition -- IClusCfgManagedResourceInfo interface.
  288. /////////////////////////////////////////////////////////////////////////////
  289. //////////////////////////////////////////////////////////////////////////////
  290. //++
  291. //
  292. // CResourcePhysicalDiskPartition::GetName
  293. //
  294. // Description:
  295. //
  296. // Arguments:
  297. //
  298. // Return Value:
  299. //
  300. // Remarks:
  301. // None.
  302. //
  303. //--
  304. //////////////////////////////////////////////////////////////////////////////
  305. STDMETHODIMP
  306. CResourcePhysicalDiskPartition::GetName(
  307. BSTR * pbstrNameOut
  308. )
  309. {
  310. TraceFunc( "[IClusCfgManagedResourceInfo]" );
  311. HRESULT hr = THR( E_NOTIMPL );
  312. HRETURN( hr );
  313. } //*** CResourcePhysicalDiskPartition::GetName
  314. //////////////////////////////////////////////////////////////////////////////
  315. //++
  316. //
  317. // CResourcePhysicalDiskPartition::GetDescription
  318. //
  319. // Description:
  320. //
  321. // Arguments:
  322. //
  323. // Return Value:
  324. //
  325. // Remarks:
  326. // None.
  327. //
  328. //--
  329. //////////////////////////////////////////////////////////////////////////////
  330. STDMETHODIMP
  331. CResourcePhysicalDiskPartition::GetDescription(
  332. BSTR * pbstrDescOut
  333. )
  334. {
  335. TraceFunc( "[IClusCfgManagedResourceInfo]" );
  336. HRESULT hr = THR( E_NOTIMPL );
  337. HRETURN( hr );
  338. } //*** CResourcePhysicalDiskPartition::GetDescription
  339. //////////////////////////////////////////////////////////////////////////////
  340. //++
  341. //
  342. // CResourcePhysicalDiskPartition::GetUID
  343. //
  344. // Description:
  345. //
  346. // Arguments:
  347. //
  348. // Return Value:
  349. //
  350. // Remarks:
  351. // None.
  352. //
  353. //--
  354. //////////////////////////////////////////////////////////////////////////////
  355. STDMETHODIMP
  356. CResourcePhysicalDiskPartition::GetUID(
  357. BSTR * pbstrUIDOut
  358. )
  359. {
  360. TraceFunc( "[IClusCfgManagedResourceInfo]" );
  361. HRESULT hr = THR( E_NOTIMPL );
  362. HRETURN( hr );
  363. } //*** CResourcePhysicalDiskPartition::GetUID
  364. //////////////////////////////////////////////////////////////////////////////
  365. //++
  366. //
  367. // CResourcePhysicalDiskPartition::GetSize
  368. //
  369. // Description:
  370. //
  371. // Arguments:
  372. //
  373. // Return Value:
  374. //
  375. // Remarks:
  376. // None.
  377. //
  378. //--
  379. //////////////////////////////////////////////////////////////////////////////
  380. STDMETHODIMP
  381. CResourcePhysicalDiskPartition::GetSize(
  382. ULONG * pcMegaBytes
  383. )
  384. {
  385. TraceFunc( "[IClusCfgManagedResourceInfo]" );
  386. HRESULT hr = S_OK;
  387. if ( pcMegaBytes == NULL )
  388. goto InvalidPointer;
  389. *pcMegaBytes = 0;
  390. Cleanup:
  391. HRETURN( hr );
  392. InvalidPointer:
  393. hr = THR( E_POINTER );
  394. goto Cleanup;
  395. } //*** CResourcePhysicalDiskPartition::GetSize
  396. //////////////////////////////////////////////////////////////////////////////
  397. //++
  398. //
  399. // CResourcePhysicalDiskPartition::GetDriveLetterMappings
  400. //
  401. // Description:
  402. //
  403. // Arguments:
  404. //
  405. // Return Value:
  406. //
  407. // Remarks:
  408. // None.
  409. //
  410. //--
  411. //////////////////////////////////////////////////////////////////////////////
  412. STDMETHODIMP
  413. CResourcePhysicalDiskPartition::GetDriveLetterMappings(
  414. SDriveLetterMapping * pdlmDriveLetterUsageOut
  415. )
  416. {
  417. TraceFunc( "[IClusCfgManagedResourceInfo]" );
  418. HRESULT hr = S_FALSE;
  419. if ( pdlmDriveLetterUsageOut == NULL )
  420. {
  421. hr = THR( E_POINTER );
  422. goto Cleanup;
  423. }
  424. ZeroMemory( pdlmDriveLetterUsageOut, sizeof(*pdlmDriveLetterUsageOut) );
  425. Cleanup:
  426. HRETURN( hr );
  427. } //*** CResourcePhysicalDiskPartition::GetDriveLetterMappings
  428. //////////////////////////////////////////////////////////////////////////////
  429. //++
  430. //
  431. // CResourcePhysicalDiskPartition::SetName
  432. //
  433. // Description:
  434. //
  435. // Arguments:
  436. //
  437. // Return Value:
  438. //
  439. // Remarks:
  440. // None.
  441. //
  442. //--
  443. //////////////////////////////////////////////////////////////////////////////
  444. STDMETHODIMP
  445. CResourcePhysicalDiskPartition::SetName( LPCWSTR pcszNameIn )
  446. {
  447. TraceFunc( "[IClusCfgManagedResourceInfo]" );
  448. HRESULT hr = THR( E_NOTIMPL );
  449. HRETURN( hr );
  450. } //*** CResourcePhysicalDiskPartition::SetName
  451. //////////////////////////////////////////////////////////////////////////////
  452. //++
  453. //
  454. // CResourcePhysicalDiskPartition::SetDescription
  455. //
  456. // Description:
  457. //
  458. // Arguments:
  459. //
  460. // Return Value:
  461. //
  462. // Remarks:
  463. // None.
  464. //
  465. //--
  466. //////////////////////////////////////////////////////////////////////////////
  467. STDMETHODIMP
  468. CResourcePhysicalDiskPartition::SetDescription( LPCWSTR pcszDescriptionIn )
  469. {
  470. TraceFunc( "[IClusCfgManagedResourceInfo]" );
  471. HRESULT hr = THR( E_NOTIMPL );
  472. HRETURN( hr );
  473. } //*** CResourcePhysicalDiskPartition::SetDescription
  474. //////////////////////////////////////////////////////////////////////////////
  475. //++
  476. //
  477. // CResourcePhysicalDiskPartition::SetDriveLetterMappings
  478. //
  479. // Description:
  480. //
  481. // Arguments:
  482. //
  483. // Return Value:
  484. //
  485. // Remarks:
  486. // None.
  487. //
  488. //--
  489. //////////////////////////////////////////////////////////////////////////////
  490. STDMETHODIMP
  491. CResourcePhysicalDiskPartition::SetDriveLetterMappings(
  492. SDriveLetterMapping dlmDriveLetterMappingIn
  493. )
  494. {
  495. TraceFunc( "[IClusCfgManagedResourceInfo]" );
  496. HRESULT hr = THR( E_NOTIMPL );
  497. HRETURN( hr );
  498. } //*** CResourcePhysicalDiskPartition::SetDriveLetterMappings