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.

184 lines
4.9 KiB

  1. /**************************************************************************
  2. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  3. ANY KIND, EITHER EXPRESSED OR TFPLIED, INCLUDING BUT NOT LIMITED TO
  4. THE TFPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  5. PARTICULAR PURPOSE.
  6. Copyright 1997 Microsoft Corporation. All Rights Reserved.
  7. **************************************************************************/
  8. /**************************************************************************
  9. File: ClsFact.cpp
  10. Description: Implements CClassFactory.
  11. **************************************************************************/
  12. /**************************************************************************
  13. include statements
  14. **************************************************************************/
  15. #include "private.h"
  16. #include "ClsFact.h"
  17. #include "Guid.h"
  18. #include <shlapip.h>
  19. /**************************************************************************
  20. private function prototypes
  21. **************************************************************************/
  22. /**************************************************************************
  23. global variables
  24. **************************************************************************/
  25. ///////////////////////////////////////////////////////////////////////////
  26. //
  27. // IClassFactory implementation
  28. //
  29. /**************************************************************************
  30. CClassFactory::CClassFactory
  31. **************************************************************************/
  32. CClassFactory::CClassFactory(CLSID clsid)
  33. {
  34. Dbg_MemSetThisName(TEXT("CClassFactory"));
  35. m_clsidObject = clsid;
  36. m_ObjRefCount = 1;
  37. g_DllRefCount++;
  38. }
  39. /**************************************************************************
  40. CClassFactory::~CClassFactory
  41. **************************************************************************/
  42. CClassFactory::~CClassFactory()
  43. {
  44. g_DllRefCount--;
  45. }
  46. /**************************************************************************
  47. CClassFactory::QueryInterface
  48. **************************************************************************/
  49. STDMETHODIMP CClassFactory::QueryInterface(REFIID riid, LPVOID *ppReturn)
  50. {
  51. *ppReturn = NULL;
  52. if(IsEqualIID(riid, IID_IUnknown))
  53. {
  54. *ppReturn = this;
  55. }
  56. else if(IsEqualIID(riid, IID_IClassFactory))
  57. {
  58. *ppReturn = (IClassFactory*)this;
  59. }
  60. if(*ppReturn)
  61. {
  62. (*(LPUNKNOWN*)ppReturn)->AddRef();
  63. return S_OK;
  64. }
  65. return E_NOINTERFACE;
  66. }
  67. /**************************************************************************
  68. CClassFactory::AddRef
  69. **************************************************************************/
  70. STDMETHODIMP_(DWORD) CClassFactory::AddRef()
  71. {
  72. return ++m_ObjRefCount;
  73. }
  74. /**************************************************************************
  75. CClassFactory::Release
  76. **************************************************************************/
  77. STDMETHODIMP_(DWORD) CClassFactory::Release()
  78. {
  79. if (--m_ObjRefCount == 0)
  80. {
  81. delete this;
  82. return 0;
  83. }
  84. return m_ObjRefCount;
  85. }
  86. /**************************************************************************
  87. CClassFactory::CreateInstance
  88. **************************************************************************/
  89. const TCHAR c_szCicLoaderWndClass[] = TEXT("CicLoaderWndClass");
  90. STDMETHODIMP CClassFactory::CreateInstance( LPUNKNOWN pUnknown,
  91. REFIID riid,
  92. LPVOID *ppObject)
  93. {
  94. //
  95. // Look up disabling Text Services status from the registry.
  96. // If it is disabled, return fail not to support language deskband.
  97. //
  98. if (IsDisabledTextServices())
  99. {
  100. return E_FAIL;
  101. }
  102. HRESULT hResult = E_FAIL;
  103. LPVOID pTemp = NULL;
  104. *ppObject = NULL;
  105. if(pUnknown != NULL)
  106. return CLASS_E_NOAGGREGATION;
  107. //create the proper object
  108. if (IsEqualCLSID(m_clsidObject, CLSID_MSUTBDeskBand))
  109. {
  110. CDeskBand *pDeskBand = new CDeskBand();
  111. if(NULL == pDeskBand)
  112. return E_OUTOFMEMORY;
  113. pTemp = pDeskBand;
  114. }
  115. if(pTemp)
  116. {
  117. //get the QueryInterface return for our return value
  118. hResult = ((LPUNKNOWN)pTemp)->QueryInterface(riid, ppObject);
  119. //call Release to decement the ref count
  120. ((LPUNKNOWN)pTemp)->Release();
  121. }
  122. return hResult;
  123. }
  124. /**************************************************************************
  125. CClassFactory::LockServer
  126. **************************************************************************/
  127. STDMETHODIMP CClassFactory::LockServer(BOOL)
  128. {
  129. return E_NOTIMPL;
  130. }