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.

299 lines
7.3 KiB

  1. //*********************************************************************
  2. //* Microsoft Windows **
  3. //* Copyright(c) Microsoft Corp., 1999 **
  4. //*********************************************************************
  5. //
  6. // PASSPORT.CPP - Header for the implementation of CPassport
  7. //
  8. // HISTORY:
  9. //
  10. // 1/27/99 a-jaswed Created.
  11. //
  12. #include "passport.h"
  13. #include "appdefs.h"
  14. #include "dispids.h"
  15. DISPATCHLIST PassportExternalInterface[] =
  16. {
  17. {L"get_PassportID", DISPID_PASSPORT_GET_ID },
  18. {L"set_PassportID", DISPID_PASSPORT_SET_ID },
  19. {L"get_PassportPassword", DISPID_PASSPORT_GET_PASSWORD },
  20. {L"set_PassportPassword", DISPID_PASSPORT_SET_PASSWORD },
  21. {L"get_PassportLocale", DISPID_PASSPORT_GET_LOCALE },
  22. {L"set_PassportLocale", DISPID_PASSPORT_SET_LOCALE }
  23. };
  24. /////////////////////////////////////////////////////////////
  25. // CPassport::CPassport
  26. CPassport::CPassport()
  27. {
  28. // Init member vars
  29. m_cRef = 0;
  30. m_bstrID = SysAllocString(L"\0");
  31. m_bstrPassword = SysAllocString(L"\0");
  32. m_bstrLocale = SysAllocString(L"\0");
  33. }
  34. /////////////////////////////////////////////////////////////
  35. // CPassport::~CPassport
  36. CPassport::~CPassport()
  37. {
  38. assert(m_cRef == 0);
  39. }
  40. ////////////////////////////////////////////////
  41. ////////////////////////////////////////////////
  42. //// GET / SET :: PassportID
  43. ////
  44. HRESULT CPassport::set_PassportID(BSTR bstrVal)
  45. {
  46. if (NULL != m_bstrID)
  47. {
  48. SysFreeString(m_bstrID);
  49. }
  50. m_bstrID = SysAllocString(bstrVal);
  51. return S_OK;
  52. }
  53. HRESULT CPassport::get_PassportID(BSTR* pbstrVal)
  54. {
  55. *pbstrVal = SysAllocString(m_bstrID);
  56. return S_OK;
  57. }
  58. ////////////////////////////////////////////////
  59. ////////////////////////////////////////////////
  60. //// GET / SET :: PassportPassword
  61. ////
  62. HRESULT CPassport::set_PassportPassword(BSTR bstrVal)
  63. {
  64. if (NULL != m_bstrPassword)
  65. {
  66. SysFreeString(m_bstrPassword);
  67. }
  68. m_bstrPassword = SysAllocString(bstrVal);
  69. return S_OK;
  70. }
  71. HRESULT CPassport::get_PassportPassword(BSTR* pbstrVal)
  72. {
  73. *pbstrVal = SysAllocString(m_bstrPassword);
  74. return S_OK;
  75. }
  76. ////////////////////////////////////////////////
  77. ////////////////////////////////////////////////
  78. //// GET / SET :: PassportLocale
  79. ////
  80. HRESULT CPassport::set_PassportLocale(BSTR bstrVal)
  81. {
  82. if (NULL != m_bstrLocale)
  83. {
  84. SysFreeString(m_bstrLocale);
  85. }
  86. m_bstrLocale = SysAllocString(bstrVal);
  87. return S_OK;
  88. }
  89. HRESULT CPassport::get_PassportLocale(BSTR* pbstrVal)
  90. {
  91. *pbstrVal = SysAllocString(m_bstrLocale);
  92. return S_OK;
  93. }
  94. /////////////////////////////////////////////////////////////
  95. /////////////////////////////////////////////////////////////
  96. /////////////////////////////////////////////////////////////
  97. /////// IUnknown implementation
  98. ///////
  99. ///////
  100. /////////////////////////////////////////////////////////////
  101. // CPassport::QueryInterface
  102. STDMETHODIMP CPassport::QueryInterface(REFIID riid, LPVOID* ppvObj)
  103. {
  104. // must set out pointer parameters to NULL
  105. *ppvObj = NULL;
  106. if ( riid == IID_IUnknown)
  107. {
  108. AddRef();
  109. *ppvObj = (IUnknown*)this;
  110. return ResultFromScode(S_OK);
  111. }
  112. if (riid == IID_IDispatch)
  113. {
  114. AddRef();
  115. *ppvObj = (IDispatch*)this;
  116. return ResultFromScode(S_OK);
  117. }
  118. // Not a supported interface
  119. return ResultFromScode(E_NOINTERFACE);
  120. }
  121. /////////////////////////////////////////////////////////////
  122. // CPassport::AddRef
  123. STDMETHODIMP_(ULONG) CPassport::AddRef()
  124. {
  125. return ++m_cRef;
  126. }
  127. /////////////////////////////////////////////////////////////
  128. // CPassport::Release
  129. STDMETHODIMP_(ULONG) CPassport::Release()
  130. {
  131. return --m_cRef;
  132. }
  133. /////////////////////////////////////////////////////////////
  134. /////////////////////////////////////////////////////////////
  135. /////////////////////////////////////////////////////////////
  136. /////// IDispatch implementation
  137. ///////
  138. ///////
  139. /////////////////////////////////////////////////////////////
  140. // CPassport::GetTypeInfo
  141. STDMETHODIMP CPassport::GetTypeInfo(UINT, LCID, ITypeInfo**)
  142. {
  143. return E_NOTIMPL;
  144. }
  145. /////////////////////////////////////////////////////////////
  146. // CPassport::GetTypeInfoCount
  147. STDMETHODIMP CPassport::GetTypeInfoCount(UINT* pcInfo)
  148. {
  149. return E_NOTIMPL;
  150. }
  151. /////////////////////////////////////////////////////////////
  152. // CPassport::GetIDsOfNames
  153. STDMETHODIMP CPassport::GetIDsOfNames(REFIID riid,
  154. OLECHAR** rgszNames,
  155. UINT cNames,
  156. LCID lcid,
  157. DISPID* rgDispId)
  158. {
  159. HRESULT hr = DISP_E_UNKNOWNNAME;
  160. rgDispId[0] = DISPID_UNKNOWN;
  161. for (int iX = 0; iX < sizeof(PassportExternalInterface)/sizeof(DISPATCHLIST); iX ++)
  162. {
  163. if(lstrcmp(PassportExternalInterface[iX].szName, rgszNames[0]) == 0)
  164. {
  165. rgDispId[0] = PassportExternalInterface[iX].dwDispID;
  166. hr = NOERROR;
  167. break;
  168. }
  169. }
  170. // Set the disid's for the parameters
  171. if (cNames > 1)
  172. {
  173. // Set a DISPID for function parameters
  174. for (UINT i = 1; i < cNames ; i++)
  175. rgDispId[i] = DISPID_UNKNOWN;
  176. }
  177. return hr;
  178. }
  179. /////////////////////////////////////////////////////////////
  180. // CPassport::Invoke
  181. HRESULT CPassport::Invoke
  182. (
  183. DISPID dispidMember,
  184. REFIID riid,
  185. LCID lcid,
  186. WORD wFlags,
  187. DISPPARAMS* pdispparams,
  188. VARIANT* pvarResult,
  189. EXCEPINFO* pexcepinfo,
  190. UINT* puArgErr
  191. )
  192. {
  193. HRESULT hr = S_OK;
  194. switch(dispidMember)
  195. {
  196. case DISPID_PASSPORT_GET_ID:
  197. {
  198. if(pvarResult)
  199. {
  200. VariantInit(pvarResult);
  201. V_VT(pvarResult) = VT_BSTR;
  202. get_PassportID(&(pvarResult->bstrVal));
  203. }
  204. break;
  205. }
  206. case DISPID_PASSPORT_SET_ID:
  207. {
  208. if(pdispparams && &pdispparams[0].rgvarg[0])
  209. set_PassportID(pdispparams[0].rgvarg[0].bstrVal);
  210. break;
  211. }
  212. case DISPID_PASSPORT_GET_PASSWORD:
  213. {
  214. if(pvarResult)
  215. {
  216. VariantInit(pvarResult);
  217. V_VT(pvarResult) = VT_BSTR;
  218. get_PassportPassword(&(pvarResult->bstrVal));
  219. }
  220. break;
  221. }
  222. case DISPID_PASSPORT_SET_PASSWORD:
  223. {
  224. if(pdispparams && &pdispparams[0].rgvarg[0])
  225. set_PassportPassword(pdispparams[0].rgvarg[0].bstrVal);
  226. break;
  227. }
  228. case DISPID_PASSPORT_GET_LOCALE:
  229. {
  230. if(pvarResult)
  231. {
  232. VariantInit(pvarResult);
  233. V_VT(pvarResult) = VT_BSTR;
  234. get_PassportLocale(&(pvarResult->bstrVal));
  235. }
  236. break;
  237. }
  238. case DISPID_PASSPORT_SET_LOCALE:
  239. {
  240. if(pdispparams && &pdispparams[0].rgvarg[0])
  241. set_PassportLocale(pdispparams[0].rgvarg[0].bstrVal);
  242. break;
  243. }
  244. default:
  245. {
  246. hr = DISP_E_MEMBERNOTFOUND;
  247. break;
  248. }
  249. }
  250. return hr;
  251. }