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.

351 lines
7.0 KiB

  1. //+-------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. //
  5. // Copyright (C) Microsoft Corporation, 1995 - 1999
  6. //
  7. // File: viewattr.cpp
  8. //
  9. // Contents: IEnumCERTVIEWATTRIBUTE IDispatch helper functions
  10. //
  11. //--------------------------------------------------------------------------
  12. #include <pch.cpp>
  13. #pragma hdrstop
  14. #include <stdlib.h>
  15. #include "csdisp.h"
  16. #include "csprop.h"
  17. #define __dwFILE__ __dwFILE_CERTLIB_VIEWATTR_CPP__
  18. //+------------------------------------------------------------------------
  19. // IEnumCERTVIEWATTRIBUTE dispatch support
  20. //+------------------------------------
  21. // OpenConnection method:
  22. static OLECHAR *_apszNext[] = {
  23. TEXT("Next"),
  24. };
  25. //+------------------------------------
  26. // GetName method:
  27. static OLECHAR *_apszGetName[] = {
  28. TEXT("GetName"),
  29. };
  30. //+------------------------------------
  31. // GetValue method:
  32. static OLECHAR *_apszGetValue[] = {
  33. TEXT("GetValue"),
  34. };
  35. //+------------------------------------
  36. // Skip method:
  37. static OLECHAR *_apszSkip[] = {
  38. TEXT("Skip"),
  39. TEXT("celt"),
  40. };
  41. //+------------------------------------
  42. // Reset method:
  43. static OLECHAR *_apszReset[] = {
  44. TEXT("Reset"),
  45. };
  46. //+------------------------------------
  47. // Clone method:
  48. static OLECHAR *_apszClone[] = {
  49. TEXT("Clone"),
  50. };
  51. //+------------------------------------
  52. // Dispatch Table:
  53. DISPATCHTABLE g_adtViewAttribute[] =
  54. {
  55. #define VIEWATTR_NEXT 0
  56. DECLARE_DISPATCH_ENTRY(_apszNext)
  57. #define VIEWATTR_GETNAME 1
  58. DECLARE_DISPATCH_ENTRY(_apszGetName)
  59. #define VIEWATTR_GETVALUE 2
  60. DECLARE_DISPATCH_ENTRY(_apszGetValue)
  61. #define VIEWATTR_SKIP 3
  62. DECLARE_DISPATCH_ENTRY(_apszSkip)
  63. #define VIEWATTR_RESET 4
  64. DECLARE_DISPATCH_ENTRY(_apszReset)
  65. #define VIEWATTR_CLONE 5
  66. DECLARE_DISPATCH_ENTRY(_apszClone)
  67. };
  68. #define CVIEWATTRDISPATCH (ARRAYSIZE(g_adtViewAttribute))
  69. HRESULT
  70. ViewAttribute_Init2(
  71. IN BOOL fIDispatch,
  72. IN IEnumCERTVIEWATTRIBUTE *pEnumAttribute,
  73. OUT DISPATCHINTERFACE *pdiViewAttribute)
  74. {
  75. HRESULT hr;
  76. IDispatch *pDispatch = NULL;
  77. static BOOL s_fInitialized = FALSE;
  78. pdiViewAttribute->pDispatchTable = NULL;
  79. pdiViewAttribute->pDispatch = NULL;
  80. pdiViewAttribute->pUnknown = NULL;
  81. if (fIDispatch)
  82. {
  83. hr = pEnumAttribute->QueryInterface(
  84. IID_IDispatch,
  85. (VOID **) &pDispatch);
  86. _JumpIfError(hr, error, "QueryInterface");
  87. hr = DispatchGetIds(
  88. pDispatch,
  89. CVIEWATTRDISPATCH,
  90. g_adtViewAttribute,
  91. pdiViewAttribute);
  92. _JumpIfError(hr, error, "DispatchGetIds");
  93. pdiViewAttribute->pDispatch = pDispatch;
  94. pDispatch = NULL;
  95. }
  96. else
  97. {
  98. pEnumAttribute->AddRef();
  99. pdiViewAttribute->pUnknown = (IUnknown *) pEnumAttribute;
  100. hr = S_OK;
  101. }
  102. pdiViewAttribute->pDispatchTable = g_adtViewAttribute;
  103. error:
  104. if (NULL != pDispatch)
  105. {
  106. pDispatch->Release();
  107. }
  108. return(hr);
  109. }
  110. VOID
  111. ViewAttribute_Release(
  112. IN OUT DISPATCHINTERFACE *pdiViewAttribute)
  113. {
  114. DispatchRelease(pdiViewAttribute);
  115. }
  116. HRESULT
  117. ViewAttribute_Next(
  118. IN DISPATCHINTERFACE *pdiViewAttribute,
  119. OUT LONG *pIndex)
  120. {
  121. HRESULT hr;
  122. CSASSERT(NULL != pdiViewAttribute && NULL != pdiViewAttribute->pDispatchTable);
  123. if (NULL != pdiViewAttribute->pDispatch)
  124. {
  125. hr = DispatchInvoke(
  126. pdiViewAttribute,
  127. VIEWATTR_NEXT,
  128. 0,
  129. NULL,
  130. VT_I4,
  131. pIndex);
  132. _JumpIfError2(hr, error, "Invoke(Next)", S_FALSE);
  133. }
  134. else
  135. {
  136. hr = ((IEnumCERTVIEWATTRIBUTE *) pdiViewAttribute->pUnknown)->Next(pIndex);
  137. _JumpIfError2(hr, error, "Next", S_FALSE);
  138. }
  139. error:
  140. return(hr);
  141. }
  142. HRESULT
  143. ViewAttribute_GetName(
  144. IN DISPATCHINTERFACE *pdiViewAttribute,
  145. OUT BSTR *pstrOut)
  146. {
  147. HRESULT hr;
  148. CSASSERT(NULL != pdiViewAttribute && NULL != pdiViewAttribute->pDispatchTable);
  149. if (NULL != pdiViewAttribute->pDispatch)
  150. {
  151. hr = DispatchInvoke(
  152. pdiViewAttribute,
  153. VIEWATTR_GETNAME,
  154. 0,
  155. NULL,
  156. VT_BSTR,
  157. pstrOut);
  158. _JumpIfError(hr, error, "Invoke(GetName)");
  159. }
  160. else
  161. {
  162. hr = ((IEnumCERTVIEWATTRIBUTE *) pdiViewAttribute->pUnknown)->GetName(pstrOut);
  163. _JumpIfError(hr, error, "GetName");
  164. }
  165. error:
  166. return(hr);
  167. }
  168. HRESULT
  169. ViewAttribute_GetValue(
  170. IN DISPATCHINTERFACE *pdiViewAttribute,
  171. OUT BSTR *pstrOut)
  172. {
  173. HRESULT hr;
  174. CSASSERT(NULL != pdiViewAttribute && NULL != pdiViewAttribute->pDispatchTable);
  175. if (NULL != pdiViewAttribute->pDispatch)
  176. {
  177. hr = DispatchInvoke(
  178. pdiViewAttribute,
  179. VIEWATTR_GETVALUE,
  180. 0,
  181. NULL,
  182. VT_BSTR,
  183. pstrOut);
  184. _JumpIfError(hr, error, "Invoke(GetValue)");
  185. }
  186. else
  187. {
  188. hr = ((IEnumCERTVIEWATTRIBUTE *) pdiViewAttribute->pUnknown)->GetValue(
  189. pstrOut);
  190. _JumpIfError(hr, error, "GetValue");
  191. }
  192. error:
  193. return(hr);
  194. }
  195. HRESULT
  196. ViewAttribute_Skip(
  197. IN DISPATCHINTERFACE *pdiViewAttribute,
  198. IN LONG celt)
  199. {
  200. HRESULT hr;
  201. CSASSERT(NULL != pdiViewAttribute && NULL != pdiViewAttribute->pDispatchTable);
  202. if (NULL != pdiViewAttribute->pDispatch)
  203. {
  204. VARIANT avar[1];
  205. avar[0].vt = VT_I4;
  206. avar[0].lVal = celt;
  207. hr = DispatchInvoke(
  208. pdiViewAttribute,
  209. VIEWATTR_SKIP,
  210. ARRAYSIZE(avar),
  211. avar,
  212. 0,
  213. NULL);
  214. _JumpIfError(hr, error, "Invoke(Skip)");
  215. }
  216. else
  217. {
  218. hr = ((IEnumCERTVIEWATTRIBUTE *) pdiViewAttribute->pUnknown)->Skip(celt);
  219. _JumpIfError(hr, error, "Skip");
  220. }
  221. error:
  222. return(hr);
  223. }
  224. HRESULT
  225. ViewAttribute_Reset(
  226. IN DISPATCHINTERFACE *pdiViewAttribute)
  227. {
  228. HRESULT hr;
  229. CSASSERT(NULL != pdiViewAttribute && NULL != pdiViewAttribute->pDispatchTable);
  230. if (NULL != pdiViewAttribute->pDispatch)
  231. {
  232. hr = DispatchInvoke(
  233. pdiViewAttribute,
  234. VIEWATTR_RESET,
  235. 0,
  236. NULL,
  237. 0,
  238. NULL);
  239. _JumpIfError(hr, error, "Invoke(Reset)");
  240. }
  241. else
  242. {
  243. hr = ((IEnumCERTVIEWATTRIBUTE *) pdiViewAttribute->pUnknown)->Reset();
  244. _JumpIfError(hr, error, "Reset");
  245. }
  246. error:
  247. return(hr);
  248. }
  249. HRESULT
  250. ViewAttribute_Clone(
  251. IN DISPATCHINTERFACE *pdiViewAttribute,
  252. OUT DISPATCHINTERFACE *pdiViewAttributeClone)
  253. {
  254. HRESULT hr;
  255. IEnumCERTVIEWATTRIBUTE *pEnumAttribute = NULL;
  256. CSASSERT(NULL != pdiViewAttribute && NULL != pdiViewAttribute->pDispatchTable);
  257. if (NULL != pdiViewAttribute->pDispatch)
  258. {
  259. hr = DispatchInvoke(
  260. pdiViewAttribute,
  261. VIEWATTR_CLONE,
  262. 0,
  263. NULL,
  264. VT_DISPATCH,
  265. &pEnumAttribute);
  266. _JumpIfError(hr, error, "Invoke(Clone)");
  267. }
  268. else
  269. {
  270. hr = ((IEnumCERTVIEWATTRIBUTE *) pdiViewAttribute->pUnknown)->Clone(
  271. &pEnumAttribute);
  272. _JumpIfError(hr, error, "Clone");
  273. }
  274. hr = ViewAttribute_Init2(
  275. NULL != pdiViewAttribute->pDispatch,
  276. pEnumAttribute,
  277. pdiViewAttributeClone);
  278. _JumpIfError(hr, error, "ViewAttribute_Init2");
  279. error:
  280. if (NULL != pEnumAttribute)
  281. {
  282. pEnumAttribute->Release();
  283. }
  284. return(hr);
  285. }