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.

355 lines
8.2 KiB

  1. //---------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 1997
  5. //
  6. // File: cenumns.cxx
  7. //
  8. // Contents: Windows NT 4.0 Enumerator Code
  9. //
  10. // CIISNamespaceEnum::Create
  11. // CIISNamespaceEnum::CIISNamespaceEnum
  12. // CIISNamespaceEnum::~CIISNamespaceEnum
  13. // CIISNamespaceEnum::Next
  14. // CIISNamespaceEnum::GetServerObject
  15. // CIISNamespaceEnum::EnumServerObjects
  16. //
  17. // History: 21-Feb-97 SophiaC Created.
  18. //----------------------------------------------------------------------------
  19. #include "iis.hxx"
  20. #include "charset.hxx"
  21. #pragma hdrstop
  22. #define ENUM_BUFFER_SIZE (1024 * 16)
  23. #define DEFAULT_ADMIN_SERVER_KEY \
  24. L"SOFTWARE\\Microsoft\\ADs\\Providers\\IIS\\"
  25. #define DEFAULT_ADMIN_SERVER_VALUE_KEY L"DefaultAdminServer"
  26. //+---------------------------------------------------------------------------
  27. //
  28. // Function: CIISNamespaceEnum::Create
  29. //
  30. // Synopsis:
  31. //
  32. // Arguments: [pCollection]
  33. // [ppEnumVariant]
  34. //
  35. // Returns: HRESULT
  36. //
  37. // Modifies:
  38. //
  39. // History:
  40. //
  41. //----------------------------------------------------------------------------
  42. HRESULT
  43. CIISNamespaceEnum::Create(
  44. CIISNamespaceEnum FAR* FAR* ppenumvariant,
  45. VARIANT var,
  46. CCredentials& Credentials
  47. )
  48. {
  49. RRETURN(E_NOTIMPL);
  50. // HRESULT hr = S_OK;
  51. // CIISNamespaceEnum FAR* penumvariant = NULL;
  52. // DWORD dwStatus;
  53. //
  54. // penumvariant = new CIISNamespaceEnum();
  55. //
  56. // if (penumvariant == NULL){
  57. // hr = E_OUTOFMEMORY;
  58. // BAIL_ON_FAILURE(hr);
  59. // }
  60. //
  61. // hr = ObjectTypeList::CreateObjectTypeList(
  62. // var,
  63. // &penumvariant->_pObjList
  64. // );
  65. // BAIL_ON_FAILURE(hr);
  66. //
  67. // penumvariant->_Credentials = Credentials;
  68. //
  69. // *ppenumvariant = penumvariant;
  70. //
  71. // RRETURN(hr);
  72. //
  73. // error:
  74. // if (penumvariant) {
  75. // delete penumvariant;
  76. // }
  77. // RRETURN(hr);
  78. }
  79. //+---------------------------------------------------------------------------
  80. //
  81. // Function: CIISNamespaceEnum::CIISNamespaceEnum
  82. //
  83. // Synopsis:
  84. //
  85. //
  86. // Arguments:
  87. //
  88. //
  89. // Returns:
  90. //
  91. // Modifies:
  92. //
  93. // History:
  94. //
  95. //----------------------------------------------------------------------------
  96. CIISNamespaceEnum::CIISNamespaceEnum()
  97. {
  98. // _pObjList = NULL;
  99. // _fRegistryRead = FALSE;
  100. //
  101. // _lpServerList = NULL;
  102. // _iCurrentServer = 0;
  103. }
  104. //+---------------------------------------------------------------------------
  105. //
  106. // Function: CIISNamespaceEnum::~CIISNamespaceEnum
  107. //
  108. // Synopsis:
  109. //
  110. //
  111. // Arguments:
  112. //
  113. // Returns:
  114. //
  115. // Modifies:
  116. //
  117. // History:
  118. //
  119. //----------------------------------------------------------------------------
  120. CIISNamespaceEnum::~CIISNamespaceEnum()
  121. {
  122. //
  123. // if ( _pObjList )
  124. // delete _pObjList;
  125. //
  126. // FreeServerList();
  127. }
  128. //+---------------------------------------------------------------------------
  129. //
  130. // Function: CIISNamespaceEnum::Next
  131. //
  132. // Synopsis: Returns cElements number of requested ADs objects in the
  133. // array supplied in pvar.
  134. //
  135. // Arguments: [cElements] -- The number of elements requested by client
  136. // [pvar] -- ptr to array of VARIANTs to for return objects
  137. // [pcElementFetched] -- if non-NULL, then number of elements
  138. // -- actually returned is placed here
  139. //
  140. // Returns: HRESULT -- S_OK if number of elements requested are returned
  141. // -- S_FALSE if number of elements is < requested
  142. //
  143. // Modifies:
  144. //
  145. // History:
  146. //
  147. //----------------------------------------------------------------------------
  148. STDMETHODIMP
  149. CIISNamespaceEnum::Next(
  150. ULONG cElements,
  151. VARIANT FAR* pvar,
  152. ULONG FAR* pcElementFetched
  153. )
  154. {
  155. RRETURN(E_NOTIMPL);
  156. //
  157. // ULONG cElementFetched = 0;
  158. // HRESULT hr = S_OK;
  159. //
  160. // hr = EnumServerObjects(
  161. // cElements,
  162. // pvar,
  163. // &cElementFetched
  164. // );
  165. //
  166. // if (pcElementFetched) {
  167. // *pcElementFetched = cElementFetched;
  168. // }
  169. // RRETURN(hr);
  170. //
  171. }
  172. //+---------------------------------------------------------------------------
  173. //
  174. // Function: CIISNamespaceEnum::Reset
  175. //
  176. // Synopsis: Resets the enumerator so that a new server list will
  177. // be generated on the next call to Next.
  178. //
  179. // Arguments: None.
  180. //
  181. // Returns: HRESULT -- S_OK if there was a previous server list
  182. // -- S_FALSE if there was not a previous server list
  183. //
  184. // Modifies:
  185. //
  186. // History:
  187. //
  188. //----------------------------------------------------------------------------
  189. STDMETHODIMP
  190. CIISNamespaceEnum::Reset(
  191. )
  192. {
  193. RRETURN(E_NOTIMPL);
  194. // return FreeServerList();
  195. //
  196. }
  197. // Generate the server list and set flags
  198. HRESULT
  199. CIISNamespaceEnum::GenerateServerList()
  200. {
  201. RRETURN(E_NOTIMPL);
  202. // DWORD Error;
  203. //
  204. // ADsAssert(_lpServerList==NULL);
  205. //
  206. // Error = INetDiscoverServers(
  207. // INET_ALL_SERVICES_ID,
  208. // SVC_DEFAULT_WAIT_TIME,
  209. // &_lpServerList);
  210. //
  211. // if (Error != ERROR_SUCCESS) {
  212. // return HRESULT_FROM_WIN32(Error);
  213. // }
  214. //
  215. // // Set the current server to the first
  216. // _iCurrentServer = 0;
  217. //
  218. //
  219. // return S_OK;
  220. //
  221. }
  222. // Free the server list and set flags
  223. HRESULT
  224. CIISNamespaceEnum::FreeServerList(
  225. )
  226. {
  227. RRETURN(E_NOTIMPL);
  228. // if ( _lpServerList ) {
  229. // // _lpServerList is set to NULL
  230. // INetFreeDiscoverServersList(&_lpServerList); // void return
  231. // }
  232. // ADsAssert(_lpServerList==NULL);
  233. // return S_OK;
  234. }
  235. HRESULT
  236. CIISNamespaceEnum::EnumServerObjects(
  237. ULONG cElements,
  238. VARIANT FAR* pvar,
  239. ULONG FAR* pcElementFetched
  240. )
  241. {
  242. RRETURN(E_NOTIMPL);
  243. // HRESULT hr = S_OK;
  244. // IDispatch *pDispatch = NULL;
  245. // DWORD i = 0;
  246. //
  247. // // perform this check once per call
  248. // if (!_lpServerList) { // generate server list
  249. // GenerateServerList();
  250. // }
  251. //
  252. // while (i < cElements) {
  253. //
  254. // hr = GetServerObject(&pDispatch);
  255. // BAIL_ON_FAILURE(hr);
  256. //
  257. // if (hr == S_FALSE) {
  258. // break;
  259. // }
  260. //
  261. // VariantInit(&pvar[i]);
  262. // pvar[i].vt = VT_DISPATCH;
  263. // pvar[i].pdispVal = pDispatch;
  264. // (*pcElementFetched)++;
  265. // i++;
  266. // }
  267. // // we've received the entire block or we have
  268. // // reached the end of the list
  269. //
  270. // RRETURN(hr);
  271. //
  272. // error:
  273. // // there was an error retrieving the current object
  274. // RRETURN(hr);
  275. }
  276. /* #pragma INTRINSA suppress=all */
  277. HRESULT
  278. CIISNamespaceEnum::GetServerObject(
  279. IDispatch ** ppDispatch
  280. )
  281. {
  282. RRETURN(E_NOTIMPL);
  283. // HKEY hKey = NULL;
  284. // #if 0
  285. // WCHAR szServerName[MAX_PATH];
  286. // #endif
  287. // WCHAR *lpwszServerName;
  288. // DWORD dwStatus;
  289. // HRESULT hr;
  290. // LPSTR lpszServerName;
  291. // UINT err;
  292. //
  293. // // while there are still more servers
  294. // if (_iCurrentServer < (_lpServerList->NumServers)) {
  295. // // get the next server name
  296. // lpszServerName = _lpServerList->Servers[_iCurrentServer]->ServerName;
  297. //
  298. // // convert the server name to unicode
  299. // #if 0
  300. // AnsiToUnicodeString(
  301. // lpszServerName,
  302. // szServerName,
  303. // strlen(lpszServerName));
  304. // #else
  305. // err = AllocUnicode(lpszServerName, &lpwszServerName);
  306. // if (err) {
  307. // RRETURN( HRESULT_FROM_WIN32(err) );
  308. // }
  309. //
  310. // #endif
  311. //
  312. // // increment the current server index
  313. // ++_iCurrentServer;
  314. //
  315. // } else {
  316. // RRETURN(S_FALSE);
  317. // }
  318. //
  319. // *ppDispatch = NULL;
  320. //
  321. // //
  322. // // Now create and send back the current object
  323. // //
  324. //
  325. // hr = CIISTree::CreateServerObject(
  326. // L"IIS:",
  327. // lpwszServerName,
  328. // COMPUTER_CLASS_W,
  329. // _Credentials,
  330. // ADS_OBJECT_BOUND,
  331. // IID_IDispatch,
  332. // (void **)ppDispatch
  333. // );
  334. // BAIL_ON_FAILURE(hr);
  335. //
  336. //
  337. // error:
  338. //
  339. // RRETURN_ENUM_STATUS(hr);
  340. //
  341. }