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.

1092 lines
24 KiB

  1. //+---------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 1992 - 1995.
  5. //
  6. // File: ndscopy.cxx
  7. //
  8. // Contents: NDS Object Copy Routines
  9. //
  10. // Functions:
  11. //
  12. // History: 25-Apr-96 KrishnaG Created.
  13. //
  14. //
  15. // Issues: Check null ptrs for AllocADsMem and AllocADsStr
  16. //
  17. // Object Types 6, 13, 16, and 21 are flaky - pay extra attn.
  18. //
  19. //
  20. //----------------------------------------------------------------------------
  21. #include "nds.hxx"
  22. //
  23. // NdsType objects copy code
  24. //
  25. HRESULT
  26. NdsTypeCopyNDSSynId1(
  27. PNDSOBJECT lpNdsSrcObject,
  28. PNDSOBJECT lpNdsDestObject
  29. )
  30. {
  31. HRESULT hr = S_OK;
  32. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  33. lpNdsDestObject->NdsValue.value_1.DNString =
  34. (LPWSTR)AllocADsStr(
  35. lpNdsSrcObject->NdsValue.value_1.DNString
  36. );
  37. RRETURN(hr);
  38. }
  39. HRESULT
  40. NdsTypeCopyNDSSynId2(
  41. PNDSOBJECT lpNdsSrcObject,
  42. PNDSOBJECT lpNdsDestObject
  43. )
  44. {
  45. HRESULT hr = S_OK;
  46. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  47. lpNdsDestObject->NdsValue.value_1.DNString =
  48. (LPWSTR)AllocADsStr(
  49. lpNdsSrcObject->NdsValue.value_1.DNString
  50. );
  51. RRETURN(hr);
  52. }
  53. HRESULT
  54. NdsTypeCopyNDSSynId3(
  55. PNDSOBJECT lpNdsSrcObject,
  56. PNDSOBJECT lpNdsDestObject
  57. )
  58. {
  59. HRESULT hr = S_OK;
  60. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  61. lpNdsDestObject->NdsValue.value_1.DNString =
  62. (LPWSTR)AllocADsStr(
  63. lpNdsSrcObject->NdsValue.value_1.DNString
  64. );
  65. RRETURN(hr);
  66. }
  67. HRESULT
  68. NdsTypeCopyNDSSynId4(
  69. PNDSOBJECT lpNdsSrcObject,
  70. PNDSOBJECT lpNdsDestObject
  71. )
  72. {
  73. HRESULT hr = S_OK;
  74. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  75. lpNdsDestObject->NdsValue.value_1.DNString =
  76. (LPWSTR)AllocADsStr(
  77. lpNdsSrcObject->NdsValue.value_1.DNString
  78. );
  79. RRETURN(hr);
  80. }
  81. HRESULT
  82. NdsTypeCopyNDSSynId5(
  83. PNDSOBJECT lpNdsSrcObject,
  84. PNDSOBJECT lpNdsDestObject
  85. )
  86. {
  87. HRESULT hr = S_OK;
  88. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  89. lpNdsDestObject->NdsValue.value_1.DNString =
  90. (LPWSTR)AllocADsStr(
  91. lpNdsSrcObject->NdsValue.value_1.DNString
  92. );
  93. RRETURN(hr);
  94. }
  95. HRESULT
  96. NdsTypeCopyNDSSynId6(
  97. PNDSOBJECT lpNdsSrcObject,
  98. PNDSOBJECT lpNdsDestObject
  99. )
  100. {
  101. HRESULT hr = S_OK;
  102. LPNDS_ASN1_TYPE_6 lpNdsSrcTempASN1_6 = NULL;
  103. LPNDS_ASN1_TYPE_6 lpNdsDestTempASN1_6 = NULL;
  104. LPNDS_ASN1_TYPE_6 lpNdsDestNextASN1_6 = NULL;
  105. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  106. lpNdsSrcTempASN1_6 = &(lpNdsSrcObject->NdsValue.value_6);
  107. lpNdsDestTempASN1_6 = &(lpNdsDestObject->NdsValue.value_6);
  108. lpNdsDestTempASN1_6->Next = NULL;
  109. lpNdsDestTempASN1_6->String =
  110. (LPWSTR)AllocADsStr(lpNdsSrcTempASN1_6->String);
  111. if (!lpNdsDestTempASN1_6->String) {
  112. hr = E_OUTOFMEMORY;
  113. BAIL_ON_FAILURE(hr);
  114. }
  115. while ( lpNdsSrcTempASN1_6->Next != NULL )
  116. {
  117. lpNdsSrcTempASN1_6 = lpNdsSrcTempASN1_6->Next;
  118. lpNdsDestNextASN1_6 =
  119. (LPNDS_ASN1_TYPE_6)AllocADsMem(sizeof(NDS_ASN1_TYPE_6));
  120. if (!lpNdsDestNextASN1_6) {
  121. hr = E_OUTOFMEMORY;
  122. BAIL_ON_FAILURE(hr);
  123. }
  124. lpNdsDestNextASN1_6->Next = NULL;
  125. lpNdsDestNextASN1_6->String =
  126. (LPWSTR)AllocADsStr(lpNdsSrcTempASN1_6->String);
  127. if (!lpNdsDestNextASN1_6->String) {
  128. FreeADsMem(lpNdsDestNextASN1_6);
  129. hr = E_OUTOFMEMORY;
  130. BAIL_ON_FAILURE(hr);
  131. }
  132. lpNdsDestTempASN1_6->Next = lpNdsDestNextASN1_6;
  133. lpNdsDestTempASN1_6 = lpNdsDestNextASN1_6;
  134. }
  135. RRETURN(hr);
  136. error:
  137. if (lpNdsDestObject->NdsValue.value_6.String)
  138. FreeADsStr(lpNdsDestObject->NdsValue.value_6.String);
  139. lpNdsDestTempASN1_6 = lpNdsDestObject->NdsValue.value_6.Next;
  140. while (lpNdsDestTempASN1_6 != NULL) {
  141. if (lpNdsDestTempASN1_6->String)
  142. FreeADsStr(lpNdsDestTempASN1_6->String);
  143. lpNdsDestNextASN1_6 = lpNdsDestTempASN1_6->Next;
  144. FreeADsMem(lpNdsDestTempASN1_6);
  145. lpNdsDestTempASN1_6 = lpNdsDestNextASN1_6;
  146. }
  147. RRETURN(hr);
  148. }
  149. HRESULT
  150. NdsTypeCopyNDSSynId7(
  151. PNDSOBJECT lpNdsSrcObject,
  152. PNDSOBJECT lpNdsDestObject
  153. )
  154. {
  155. HRESULT hr = S_OK;
  156. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  157. lpNdsDestObject->NdsValue.value_7.Boolean =
  158. lpNdsSrcObject->NdsValue.value_7.Boolean;
  159. RRETURN(hr);
  160. }
  161. HRESULT
  162. NdsTypeCopyNDSSynId8(
  163. PNDSOBJECT lpNdsSrcObject,
  164. PNDSOBJECT lpNdsDestObject
  165. )
  166. {
  167. HRESULT hr = S_OK;
  168. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  169. lpNdsDestObject->NdsValue.value_8.Integer =
  170. lpNdsSrcObject->NdsValue.value_8.Integer;
  171. RRETURN(hr);
  172. }
  173. HRESULT
  174. NdsTypeCopyNDSSynId9(
  175. PNDSOBJECT lpNdsSrcObject,
  176. PNDSOBJECT lpNdsDestObject
  177. )
  178. {
  179. HRESULT hr = S_OK;
  180. DWORD Length = 0;
  181. LPBYTE pBuffer = NULL;
  182. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  183. Length = lpNdsSrcObject->NdsValue.value_9.Length;
  184. if (Length) {
  185. pBuffer = (LPBYTE)AllocADsMem(Length);
  186. if (!pBuffer) {
  187. hr = E_OUTOFMEMORY;
  188. BAIL_ON_FAILURE(hr);
  189. }
  190. memcpy(
  191. pBuffer,
  192. lpNdsSrcObject->NdsValue.value_9.OctetString,
  193. Length
  194. );
  195. lpNdsDestObject->NdsValue.value_9.Length = Length;
  196. lpNdsDestObject->NdsValue.value_9.OctetString = pBuffer;
  197. }else{
  198. lpNdsDestObject->NdsValue.value_9.Length = 0;
  199. lpNdsDestObject->NdsValue.value_9.OctetString = NULL;
  200. }
  201. error:
  202. RRETURN(hr);
  203. }
  204. HRESULT
  205. NdsTypeCopyNDSSynId10(
  206. PNDSOBJECT lpNdsSrcObject,
  207. PNDSOBJECT lpNdsDestObject
  208. )
  209. {
  210. HRESULT hr = S_OK;
  211. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  212. lpNdsDestObject->NdsValue.value_10.TelephoneNumber =
  213. (LPWSTR)AllocADsStr(
  214. lpNdsSrcObject->NdsValue.value_10.TelephoneNumber
  215. );
  216. RRETURN(hr);
  217. }
  218. HRESULT
  219. NdsTypeCopyNDSSynId11(
  220. PNDSOBJECT lpNdsSrcObject,
  221. PNDSOBJECT lpNdsDestObject
  222. )
  223. {
  224. HRESULT hr = S_OK;
  225. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  226. lpNdsDestObject->NdsValue.value_11.NumberOfBits =
  227. lpNdsSrcObject->NdsValue.value_11.NumberOfBits;
  228. lpNdsDestObject->NdsValue.value_11.TelephoneNumber =
  229. (LPWSTR)AllocADsStr(
  230. lpNdsSrcObject->NdsValue.value_11.TelephoneNumber
  231. );
  232. if (!lpNdsDestObject->NdsValue.value_11.TelephoneNumber) {
  233. hr = E_OUTOFMEMORY;
  234. BAIL_ON_FAILURE(hr);
  235. }
  236. error:
  237. RRETURN(hr);
  238. }
  239. HRESULT
  240. NdsTypeCopyNDSSynId12(
  241. PNDSOBJECT lpNdsSrcObject,
  242. PNDSOBJECT lpNdsDestObject
  243. )
  244. {
  245. HRESULT hr = S_OK;
  246. DWORD AddressLength = 0;
  247. LPBYTE Address = NULL;
  248. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  249. lpNdsDestObject->NdsValue.value_12.AddressType =
  250. lpNdsSrcObject->NdsValue.value_12.AddressType;
  251. AddressLength = lpNdsSrcObject->NdsValue.value_12.AddressLength;
  252. if (AddressLength) {
  253. Address = (LPBYTE)AllocADsMem(AddressLength);
  254. if (!Address) {
  255. hr = E_OUTOFMEMORY;
  256. BAIL_ON_FAILURE(hr);
  257. }
  258. memcpy(
  259. Address,
  260. lpNdsSrcObject->NdsValue.value_12.Address,
  261. AddressLength
  262. );
  263. lpNdsDestObject->NdsValue.value_12.AddressLength = AddressLength;
  264. lpNdsDestObject->NdsValue.value_12.Address = Address;
  265. }else{
  266. lpNdsDestObject->NdsValue.value_12.AddressLength = 0;
  267. lpNdsDestObject->NdsValue.value_12.Address = NULL;
  268. }
  269. error:
  270. RRETURN(hr);
  271. }
  272. HRESULT
  273. NdsTypeCopyNDSSynId13(
  274. PNDSOBJECT lpNdsSrcObject,
  275. PNDSOBJECT lpNdsDestObject
  276. )
  277. {
  278. HRESULT hr = S_OK;
  279. LPNDS_ASN1_TYPE_13 lpNdsASN1_13, pNextObj;
  280. LPNDS_ASN1_TYPE_13 * lppNext = NULL;
  281. LPBYTE lpBuffer = NULL;
  282. DWORD Length;
  283. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  284. lpNdsDestObject->NdsValue.value_13.Data = NULL;
  285. lpNdsDestObject->NdsValue.value_13.Next = NULL;
  286. Length = lpNdsSrcObject->NdsValue.value_13.Length;
  287. lpBuffer = (LPBYTE)AllocADsMem(
  288. Length
  289. );
  290. if (!lpBuffer) {
  291. hr = E_OUTOFMEMORY;
  292. BAIL_ON_FAILURE(hr);
  293. }
  294. memcpy(
  295. lpBuffer,
  296. lpNdsSrcObject->NdsValue.value_13.Data,
  297. Length
  298. );
  299. lpNdsDestObject->NdsValue.value_13.Length = Length;
  300. lpNdsDestObject->NdsValue.value_13.Data = lpBuffer;
  301. lppNext = &(lpNdsDestObject->NdsValue.value_13.Next);
  302. while (lpNdsSrcObject->NdsValue.value_13.Next != NULL )
  303. {
  304. lpNdsASN1_13 = lpNdsSrcObject->NdsValue.value_13.Next;
  305. pNextObj =
  306. (LPNDS_ASN1_TYPE_13)AllocADsMem(sizeof(NDS_ASN1_TYPE_13));
  307. if (!pNextObj) {
  308. hr = E_OUTOFMEMORY;
  309. BAIL_ON_FAILURE(hr);
  310. }
  311. lpBuffer = (LPBYTE)AllocADsMem(lpNdsASN1_13->Length);
  312. if (!lpBuffer) {
  313. FreeADsMem(pNextObj);
  314. hr = E_OUTOFMEMORY;
  315. BAIL_ON_FAILURE(hr);
  316. }
  317. memcpy(lpBuffer, lpNdsASN1_13->Data, lpNdsASN1_13->Length);
  318. pNextObj->Length = lpNdsASN1_13->Length;
  319. pNextObj->Data = lpBuffer;
  320. pNextObj->Next = NULL;
  321. *lppNext = pNextObj;
  322. lppNext = &pNextObj->Next;
  323. }
  324. RRETURN(hr);
  325. error:
  326. if (lpNdsDestObject->NdsValue.value_13.Data)
  327. FreeADsMem(lpNdsDestObject->NdsValue.value_13.Data);
  328. lpNdsASN1_13 = lpNdsDestObject->NdsValue.value_13.Next;
  329. while (lpNdsASN1_13) {
  330. if (lpNdsASN1_13->Data)
  331. FreeADsMem(lpNdsASN1_13->Data);
  332. pNextObj = lpNdsASN1_13->Next;
  333. FreeADsMem(lpNdsASN1_13);
  334. lpNdsASN1_13 = pNextObj;
  335. }
  336. RRETURN(hr);
  337. }
  338. HRESULT
  339. NdsTypeCopyNDSSynId14(
  340. PNDSOBJECT lpNdsSrcObject,
  341. PNDSOBJECT lpNdsDestObject
  342. )
  343. {
  344. HRESULT hr = S_OK;
  345. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  346. lpNdsDestObject->NdsValue.value_14.Type = lpNdsSrcObject->NdsValue.value_14.Type;
  347. lpNdsDestObject->NdsValue.value_14.Address =
  348. (LPWSTR)AllocADsStr(
  349. lpNdsSrcObject->NdsValue.value_14.Address
  350. );
  351. RRETURN(hr);
  352. }
  353. HRESULT
  354. NdsTypeCopyNDSSynId15(
  355. PNDSOBJECT lpNdsSrcObject,
  356. PNDSOBJECT lpNdsDestObject
  357. )
  358. {
  359. HRESULT hr = S_OK;
  360. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  361. lpNdsDestObject->NdsValue.value_15.Type =
  362. lpNdsSrcObject->NdsValue.value_15.Type;
  363. lpNdsDestObject->NdsValue.value_15.VolumeName =
  364. (LPWSTR)AllocADsStr(
  365. lpNdsSrcObject->NdsValue.value_15.VolumeName
  366. );
  367. lpNdsDestObject->NdsValue.value_15.Path =
  368. (LPWSTR)AllocADsStr(
  369. lpNdsSrcObject->NdsValue.value_15.Path
  370. );
  371. RRETURN(hr);
  372. }
  373. HRESULT
  374. NdsTypeCopyNDSSynId16(
  375. PNDSOBJECT lpNdsSrcObject,
  376. PNDSOBJECT lpNdsDestObject
  377. )
  378. {
  379. HRESULT hr = S_OK;
  380. DWORD Count = 0;
  381. DWORD iter = 0;
  382. DWORD dwAddrAlloc = 0;
  383. LPBYTE Address = NULL;
  384. DWORD AddressLength = 0;
  385. LPNDS_ASN1_TYPE_12 lpNdsDestASN1_12 = NULL, lpNdsSrcASN1_12 = NULL;
  386. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  387. lpNdsDestObject->NdsValue.value_16.ServerName =
  388. (LPWSTR)AllocADsStr(
  389. lpNdsSrcObject->NdsValue.value_16.ServerName
  390. );
  391. if (!lpNdsDestObject->NdsValue.value_16.ServerName) {
  392. hr = E_OUTOFMEMORY;
  393. BAIL_ON_FAILURE(hr);
  394. }
  395. lpNdsDestObject->NdsValue.value_16.ReplicaType =
  396. lpNdsSrcObject->NdsValue.value_16.ReplicaType;
  397. lpNdsDestObject->NdsValue.value_16.ReplicaNumber =
  398. lpNdsSrcObject->NdsValue.value_16.ReplicaNumber;
  399. Count = lpNdsSrcObject->NdsValue.value_16.Count;
  400. lpNdsDestObject->NdsValue.value_16.Count = Count;
  401. lpNdsDestASN1_12 = (LPNDS_ASN1_TYPE_12)AllocADsMem(
  402. Count * sizeof(NDS_ASN1_TYPE_12)
  403. );
  404. if (!lpNdsDestASN1_12) {
  405. hr = E_OUTOFMEMORY;
  406. BAIL_ON_FAILURE(hr);
  407. }
  408. lpNdsDestObject->NdsValue.value_16.ReplicaAddressHints = lpNdsDestASN1_12;
  409. lpNdsSrcASN1_12 = lpNdsSrcObject->NdsValue.value_16.ReplicaAddressHints;
  410. for ( iter = 0; iter < Count; iter++ )
  411. {
  412. (lpNdsDestASN1_12 + iter)->AddressType =
  413. (lpNdsSrcASN1_12 + iter)->AddressType;
  414. AddressLength = (lpNdsSrcASN1_12 + iter)->AddressLength;
  415. if (AddressLength) {
  416. Address = (LPBYTE)AllocADsMem(AddressLength);
  417. if (!Address) {
  418. hr = E_OUTOFMEMORY;
  419. BAIL_ON_FAILURE(hr);
  420. }
  421. memcpy(
  422. Address,
  423. (lpNdsSrcASN1_12 + iter)->Address,
  424. AddressLength
  425. );
  426. (lpNdsDestASN1_12 + iter)->AddressLength = AddressLength;
  427. (lpNdsDestASN1_12 + iter)->Address = Address;
  428. (lpNdsDestASN1_12 + iter)->AddressType = (lpNdsSrcASN1_12 + iter)->AddressType;
  429. }else{
  430. (lpNdsDestASN1_12 + iter)->AddressLength = AddressLength;
  431. (lpNdsDestASN1_12 + iter)->Address = NULL;
  432. (lpNdsDestASN1_12 + iter)->AddressType = 0;
  433. }
  434. dwAddrAlloc++;
  435. }
  436. RRETURN(hr);
  437. error:
  438. if (lpNdsDestASN1_12) {
  439. for (iter=0; iter < dwAddrAlloc; iter++) {
  440. if ((lpNdsDestASN1_12 + iter)->Address)
  441. FreeADsMem((lpNdsDestASN1_12 + iter)->Address);
  442. }
  443. FreeADsMem(lpNdsDestASN1_12);
  444. }
  445. if (lpNdsDestObject->NdsValue.value_16.ServerName)
  446. FreeADsStr(lpNdsDestObject->NdsValue.value_16.ServerName);
  447. RRETURN(hr);
  448. }
  449. HRESULT
  450. NdsTypeCopyNDSSynId17(
  451. PNDSOBJECT lpNdsSrcObject,
  452. PNDSOBJECT lpNdsDestObject
  453. )
  454. {
  455. HRESULT hr = S_OK;
  456. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  457. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  458. lpNdsDestObject->NdsValue.value_17.Privileges =
  459. lpNdsSrcObject->NdsValue.value_17.Privileges;
  460. lpNdsDestObject->NdsValue.value_17.ProtectedAttrName =
  461. (LPWSTR)AllocADsStr(
  462. lpNdsSrcObject->NdsValue.value_17.ProtectedAttrName
  463. );
  464. lpNdsDestObject->NdsValue.value_17.SubjectName =
  465. (LPWSTR)AllocADsStr(
  466. lpNdsSrcObject->NdsValue.value_17.SubjectName
  467. );
  468. RRETURN(hr);
  469. }
  470. HRESULT
  471. NdsTypeCopyNDSSynId18(
  472. PNDSOBJECT lpNdsSrcObject,
  473. PNDSOBJECT lpNdsDestObject
  474. )
  475. {
  476. HRESULT hr = S_OK;
  477. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  478. lpNdsDestObject->NdsValue.value_18.PostalAddress[0] =
  479. (LPWSTR)AllocADsStr(
  480. lpNdsSrcObject->NdsValue.value_18.PostalAddress[0]
  481. );
  482. lpNdsDestObject->NdsValue.value_18.PostalAddress[1] =
  483. (LPWSTR)AllocADsStr(
  484. lpNdsSrcObject->NdsValue.value_18.PostalAddress[1]
  485. );
  486. lpNdsDestObject->NdsValue.value_18.PostalAddress[2] =
  487. (LPWSTR)AllocADsStr(
  488. lpNdsSrcObject->NdsValue.value_18.PostalAddress[2]
  489. );
  490. lpNdsDestObject->NdsValue.value_18.PostalAddress[3] =
  491. (LPWSTR)AllocADsStr(
  492. lpNdsSrcObject->NdsValue.value_18.PostalAddress[3]
  493. );
  494. lpNdsDestObject->NdsValue.value_18.PostalAddress[4] =
  495. (LPWSTR)AllocADsStr(
  496. lpNdsSrcObject->NdsValue.value_18.PostalAddress[4]
  497. );
  498. lpNdsDestObject->NdsValue.value_18.PostalAddress[5] =
  499. (LPWSTR)AllocADsStr(
  500. lpNdsSrcObject->NdsValue.value_18.PostalAddress[5]
  501. );
  502. RRETURN(hr);
  503. }
  504. HRESULT
  505. NdsTypeCopyNDSSynId19(
  506. PNDSOBJECT lpNdsSrcObject,
  507. PNDSOBJECT lpNdsDestObject
  508. )
  509. {
  510. HRESULT hr = S_OK;
  511. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  512. lpNdsDestObject->NdsValue.value_19.WholeSeconds =
  513. lpNdsSrcObject->NdsValue.value_19.WholeSeconds;
  514. lpNdsDestObject->NdsValue.value_19.EventID =
  515. lpNdsSrcObject->NdsValue.value_19.EventID;
  516. RRETURN(hr);
  517. }
  518. HRESULT
  519. NdsTypeCopyNDSSynId20(
  520. PNDSOBJECT lpNdsSrcObject,
  521. PNDSOBJECT lpNdsDestObject
  522. )
  523. {
  524. HRESULT hr = S_OK;
  525. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  526. lpNdsDestObject->NdsValue.value_20.ClassName =
  527. AllocADsStr(lpNdsSrcObject->NdsValue.value_20.ClassName);
  528. RRETURN(hr);
  529. }
  530. HRESULT
  531. NdsTypeCopyNDSSynId21(
  532. PNDSOBJECT lpNdsSrcObject,
  533. PNDSOBJECT lpNdsDestObject
  534. )
  535. {
  536. HRESULT hr = S_OK;
  537. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  538. //
  539. // BugBug - how do we handle this byte stream!!
  540. //
  541. lpNdsDestObject->NdsValue.value_21.Length =
  542. lpNdsSrcObject->NdsValue.value_21.Length;
  543. lpNdsDestObject->NdsValue.value_21.Data =
  544. lpNdsSrcObject->NdsValue.value_21.Data;
  545. RRETURN(hr);
  546. }
  547. HRESULT
  548. NdsTypeCopyNDSSynId22(
  549. PNDSOBJECT lpNdsSrcObject,
  550. PNDSOBJECT lpNdsDestObject
  551. )
  552. {
  553. HRESULT hr = S_OK;
  554. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  555. lpNdsDestObject->NdsValue.value_22.Counter =
  556. lpNdsSrcObject->NdsValue.value_22.Counter;
  557. RRETURN(hr);
  558. }
  559. HRESULT
  560. NdsTypeCopyNDSSynId23(
  561. PNDSOBJECT lpNdsSrcObject,
  562. PNDSOBJECT lpNdsDestObject
  563. )
  564. {
  565. HRESULT hr = S_OK;
  566. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  567. lpNdsDestObject->NdsValue.value_23.RemoteID =
  568. lpNdsSrcObject->NdsValue.value_23.RemoteID;
  569. lpNdsDestObject->NdsValue.value_23.ObjectName =
  570. AllocADsStr(
  571. lpNdsSrcObject->NdsValue.value_23.ObjectName
  572. );
  573. RRETURN(hr);
  574. }
  575. HRESULT
  576. NdsTypeCopyNDSSynId24(
  577. PNDSOBJECT lpNdsSrcObject,
  578. PNDSOBJECT lpNdsDestObject
  579. )
  580. {
  581. HRESULT hr = S_OK;
  582. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  583. lpNdsDestObject->NdsValue.value_24.Time =
  584. lpNdsSrcObject->NdsValue.value_24.Time;
  585. RRETURN(hr);
  586. }
  587. HRESULT
  588. NdsTypeCopyNDSSynId25(
  589. PNDSOBJECT lpNdsSrcObject,
  590. PNDSOBJECT lpNdsDestObject
  591. )
  592. {
  593. HRESULT hr = S_OK;
  594. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  595. lpNdsDestObject->NdsValue.value_25.ObjectName =
  596. AllocADsStr(
  597. lpNdsSrcObject->NdsValue.value_25.ObjectName
  598. );
  599. lpNdsDestObject->NdsValue.value_25.Level =
  600. lpNdsSrcObject->NdsValue.value_25.Level;
  601. lpNdsDestObject->NdsValue.value_25.Interval =
  602. lpNdsSrcObject->NdsValue.value_25.Interval;
  603. RRETURN(hr);
  604. }
  605. HRESULT
  606. NdsTypeCopyNDSSynId26(
  607. PNDSOBJECT lpNdsSrcObject,
  608. PNDSOBJECT lpNdsDestObject
  609. )
  610. {
  611. HRESULT hr = S_OK;
  612. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  613. lpNdsDestObject->NdsValue.value_26.ObjectName =
  614. AllocADsStr(lpNdsSrcObject->NdsValue.value_26.ObjectName);
  615. lpNdsDestObject->NdsValue.value_26.Amount =
  616. lpNdsSrcObject->NdsValue.value_26.Amount;
  617. RRETURN(hr);
  618. }
  619. HRESULT
  620. NdsTypeCopyNDSSynId27(
  621. PNDSOBJECT lpNdsSrcObject,
  622. PNDSOBJECT lpNdsDestObject
  623. )
  624. {
  625. HRESULT hr = S_OK;
  626. lpNdsDestObject->NdsType = lpNdsSrcObject->NdsType;
  627. lpNdsDestObject->NdsValue.value_27.Interval =
  628. lpNdsSrcObject->NdsValue.value_27.Interval;
  629. RRETURN(hr);
  630. }
  631. HRESULT
  632. NdsTypeCopy(
  633. PNDSOBJECT lpNdsSrcObject,
  634. PNDSOBJECT lpNdsDestObject
  635. )
  636. {
  637. HRESULT hr = S_OK;
  638. switch (lpNdsSrcObject->NdsType) {
  639. case 1:
  640. hr = NdsTypeCopyNDSSynId1(
  641. lpNdsSrcObject,
  642. lpNdsDestObject
  643. );
  644. break;
  645. case 2:
  646. hr = NdsTypeCopyNDSSynId2(
  647. lpNdsSrcObject,
  648. lpNdsDestObject
  649. );
  650. break;
  651. case 3:
  652. hr = NdsTypeCopyNDSSynId3(
  653. lpNdsSrcObject,
  654. lpNdsDestObject
  655. );
  656. break;
  657. case 4:
  658. hr = NdsTypeCopyNDSSynId4(
  659. lpNdsSrcObject,
  660. lpNdsDestObject
  661. );
  662. break;
  663. case 5:
  664. hr = NdsTypeCopyNDSSynId5(
  665. lpNdsSrcObject,
  666. lpNdsDestObject
  667. );
  668. break;
  669. case 6:
  670. hr = NdsTypeCopyNDSSynId6(
  671. lpNdsSrcObject,
  672. lpNdsDestObject
  673. );
  674. break;
  675. case 7:
  676. hr = NdsTypeCopyNDSSynId7(
  677. lpNdsSrcObject,
  678. lpNdsDestObject
  679. );
  680. break;
  681. case 8:
  682. hr = NdsTypeCopyNDSSynId8(
  683. lpNdsSrcObject,
  684. lpNdsDestObject
  685. );
  686. break;
  687. case 9:
  688. hr = NdsTypeCopyNDSSynId9(
  689. lpNdsSrcObject,
  690. lpNdsDestObject
  691. );
  692. break;
  693. case 10:
  694. hr = NdsTypeCopyNDSSynId10(
  695. lpNdsSrcObject,
  696. lpNdsDestObject
  697. );
  698. break;
  699. case 11:
  700. hr = NdsTypeCopyNDSSynId11(
  701. lpNdsSrcObject,
  702. lpNdsDestObject
  703. );
  704. break;
  705. case 12:
  706. hr = NdsTypeCopyNDSSynId12(
  707. lpNdsSrcObject,
  708. lpNdsDestObject
  709. );
  710. break;
  711. case 13:
  712. hr = NdsTypeCopyNDSSynId13(
  713. lpNdsSrcObject,
  714. lpNdsDestObject
  715. );
  716. break;
  717. case 14:
  718. hr = NdsTypeCopyNDSSynId14(
  719. lpNdsSrcObject,
  720. lpNdsDestObject
  721. );
  722. break;
  723. case 15:
  724. hr = NdsTypeCopyNDSSynId15(
  725. lpNdsSrcObject,
  726. lpNdsDestObject
  727. );
  728. break;
  729. case 16:
  730. hr = NdsTypeCopyNDSSynId16(
  731. lpNdsSrcObject,
  732. lpNdsDestObject
  733. );
  734. break;
  735. case 17:
  736. hr = NdsTypeCopyNDSSynId17(
  737. lpNdsSrcObject,
  738. lpNdsDestObject
  739. );
  740. break;
  741. case 18:
  742. hr = NdsTypeCopyNDSSynId18(
  743. lpNdsSrcObject,
  744. lpNdsDestObject
  745. );
  746. break;
  747. case 19:
  748. hr = NdsTypeCopyNDSSynId19(
  749. lpNdsSrcObject,
  750. lpNdsDestObject
  751. );
  752. break;
  753. case 20:
  754. hr = NdsTypeCopyNDSSynId20(
  755. lpNdsSrcObject,
  756. lpNdsDestObject
  757. );
  758. break;
  759. case 21:
  760. hr = NdsTypeCopyNDSSynId21(
  761. lpNdsSrcObject,
  762. lpNdsDestObject
  763. );
  764. break;
  765. case 22:
  766. hr = NdsTypeCopyNDSSynId22(
  767. lpNdsSrcObject,
  768. lpNdsDestObject
  769. );
  770. break;
  771. case 23:
  772. hr = NdsTypeCopyNDSSynId23(
  773. lpNdsSrcObject,
  774. lpNdsDestObject
  775. );
  776. break;
  777. case 24:
  778. hr = NdsTypeCopyNDSSynId24(
  779. lpNdsSrcObject,
  780. lpNdsDestObject
  781. );
  782. break;
  783. case 25:
  784. hr = NdsTypeCopyNDSSynId25(
  785. lpNdsSrcObject,
  786. lpNdsDestObject
  787. );
  788. break;
  789. case 26:
  790. hr = NdsTypeCopyNDSSynId26(
  791. lpNdsSrcObject,
  792. lpNdsDestObject
  793. );
  794. break;
  795. case 27:
  796. hr = NdsTypeCopyNDSSynId27(
  797. lpNdsSrcObject,
  798. lpNdsDestObject
  799. );
  800. break;
  801. default:
  802. hr = E_FAIL;
  803. break;
  804. }
  805. RRETURN(hr);
  806. }
  807. HRESULT
  808. NdsTypeCopyConstruct(
  809. LPNDSOBJECT pNdsSrcObjects,
  810. DWORD dwNumObjects,
  811. LPNDSOBJECT * ppNdsDestObjects
  812. )
  813. {
  814. DWORD i = 0;
  815. LPNDSOBJECT pNdsDestObjects = NULL;
  816. HRESULT hr = S_OK;
  817. pNdsDestObjects = (LPNDSOBJECT)AllocADsMem(
  818. dwNumObjects * sizeof(NDSOBJECT)
  819. );
  820. if (!pNdsDestObjects) {
  821. RRETURN(E_FAIL);
  822. }
  823. for (i = 0; i < dwNumObjects; i++ ) {
  824. hr = NdsTypeCopy(pNdsSrcObjects + i, pNdsDestObjects + i);
  825. }
  826. *ppNdsDestObjects = pNdsDestObjects;
  827. RRETURN(S_OK);
  828. }