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.

330 lines
7.4 KiB

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (c) 2000 Microsoft Corporation
  4. //
  5. // Module Name:
  6. // PreCreateServices.h
  7. //
  8. // Description:
  9. // PreCreateServices implementation.
  10. //
  11. // Maintained By:
  12. // Geoffrey Pease (GPease) 15-JUN-2000
  13. //
  14. //////////////////////////////////////////////////////////////////////////////
  15. #include "pch.h"
  16. #include "GroupHandle.h"
  17. #include "ResourceEntry.h"
  18. #include "IPrivatePostCfgResource.h"
  19. #include "PreCreateServices.h"
  20. DEFINE_THISCLASS("CPreCreateServices")
  21. #define DEPENDENCY_INCREMENT 5
  22. // ************************************************************************
  23. //
  24. // Constructor / Destructor
  25. //
  26. // ************************************************************************
  27. //////////////////////////////////////////////////////////////////////////////
  28. //
  29. // HRESULT
  30. // CPreCreateServices::S_HrCreateInstance(
  31. // IUnknown ** ppunkOut
  32. // )
  33. //
  34. //////////////////////////////////////////////////////////////////////////////
  35. HRESULT
  36. CPreCreateServices::S_HrCreateInstance(
  37. IUnknown ** ppunkOut
  38. )
  39. {
  40. TraceFunc( "" );
  41. HRESULT hr = E_UNEXPECTED;
  42. Assert( ppunkOut != NULL );
  43. CPreCreateServices * pdummy = new CPreCreateServices;
  44. if ( pdummy != NULL )
  45. {
  46. hr = THR( pdummy->HrInit( ) );
  47. if ( SUCCEEDED( hr ) )
  48. {
  49. hr = THR( pdummy->TypeSafeQI( IUnknown, ppunkOut ) );
  50. }
  51. pdummy->Release( );
  52. }
  53. else
  54. {
  55. hr = E_OUTOFMEMORY;
  56. }
  57. HRETURN( hr );
  58. } // S_HrCreateInstance( )
  59. //////////////////////////////////////////////////////////////////////////////
  60. //
  61. // CPreCreateServices::CPreCreateServices( void )
  62. //
  63. //////////////////////////////////////////////////////////////////////////////
  64. CPreCreateServices::CPreCreateServices( void )
  65. {
  66. TraceFunc( "" );
  67. InterlockedIncrement( &g_cObjects );
  68. TraceFuncExit();
  69. } // CPreCreateServices( )
  70. //////////////////////////////////////////////////////////////////////////////
  71. //
  72. // HRESULT
  73. // CPreCreateServices::HrInit( void )
  74. //
  75. //////////////////////////////////////////////////////////////////////////////
  76. HRESULT
  77. CPreCreateServices::HrInit( void )
  78. {
  79. TraceFunc( "" );
  80. HRESULT hr = S_OK;
  81. // IUnknown stuff
  82. Assert( m_cRef == 0 );
  83. AddRef( ); // Add one count
  84. // Resource
  85. Assert( m_presentry == NULL );
  86. HRETURN( hr );
  87. } // HrInit( )
  88. //////////////////////////////////////////////////////////////////////////////
  89. //
  90. // CPreCreateServices::~CPreCreateServices( )
  91. //
  92. //////////////////////////////////////////////////////////////////////////////
  93. CPreCreateServices::~CPreCreateServices( )
  94. {
  95. TraceFunc( "" );
  96. InterlockedDecrement( &g_cObjects );
  97. TraceFuncExit();
  98. } // ~CPreCreateServices( )
  99. // ************************************************************************
  100. //
  101. // IUnknown
  102. //
  103. // ************************************************************************
  104. //////////////////////////////////////////////////////////////////////////////
  105. //
  106. // STDMETHODIMP
  107. // CPreCreateServices::QueryInterface(
  108. // REFIID riid,
  109. // LPVOID *ppv
  110. // )
  111. //
  112. //////////////////////////////////////////////////////////////////////////////
  113. STDMETHODIMP
  114. CPreCreateServices::QueryInterface(
  115. REFIID riid,
  116. LPVOID *ppv
  117. )
  118. {
  119. TraceQIFunc( riid, ppv );
  120. HRESULT hr = E_NOINTERFACE;
  121. if ( IsEqualIID( riid, IID_IUnknown ) )
  122. {
  123. *ppv = static_cast< IClusCfgResourcePreCreate * >( this );
  124. hr = S_OK;
  125. } // if: IUnknown
  126. else if ( IsEqualIID( riid, IID_IClusCfgResourcePreCreate ) )
  127. {
  128. *ppv = TraceInterface( __THISCLASS__, IClusCfgResourcePreCreate, this, 0 );
  129. hr = S_OK;
  130. } // else if: IClusCfgResourcePreCreate
  131. else if ( IsEqualIID( riid, IID_IPrivatePostCfgResource ) )
  132. {
  133. *ppv = TraceInterface( __THISCLASS__, IPrivatePostCfgResource, this, 0 );
  134. hr = S_OK;
  135. } // else if: IPrivatePostCfgResource
  136. if ( SUCCEEDED( hr ) )
  137. {
  138. ((IUnknown*) *ppv)->AddRef( );
  139. } // if: success
  140. QIRETURN( hr, riid );
  141. } // QueryInterface( )
  142. //////////////////////////////////////////////////////////////////////////////
  143. //
  144. // STDMETHODIMP_(ULONG)
  145. // CPreCreateServices::AddRef( void )
  146. //
  147. //////////////////////////////////////////////////////////////////////////////
  148. STDMETHODIMP_(ULONG)
  149. CPreCreateServices::AddRef( void )
  150. {
  151. TraceFunc( "[IUnknown]" );
  152. m_cRef ++; // apartment model
  153. RETURN( m_cRef );
  154. } // AddRef( )
  155. //////////////////////////////////////////////////////////////////////////////
  156. //
  157. // STDMETHODIMP_(ULONG)
  158. // CPreCreateServices::Release( void )
  159. //
  160. //////////////////////////////////////////////////////////////////////////////
  161. STDMETHODIMP_(ULONG)
  162. CPreCreateServices::Release( void )
  163. {
  164. TraceFunc( "[IUnknown]" );
  165. m_cRef --; // apartment model
  166. if ( m_cRef )
  167. RETURN( m_cRef );
  168. TraceDo( delete this );
  169. RETURN(0);
  170. } // Release( )
  171. //****************************************************************************
  172. //
  173. // IClusCfgResourcePreCreate
  174. //
  175. //****************************************************************************
  176. //////////////////////////////////////////////////////////////////////////////
  177. //
  178. // STDMETHODIMP
  179. // CPreCreateServices::SetType(
  180. // CLSID * pclsidIn
  181. // )
  182. //
  183. //////////////////////////////////////////////////////////////////////////////
  184. STDMETHODIMP
  185. CPreCreateServices::SetType(
  186. CLSID * pclsidIn
  187. )
  188. {
  189. TraceFunc( "[IClusCfgResourcePreCreate]" );
  190. HRESULT hr;
  191. Assert( m_presentry != NULL );
  192. hr = THR( m_presentry->SetType( pclsidIn ) );
  193. HRETURN( hr );
  194. } // SetType( )
  195. //////////////////////////////////////////////////////////////////////////////
  196. //
  197. // STDMETHODIMP
  198. // CPreCreateServices::SetClassType(
  199. // CLSID * pclsidIn
  200. // )
  201. //
  202. //////////////////////////////////////////////////////////////////////////////
  203. STDMETHODIMP
  204. CPreCreateServices::SetClassType(
  205. CLSID * pclsidIn
  206. )
  207. {
  208. TraceFunc( "[IClusCfgResourcePreCreate]" );
  209. HRESULT hr;
  210. Assert( m_presentry != NULL );
  211. hr = THR( m_presentry->SetClassType( pclsidIn ) );
  212. HRETURN( hr );
  213. } // SetClassType( )
  214. //////////////////////////////////////////////////////////////////////////////
  215. //
  216. // STDMETHODIMP
  217. // CPreCreateServices::SetDependency(
  218. // LPCLSID pclsidDepResTypeIn,
  219. // DWORD dfIn
  220. // )
  221. //
  222. //////////////////////////////////////////////////////////////////////////////
  223. STDMETHODIMP
  224. CPreCreateServices::SetDependency(
  225. LPCLSID pclsidDepResTypeIn,
  226. DWORD dfIn
  227. )
  228. {
  229. TraceFunc( "[IClusCfgResourcePreCreate]" );
  230. HRESULT hr;
  231. Assert( m_presentry != NULL );
  232. hr = THR( m_presentry->AddTypeDependency( pclsidDepResTypeIn, (EDependencyFlags) dfIn ) );
  233. HRETURN( hr );
  234. } // SetDependency( )
  235. //****************************************************************************
  236. //
  237. // IPrivatePostCfgResource
  238. //
  239. //****************************************************************************
  240. //////////////////////////////////////////////////////////////////////////////
  241. //
  242. // STDMETHODIMP
  243. // CPreCreateServices::SetEntry(
  244. // CResourceEntry * presentryIn
  245. // )
  246. //
  247. //////////////////////////////////////////////////////////////////////////////
  248. STDMETHODIMP
  249. CPreCreateServices::SetEntry(
  250. CResourceEntry * presentryIn
  251. )
  252. {
  253. TraceFunc( "[IPrivatePostCfgResource]" );
  254. HRESULT hr = S_OK;
  255. m_presentry = presentryIn;
  256. HRETURN( hr );
  257. } // SetEntry( )