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.

2345 lines
41 KiB

  1. //+-------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 1992 - 2000
  5. //
  6. // File: modtable.cpp
  7. //
  8. // Contents: Defines a table which contains the object types on which
  9. // a modification can occur and the attributes that can be changed
  10. //
  11. // History: 07-Sep-2000 JeffJon Created
  12. //
  13. //
  14. //--------------------------------------------------------------------------
  15. #include "pch.h"
  16. #include "cstrings.h"
  17. #include "modtable.h"
  18. #include "usage.h"
  19. //+-------------------------------------------------------------------------
  20. // Parser table
  21. //--------------------------------------------------------------------------
  22. ARG_RECORD DSMOD_COMMON_COMMANDS[] =
  23. {
  24. COMMON_COMMANDS
  25. //
  26. // c Continue
  27. //
  28. 0,(PWSTR)c_sz_arg1_com_continue,
  29. ID_ARG2_NULL, NULL,
  30. ARG_TYPE_BOOL, ARG_FLAG_OPTIONAL,
  31. (CMD_TYPE)_T(""),
  32. 0, NULL,
  33. //
  34. // objecttype
  35. //
  36. 0,(LPWSTR)c_sz_arg1_com_objecttype,
  37. ID_ARG2_NULL,NULL,
  38. ARG_TYPE_STR, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG|ARG_FLAG_STDIN,
  39. 0,
  40. 0, NULL,
  41. //
  42. // objectDN
  43. //
  44. 0,(LPWSTR)c_sz_arg1_com_objectDN,
  45. ID_ARG2_NULL,NULL,
  46. ARG_TYPE_MSZ, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG|ARG_FLAG_STDIN|ARG_FLAG_DN,
  47. 0,
  48. 0, NULL,
  49. //
  50. // description
  51. //
  52. 0, (PWSTR)c_sz_arg1_com_description,
  53. ID_ARG2_NULL, NULL,
  54. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  55. 0,
  56. 0, NULL,
  57. ARG_TERMINATOR
  58. };
  59. ARG_RECORD DSMOD_USER_COMMANDS[]=
  60. {
  61. //
  62. // upn
  63. //
  64. 0, (PWSTR)g_pszArg1UserUPN,
  65. ID_ARG2_NULL, NULL,
  66. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  67. 0,
  68. 0, NULL,
  69. //
  70. // fn. FirstName
  71. //
  72. 0, (PWSTR)g_pszArg1UserFirstName,
  73. ID_ARG2_NULL, NULL,
  74. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  75. 0,
  76. 0, NULL,
  77. //
  78. // mi Middle Initial
  79. //
  80. 0, (PWSTR)g_pszArg1UserMiddleInitial,
  81. ID_ARG2_NULL, NULL,
  82. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  83. 0,
  84. 0, NULL,
  85. //
  86. // ln LastName
  87. //
  88. 0, (PWSTR)g_pszArg1UserLastName,
  89. ID_ARG2_NULL, NULL,
  90. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  91. 0,
  92. 0, NULL,
  93. //
  94. // display DisplayName
  95. //
  96. 0, (PWSTR)g_pszArg1UserDisplayName,
  97. ID_ARG2_NULL, NULL,
  98. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  99. 0,
  100. 0, NULL,
  101. //
  102. // empid Employee ID
  103. //
  104. 0, (PWSTR)g_pszArg1UserEmpID,
  105. ID_ARG2_NULL, NULL,
  106. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  107. 0,
  108. 0, NULL,
  109. //
  110. // pwd Password
  111. //
  112. 0, (PWSTR)g_pszArg1UserPassword,
  113. ID_ARG2_NULL, NULL,
  114. ARG_TYPE_PASSWORD, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  115. 0,
  116. 0, ValidateUserPassword,
  117. //
  118. // office Office Location
  119. //
  120. 0, (PWSTR)g_pszArg1UserOffice,
  121. ID_ARG2_NULL, NULL,
  122. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  123. 0,
  124. 0, NULL,
  125. //
  126. // tel Telephone
  127. //
  128. 0, (PWSTR)g_pszArg1UserTelephone,
  129. ID_ARG2_NULL, NULL,
  130. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  131. 0,
  132. 0, NULL,
  133. //
  134. // email E-mail
  135. //
  136. 0, (PWSTR)g_pszArg1UserEmail,
  137. ID_ARG2_NULL, NULL,
  138. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  139. 0,
  140. 0, NULL,
  141. //
  142. // hometel Home Telephone
  143. //
  144. 0, (PWSTR)g_pszArg1UserHomeTelephone,
  145. ID_ARG2_NULL, NULL,
  146. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  147. 0,
  148. 0, NULL,
  149. //
  150. // pager Pager number
  151. //
  152. 0, (PWSTR)g_pszArg1UserPagerNumber,
  153. ID_ARG2_NULL, NULL,
  154. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  155. 0,
  156. 0, NULL,
  157. //
  158. // mobile Mobile Telephone Number
  159. //
  160. 0, (PWSTR)g_pszArg1UserMobileNumber,
  161. ID_ARG2_NULL, NULL,
  162. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  163. 0,
  164. 0, NULL,
  165. //
  166. // fax Fax Number
  167. //
  168. 0, (PWSTR)g_pszArg1UserFaxNumber,
  169. ID_ARG2_NULL, NULL,
  170. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  171. 0,
  172. 0, NULL,
  173. //
  174. // iptel IP Telephone
  175. //
  176. 0, (PWSTR)g_pszArg1UserIPTel,
  177. ID_ARG2_NULL, NULL,
  178. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  179. 0,
  180. 0, NULL,
  181. //
  182. // webpg Web Page
  183. //
  184. 0, (PWSTR)g_pszArg1UserWebPage,
  185. ID_ARG2_NULL, NULL,
  186. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  187. 0,
  188. 0, NULL,
  189. //
  190. // title Title
  191. //
  192. 0, (PWSTR)g_pszArg1UserTitle,
  193. ID_ARG2_NULL, NULL,
  194. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  195. 0,
  196. 0, NULL,
  197. //
  198. // dept Department
  199. //
  200. 0, (PWSTR)g_pszArg1UserDepartment,
  201. ID_ARG2_NULL, NULL,
  202. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  203. 0,
  204. 0, NULL,
  205. //
  206. // company Company
  207. //
  208. 0, (PWSTR)g_pszArg1UserCompany,
  209. ID_ARG2_NULL, NULL,
  210. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  211. 0,
  212. 0, NULL,
  213. //
  214. // mgr Manager
  215. //
  216. 0, (PWSTR)g_pszArg1UserManager,
  217. ID_ARG2_NULL, NULL,
  218. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE|ARG_FLAG_DN,
  219. 0,
  220. 0, NULL,
  221. //
  222. // hmdir Home Directory
  223. //
  224. 0, (PWSTR)g_pszArg1UserHomeDirectory,
  225. ID_ARG2_NULL, NULL,
  226. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  227. 0,
  228. 0, NULL,
  229. //
  230. // hmdrv Home Drive
  231. //
  232. 0, (PWSTR)g_pszArg1UserHomeDrive,
  233. ID_ARG2_NULL, NULL,
  234. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  235. 0,
  236. 0, NULL,
  237. //
  238. // profile Profile path
  239. //
  240. 0, (PWSTR)g_pszArg1UserProfilePath,
  241. ID_ARG2_NULL, NULL,
  242. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  243. 0,
  244. 0, NULL,
  245. //
  246. // loscr Script path
  247. //
  248. 0, (PWSTR)g_pszArg1UserScriptPath,
  249. ID_ARG2_NULL, NULL,
  250. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  251. 0,
  252. 0, NULL,
  253. //
  254. // mustchpwd Must Change Password at next logon
  255. //
  256. 0, (PWSTR)g_pszArg1UserMustChangePwd,
  257. ID_ARG2_NULL, NULL,
  258. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  259. 0,
  260. 0, ValidateYesNo,
  261. //
  262. // canchpwd Can Change Password
  263. //
  264. 0, (PWSTR)g_pszArg1UserCanChangePwd,
  265. ID_ARG2_NULL, NULL,
  266. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  267. 0,
  268. 0, ValidateYesNo,
  269. //
  270. // reversiblepwd Password stored with reversible encryption
  271. //
  272. 0, (PWSTR)g_pszArg1UserReversiblePwd,
  273. ID_ARG2_NULL, NULL,
  274. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  275. 0,
  276. 0, ValidateYesNo,
  277. //
  278. // pwdneverexpires Password never expires
  279. //
  280. 0, (PWSTR)g_pszArg1UserPwdNeverExpires,
  281. ID_ARG2_NULL, NULL,
  282. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  283. 0,
  284. 0, ValidateYesNo,
  285. //
  286. // acctexpires Account Expires
  287. //
  288. 0, (PWSTR)g_pszArg1UserAccountExpires,
  289. ID_ARG2_NULL, NULL,
  290. ARG_TYPE_INTSTR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  291. 0,
  292. 0, ValidateNever,
  293. //
  294. // disabled Disable Account
  295. //
  296. 0, (PWSTR)g_pszArg1UserDisableAccount,
  297. ID_ARG2_NULL, NULL,
  298. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  299. 0,
  300. 0, ValidateYesNo,
  301. ARG_TERMINATOR
  302. };
  303. ARG_RECORD DSMOD_COMPUTER_COMMANDS[]=
  304. {
  305. //
  306. // loc Location
  307. //
  308. 0, (PWSTR)g_pszArg1ComputerLocation,
  309. ID_ARG2_NULL, NULL,
  310. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  311. 0,
  312. 0, NULL,
  313. //
  314. // disabled
  315. //
  316. 0, (PWSTR)g_pszArg1ComputerDisabled,
  317. ID_ARG2_NULL, NULL,
  318. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  319. 0,
  320. 0, ValidateYesNo,
  321. //
  322. //reset
  323. //
  324. 0, (PWSTR)g_pszArg1ComputerReset,
  325. ID_ARG2_NULL, NULL,
  326. ARG_TYPE_BOOL, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  327. (CMD_TYPE)_T(""),
  328. 0, NULL,
  329. ARG_TERMINATOR,
  330. };
  331. ARG_RECORD DSMOD_GROUP_COMMANDS[]=
  332. {
  333. //
  334. // samname
  335. //
  336. 0, (PWSTR)g_pszArg1GroupSAMName,
  337. ID_ARG2_NULL, NULL,
  338. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  339. 0,
  340. 0, NULL,
  341. //
  342. // secgrp Security enabled
  343. //
  344. 0, (PWSTR)g_pszArg1GroupSec,
  345. ID_ARG2_NULL, NULL,
  346. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  347. 0,
  348. 0, ValidateYesNo,
  349. //
  350. // scope Group scope (local/global/universal)
  351. //
  352. 0, (PWSTR)g_pszArg1GroupScope,
  353. ID_ARG2_NULL, NULL,
  354. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  355. 0,
  356. 0, ValidateGroupScope,
  357. //
  358. // addmbr Add a member to the group
  359. //
  360. 0, (PWSTR)g_pszArg1GroupAddMember,
  361. ID_ARG2_NULL, NULL,
  362. ARG_TYPE_MSZ, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE|ARG_FLAG_STDIN|ARG_FLAG_DN,
  363. 0,
  364. 0, NULL,
  365. //
  366. // rmmbr Remove a member from the group
  367. //
  368. 0, (PWSTR)g_pszArg1GroupRemoveMember,
  369. ID_ARG2_NULL, NULL,
  370. ARG_TYPE_MSZ, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE|ARG_FLAG_STDIN|ARG_FLAG_DN,
  371. 0,
  372. 0, NULL,
  373. //
  374. // chmbr Change the entire membership list
  375. //
  376. 0, (PWSTR)g_pszArg1GroupChangeMember,
  377. ID_ARG2_NULL, NULL,
  378. ARG_TYPE_MSZ, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE|ARG_FLAG_STDIN|ARG_FLAG_DN,
  379. 0,
  380. 0, NULL,
  381. ARG_TERMINATOR,
  382. };
  383. ARG_RECORD DSMOD_CONTACT_COMMANDS[]=
  384. {
  385. //
  386. // fn. FirstName
  387. //
  388. 0, (PWSTR)g_pszArg1UserFirstName,
  389. ID_ARG2_NULL, NULL,
  390. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  391. 0,
  392. 0, NULL,
  393. //
  394. // mi Middle Initial
  395. //
  396. 0, (PWSTR)g_pszArg1UserMiddleInitial,
  397. ID_ARG2_NULL, NULL,
  398. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  399. 0,
  400. 0, NULL,
  401. //
  402. // ln LastName
  403. //
  404. 0, (PWSTR)g_pszArg1UserLastName,
  405. ID_ARG2_NULL, NULL,
  406. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  407. 0,
  408. 0, NULL,
  409. //
  410. // display DisplayName
  411. //
  412. 0, (PWSTR)g_pszArg1UserDisplayName,
  413. ID_ARG2_NULL, NULL,
  414. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  415. 0,
  416. 0, NULL,
  417. //
  418. // office Office Location
  419. //
  420. 0, (PWSTR)g_pszArg1UserOffice,
  421. ID_ARG2_NULL, NULL,
  422. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  423. 0,
  424. 0, NULL,
  425. //
  426. // tel Telephone
  427. //
  428. 0, (PWSTR)g_pszArg1UserTelephone,
  429. ID_ARG2_NULL, NULL,
  430. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  431. 0,
  432. 0, NULL,
  433. //
  434. // email E-mail
  435. //
  436. 0, (PWSTR)g_pszArg1UserEmail,
  437. ID_ARG2_NULL, NULL,
  438. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  439. 0,
  440. 0, NULL,
  441. //
  442. // hometel Home Telephone
  443. //
  444. 0, (PWSTR)g_pszArg1UserHomeTelephone,
  445. ID_ARG2_NULL, NULL,
  446. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  447. 0,
  448. 0, NULL,
  449. //
  450. // pager Pager number
  451. //
  452. 0, (PWSTR)g_pszArg1UserPagerNumber,
  453. ID_ARG2_NULL, NULL,
  454. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  455. 0,
  456. 0, NULL,
  457. //
  458. // mobile Mobile Telephone Number
  459. //
  460. 0, (PWSTR)g_pszArg1UserMobileNumber,
  461. ID_ARG2_NULL, NULL,
  462. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  463. 0,
  464. 0, NULL,
  465. //
  466. // fax Fax Number
  467. //
  468. 0, (PWSTR)g_pszArg1UserFaxNumber,
  469. ID_ARG2_NULL, NULL,
  470. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  471. 0,
  472. 0, NULL,
  473. //
  474. // iptel IP Telephone
  475. //
  476. 0, (PWSTR)g_pszArg1UserIPTel,
  477. ID_ARG2_NULL, NULL,
  478. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  479. 0,
  480. 0, NULL,
  481. //
  482. // title Title
  483. //
  484. 0, (PWSTR)g_pszArg1UserTitle,
  485. ID_ARG2_NULL, NULL,
  486. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  487. 0,
  488. 0, NULL,
  489. //
  490. // dept Department
  491. //
  492. 0, (PWSTR)g_pszArg1UserDepartment,
  493. ID_ARG2_NULL, NULL,
  494. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  495. 0,
  496. 0, NULL,
  497. //
  498. // company Company
  499. //
  500. 0, (PWSTR)g_pszArg1UserCompany,
  501. ID_ARG2_NULL, NULL,
  502. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  503. 0,
  504. 0, NULL,
  505. ARG_TERMINATOR,
  506. };
  507. ARG_RECORD DSMOD_QUOTA_COMMANDS[]=
  508. {
  509. //
  510. // qlimit
  511. //
  512. 0, (PWSTR)g_pszArg1QuotaQLimit,
  513. ID_ARG2_NULL, NULL,
  514. ARG_TYPE_INT, ARG_FLAG_OPTIONAL |ARG_FLAG_ATLEASTONE,
  515. 0,
  516. 0, NULL,
  517. ARG_TERMINATOR
  518. };
  519. ARG_RECORD DSMOD_PARTITION_COMMANDS[]=
  520. {
  521. //
  522. // qdefault
  523. //
  524. 0, (PWSTR)g_pszArg1PartitionQDefault,
  525. ID_ARG2_NULL, NULL,
  526. ARG_TYPE_INT, ARG_FLAG_OPTIONAL |ARG_FLAG_ATLEASTONE,
  527. 0,
  528. 0, NULL,
  529. //
  530. // qtmbstnwt
  531. //
  532. 0, (PWSTR)g_pszArg1PartitionQtmbstnwt,
  533. ID_ARG2_NULL, NULL,
  534. ARG_TYPE_INT, ARG_FLAG_OPTIONAL |ARG_FLAG_ATLEASTONE,
  535. 0,
  536. 0, NULL,
  537. ARG_TERMINATOR
  538. };
  539. /*
  540. ARG_RECORD DSMOD_SUBNET_COMMANDS[]=
  541. {
  542. //name_or_objectdn
  543. IDS_ARG1_SUBNET_NAME_OR_OBJECTDN, NULL,
  544. ID_ARG2_NULL, NULL,
  545. ARG_TYPE_MSZ, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG,
  546. 0,
  547. 0, NULL,
  548. //name
  549. IDS_ARG1_SUBNET_NAME, NULL,
  550. ID_ARG2_NULL, NULL,
  551. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  552. 0,
  553. 0, NULL,
  554. //desc
  555. IDS_ARG1_SUBNET_DESC, NULL,
  556. ID_ARG2_NULL, NULL,
  557. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  558. 0,
  559. 0, NULL,
  560. //site
  561. IDS_ARG1_SUBNET_SITE, NULL,
  562. ID_ARG2_NULL, NULL,
  563. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  564. 0,
  565. 0, NULL,
  566. ARG_TERMINATOR,
  567. };
  568. ARG_RECORD DSMOD_SITE_COMMANDS[]=
  569. {
  570. //name_or_objectdn
  571. IDS_ARG1_SITE_NAME_OR_OBJECTDN, NULL,
  572. ID_ARG2_NULL, NULL,
  573. ARG_TYPE_MSZ, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG,
  574. 0,
  575. 0, NULL,
  576. //name
  577. IDS_ARG1_SITE_NAME, NULL,
  578. ID_ARG2_NULL, NULL,
  579. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  580. 0,
  581. 0, NULL,
  582. //desc
  583. IDS_ARG1_SITE_DESC, NULL,
  584. ID_ARG2_NULL, NULL,
  585. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  586. 0,
  587. 0, NULL,
  588. //autotopology
  589. IDS_ARG1_SITE_AUTOTOPOLOGY, NULL,
  590. ID_ARG2_NULL, NULL,
  591. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  592. 0,
  593. 0, NULL,
  594. ARG_TERMINATOR,
  595. };
  596. ARG_RECORD DSMOD_SLINK_COMMANDS[]=
  597. {
  598. //name_or_objectdn
  599. IDS_ARG1_SLINK_NAME_OR_OBJECTDN, NULL,
  600. ID_ARG2_NULL, NULL,
  601. ARG_TYPE_MSZ, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG,
  602. 0,
  603. 0, NULL,
  604. //ip
  605. IDS_ARG1_SLINK_IP, NULL,
  606. ID_ARG2_NULL, NULL,
  607. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  608. 0,
  609. 0, NULL,
  610. //smtp
  611. IDS_ARG1_SLINK_SMTP, NULL,
  612. ID_ARG2_NULL, NULL,
  613. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  614. 0,
  615. 0, NULL,
  616. //name
  617. IDS_ARG1_SLINK_NAME, NULL,
  618. ID_ARG2_NULL, NULL,
  619. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  620. 0,
  621. 0, NULL,
  622. //addsite
  623. IDS_ARG1_SLINK_ADDSITE, NULL,
  624. ID_ARG2_NULL, NULL,
  625. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  626. 0,
  627. 0, NULL,
  628. //rmsite
  629. IDS_ARG1_SLINK_RMSITE, NULL,
  630. ID_ARG2_NULL, NULL,
  631. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  632. 0,
  633. 0, NULL,
  634. //cost
  635. IDS_ARG1_SLINK_COST, NULL,
  636. ID_ARG2_NULL, NULL,
  637. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  638. 0,
  639. 0, NULL,
  640. //repint
  641. IDS_ARG1_SLINK_REPINT, NULL,
  642. ID_ARG2_NULL, NULL,
  643. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  644. 0,
  645. 0, NULL,
  646. //desc
  647. IDS_ARG1_SLINK_DESC, NULL,
  648. ID_ARG2_NULL, NULL,
  649. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  650. 0,
  651. 0, NULL,
  652. //autobacksync
  653. IDS_ARG1_SLINK_AUTOBACKSYNC, NULL,
  654. ID_ARG2_NULL, NULL,
  655. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  656. 0,
  657. 0, NULL,
  658. //notify
  659. IDS_ARG1_SLINK_NOTIFY, NULL,
  660. ID_ARG2_NULL, NULL,
  661. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  662. 0,
  663. 0, NULL,
  664. ARG_TERMINATOR,
  665. };
  666. ARG_RECORD DSMOD_SLINKBR_COMMANDS[]=
  667. {
  668. //name_or_objectdn
  669. IDS_ARG1_SLINKBR_NAME_OR_OBJECTDN, NULL,
  670. ID_ARG2_NULL, NULL,
  671. ARG_TYPE_MSZ, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG,
  672. 0,
  673. 0, NULL,
  674. //ip
  675. IDS_ARG1_SLINKBR_IP, NULL,
  676. ID_ARG2_NULL, NULL,
  677. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  678. 0,
  679. 0, NULL,
  680. //smtp
  681. IDS_ARG1_SLINKBR_SMTP, NULL,
  682. ID_ARG2_NULL, NULL,
  683. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  684. 0,
  685. 0, NULL,
  686. //name
  687. IDS_ARG1_SLINKBR_NAME, NULL,
  688. ID_ARG2_NULL, NULL,
  689. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  690. 0,
  691. 0, NULL,
  692. //addslink
  693. IDS_ARG1_SLINKBR_ADDSLINK, NULL,
  694. ID_ARG2_NULL, NULL,
  695. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  696. 0,
  697. 0, NULL,
  698. //rmslink
  699. IDS_ARG1_SLINKBR_RMSLINK, NULL,
  700. ID_ARG2_NULL, NULL,
  701. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  702. 0,
  703. 0, NULL,
  704. //desc
  705. IDS_ARG1_SLINKBR_DESC, NULL,
  706. ID_ARG2_NULL, NULL,
  707. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  708. 0,
  709. 0, NULL,
  710. ARG_TERMINATOR,
  711. };
  712. ARG_RECORD DSMOD_CONN_COMMANDS[]=
  713. {
  714. //name_or_objectdn
  715. IDS_ARG1_CONN_NAME_OR_OBJECTDN, NULL,
  716. ID_ARG2_NULL, NULL,
  717. ARG_TYPE_MSZ, ARG_FLAG_REQUIRED|ARG_FLAG_NOFLAG,
  718. 0,
  719. 0, NULL,
  720. //transport
  721. IDS_ARG1_CONN_TRANSPORT, NULL,
  722. ID_ARG2_NULL, NULL,
  723. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  724. 0,
  725. 0, NULL,
  726. //enabled
  727. IDS_ARG1_CONN_ENABLED, NULL,
  728. ID_ARG2_NULL, NULL,
  729. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  730. 0,
  731. 0, NULL,
  732. //desc
  733. IDS_ARG1_CONN_DESC, NULL,
  734. ID_ARG2_NULL, NULL,
  735. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  736. 0,
  737. 0, NULL,
  738. //manual
  739. IDS_ARG1_CONN_MANUAL, NULL,
  740. ID_ARG2_NULL, NULL,
  741. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  742. 0,
  743. 0, NULL,
  744. //autobacksync
  745. IDS_ARG1_CONN_AUTOBACKSYNC, NULL,
  746. ID_ARG2_NULL, NULL,
  747. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  748. 0,
  749. 0, NULL,
  750. //notify
  751. IDS_ARG1_CONN_NOTIFY, NULL,
  752. ID_ARG2_NULL, NULL,
  753. ARG_TYPE_STR, ARG_FLAG_OPTIONAL,
  754. 0,
  755. 0, NULL,
  756. ARG_TERMINATOR,
  757. };
  758. */
  759. ARG_RECORD DSMOD_SERVER_COMMANDS[]=
  760. {
  761. //
  762. // isGC
  763. //
  764. 0, (PWSTR)g_pszArg1ServerIsGC,
  765. ID_ARG2_NULL, NULL,
  766. ARG_TYPE_STR, ARG_FLAG_OPTIONAL|ARG_FLAG_ATLEASTONE,
  767. 0,
  768. 0, ValidateYesNo,
  769. ARG_TERMINATOR
  770. };
  771. //+-------------------------------------------------------------------------
  772. // Attributes
  773. //--------------------------------------------------------------------------
  774. //
  775. // Description
  776. //
  777. DSATTRIBUTEDESCRIPTION description =
  778. {
  779. {
  780. L"description",
  781. ADS_ATTR_UPDATE,
  782. ADSTYPE_CASE_IGNORE_STRING,
  783. NULL,
  784. 0
  785. },
  786. 0
  787. };
  788. DSATTRIBUTETABLEENTRY descriptionEntry =
  789. {
  790. L"description",
  791. eCommDescription,
  792. 0,
  793. &description,
  794. FillAttrInfoFromObjectEntry,
  795. NULL
  796. };
  797. //
  798. // UPN
  799. //
  800. DSATTRIBUTEDESCRIPTION upn =
  801. {
  802. {
  803. L"userPrincipalName",
  804. ADS_ATTR_UPDATE,
  805. ADSTYPE_CASE_IGNORE_STRING,
  806. NULL,
  807. 0
  808. },
  809. 0
  810. };
  811. DSATTRIBUTETABLEENTRY upnUserEntry =
  812. {
  813. L"userPrincipalName",
  814. eUserUpn,
  815. 0,
  816. &upn,
  817. FillAttrInfoFromObjectEntry,
  818. NULL
  819. };
  820. //
  821. // First name
  822. //
  823. DSATTRIBUTEDESCRIPTION firstName =
  824. {
  825. {
  826. L"givenName",
  827. ADS_ATTR_UPDATE,
  828. ADSTYPE_CASE_IGNORE_STRING,
  829. NULL,
  830. 0
  831. },
  832. 0
  833. };
  834. DSATTRIBUTETABLEENTRY firstNameUserEntry =
  835. {
  836. L"givenName",
  837. eUserFn,
  838. 0,
  839. &firstName,
  840. FillAttrInfoFromObjectEntry,
  841. NULL
  842. };
  843. DSATTRIBUTETABLEENTRY firstNameContactEntry =
  844. {
  845. L"givenName",
  846. eContactFn,
  847. 0,
  848. &firstName,
  849. FillAttrInfoFromObjectEntry,
  850. NULL
  851. };
  852. //
  853. // Middle Initial
  854. //
  855. DSATTRIBUTEDESCRIPTION middleInitial =
  856. {
  857. {
  858. L"initials",
  859. ADS_ATTR_UPDATE,
  860. ADSTYPE_CASE_IGNORE_STRING,
  861. NULL,
  862. 0
  863. },
  864. 0
  865. };
  866. DSATTRIBUTETABLEENTRY middleInitialUserEntry =
  867. {
  868. L"initials",
  869. eUserMi,
  870. 0,
  871. &middleInitial,
  872. FillAttrInfoFromObjectEntry,
  873. NULL
  874. };
  875. DSATTRIBUTETABLEENTRY middleInitialContactEntry =
  876. {
  877. L"initials",
  878. eContactMi,
  879. 0,
  880. &middleInitial,
  881. FillAttrInfoFromObjectEntry,
  882. NULL
  883. };
  884. //
  885. // Last name
  886. //
  887. DSATTRIBUTEDESCRIPTION lastName =
  888. {
  889. {
  890. L"sn",
  891. ADS_ATTR_UPDATE,
  892. ADSTYPE_CASE_IGNORE_STRING,
  893. NULL,
  894. 0
  895. },
  896. 0
  897. };
  898. DSATTRIBUTETABLEENTRY lastNameUserEntry =
  899. {
  900. L"sn",
  901. eUserLn,
  902. 0,
  903. &lastName,
  904. FillAttrInfoFromObjectEntry,
  905. NULL
  906. };
  907. DSATTRIBUTETABLEENTRY lastNameContactEntry =
  908. {
  909. L"sn",
  910. eContactLn,
  911. 0,
  912. &lastName,
  913. FillAttrInfoFromObjectEntry,
  914. NULL
  915. };
  916. //
  917. // Display name
  918. //
  919. DSATTRIBUTEDESCRIPTION displayName =
  920. {
  921. {
  922. L"displayName",
  923. ADS_ATTR_UPDATE,
  924. ADSTYPE_CASE_IGNORE_STRING,
  925. NULL,
  926. 0
  927. },
  928. 0
  929. };
  930. DSATTRIBUTETABLEENTRY displayNameUserEntry =
  931. {
  932. L"displayName",
  933. eUserDisplay,
  934. 0,
  935. &displayName,
  936. FillAttrInfoFromObjectEntry,
  937. NULL
  938. };
  939. DSATTRIBUTETABLEENTRY displayNameContactEntry =
  940. {
  941. L"displayName",
  942. eContactDisplay,
  943. 0,
  944. &displayName,
  945. FillAttrInfoFromObjectEntry,
  946. NULL
  947. };
  948. //
  949. // Employee ID
  950. //
  951. DSATTRIBUTEDESCRIPTION employeeID =
  952. {
  953. {
  954. L"employeeID",
  955. ADS_ATTR_UPDATE,
  956. ADSTYPE_CASE_IGNORE_STRING,
  957. NULL,
  958. 0
  959. },
  960. 0
  961. };
  962. DSATTRIBUTETABLEENTRY employeeIDUserEntry =
  963. {
  964. L"employeeID",
  965. eUserEmpID,
  966. 0,
  967. &employeeID,
  968. FillAttrInfoFromObjectEntry,
  969. NULL
  970. };
  971. //
  972. // Password
  973. //
  974. DSATTRIBUTEDESCRIPTION password =
  975. {
  976. {
  977. NULL,
  978. ADS_ATTR_UPDATE,
  979. ADSTYPE_INVALID,
  980. NULL,
  981. 0
  982. },
  983. 0
  984. };
  985. DSATTRIBUTETABLEENTRY passwordUserEntry =
  986. {
  987. L"password",
  988. eUserPwd,
  989. 0,
  990. &password,
  991. ResetUserPassword,
  992. NULL
  993. };
  994. //
  995. // Office
  996. //
  997. DSATTRIBUTEDESCRIPTION office =
  998. {
  999. {
  1000. L"physicalDeliveryOfficeName",
  1001. ADS_ATTR_UPDATE,
  1002. ADSTYPE_CASE_IGNORE_STRING,
  1003. NULL,
  1004. 0
  1005. },
  1006. 0
  1007. };
  1008. DSATTRIBUTETABLEENTRY officeUserEntry =
  1009. {
  1010. L"physicalDeliveryOfficeName",
  1011. eUserOffice,
  1012. 0,
  1013. &office,
  1014. FillAttrInfoFromObjectEntry,
  1015. NULL
  1016. };
  1017. DSATTRIBUTETABLEENTRY officeContactEntry =
  1018. {
  1019. L"physicalDeliveryOfficeName",
  1020. eContactOffice,
  1021. 0,
  1022. &office,
  1023. FillAttrInfoFromObjectEntry,
  1024. NULL
  1025. };
  1026. //
  1027. // Telephone
  1028. //
  1029. DSATTRIBUTEDESCRIPTION telephone =
  1030. {
  1031. {
  1032. L"telephoneNumber",
  1033. ADS_ATTR_UPDATE,
  1034. ADSTYPE_CASE_IGNORE_STRING,
  1035. NULL,
  1036. 0
  1037. },
  1038. 0
  1039. };
  1040. DSATTRIBUTETABLEENTRY telephoneUserEntry =
  1041. {
  1042. L"telephoneNumber",
  1043. eUserTel,
  1044. 0,
  1045. &telephone,
  1046. FillAttrInfoFromObjectEntry,
  1047. NULL
  1048. };
  1049. DSATTRIBUTETABLEENTRY telephoneContactEntry =
  1050. {
  1051. L"telephoneNumber",
  1052. eContactTel,
  1053. 0,
  1054. &telephone,
  1055. FillAttrInfoFromObjectEntry,
  1056. NULL
  1057. };
  1058. //
  1059. // Email
  1060. //
  1061. DSATTRIBUTEDESCRIPTION email =
  1062. {
  1063. {
  1064. L"mail",
  1065. ADS_ATTR_UPDATE,
  1066. ADSTYPE_CASE_IGNORE_STRING,
  1067. NULL,
  1068. 0
  1069. },
  1070. 0
  1071. };
  1072. DSATTRIBUTETABLEENTRY emailUserEntry =
  1073. {
  1074. L"mail",
  1075. eUserEmail,
  1076. DS_ATTRIBUTE_NOT_REUSABLE,
  1077. &email,
  1078. FillAttrInfoFromObjectEntryExpandUsername,
  1079. NULL
  1080. };
  1081. DSATTRIBUTETABLEENTRY emailContactEntry =
  1082. {
  1083. L"mail",
  1084. eContactEmail,
  1085. 0,
  1086. &email,
  1087. FillAttrInfoFromObjectEntry,
  1088. NULL
  1089. };
  1090. //
  1091. // Home Telephone
  1092. //
  1093. DSATTRIBUTEDESCRIPTION homeTelephone =
  1094. {
  1095. {
  1096. L"homePhone",
  1097. ADS_ATTR_UPDATE,
  1098. ADSTYPE_CASE_IGNORE_STRING,
  1099. NULL,
  1100. 0
  1101. },
  1102. 0
  1103. };
  1104. DSATTRIBUTETABLEENTRY homeTelephoneUserEntry =
  1105. {
  1106. L"homePhone",
  1107. eUserHometel,
  1108. 0,
  1109. &homeTelephone,
  1110. FillAttrInfoFromObjectEntry,
  1111. NULL
  1112. };
  1113. DSATTRIBUTETABLEENTRY homeTelephoneContactEntry =
  1114. {
  1115. L"homePhone",
  1116. eContactHometel,
  1117. 0,
  1118. &homeTelephone,
  1119. FillAttrInfoFromObjectEntry,
  1120. NULL
  1121. };
  1122. //
  1123. // Pager
  1124. //
  1125. DSATTRIBUTEDESCRIPTION pager =
  1126. {
  1127. {
  1128. L"pager",
  1129. ADS_ATTR_UPDATE,
  1130. ADSTYPE_CASE_IGNORE_STRING,
  1131. NULL,
  1132. 0
  1133. },
  1134. 0
  1135. };
  1136. DSATTRIBUTETABLEENTRY pagerUserEntry =
  1137. {
  1138. L"pager",
  1139. eUserPager,
  1140. 0,
  1141. &pager,
  1142. FillAttrInfoFromObjectEntry,
  1143. NULL
  1144. };
  1145. DSATTRIBUTETABLEENTRY pagerContactEntry =
  1146. {
  1147. L"pager",
  1148. eContactPager,
  1149. 0,
  1150. &pager,
  1151. FillAttrInfoFromObjectEntry,
  1152. NULL
  1153. };
  1154. //
  1155. // Mobile phone
  1156. //
  1157. DSATTRIBUTEDESCRIPTION mobile =
  1158. {
  1159. {
  1160. L"mobile",
  1161. ADS_ATTR_UPDATE,
  1162. ADSTYPE_CASE_IGNORE_STRING,
  1163. NULL,
  1164. 0
  1165. },
  1166. 0
  1167. };
  1168. DSATTRIBUTETABLEENTRY mobileUserEntry =
  1169. {
  1170. L"mobile",
  1171. eUserMobile,
  1172. 0,
  1173. &mobile,
  1174. FillAttrInfoFromObjectEntry,
  1175. NULL
  1176. };
  1177. DSATTRIBUTETABLEENTRY mobileContactEntry =
  1178. {
  1179. L"mobile",
  1180. eContactMobile,
  1181. 0,
  1182. &mobile,
  1183. FillAttrInfoFromObjectEntry,
  1184. NULL
  1185. };
  1186. //
  1187. // Fax
  1188. //
  1189. DSATTRIBUTEDESCRIPTION fax =
  1190. {
  1191. {
  1192. L"facsimileTelephoneNumber",
  1193. ADS_ATTR_UPDATE,
  1194. ADSTYPE_CASE_IGNORE_STRING,
  1195. NULL,
  1196. 0
  1197. },
  1198. 0
  1199. };
  1200. DSATTRIBUTETABLEENTRY faxUserEntry =
  1201. {
  1202. L"facsimileTelephoneNumber",
  1203. eUserFax,
  1204. 0,
  1205. &fax,
  1206. FillAttrInfoFromObjectEntry,
  1207. NULL
  1208. };
  1209. DSATTRIBUTETABLEENTRY faxContactEntry =
  1210. {
  1211. L"facsimileTelephoneNumber",
  1212. eContactFax,
  1213. 0,
  1214. &fax,
  1215. FillAttrInfoFromObjectEntry,
  1216. NULL
  1217. };
  1218. //
  1219. // Title
  1220. //
  1221. DSATTRIBUTEDESCRIPTION title =
  1222. {
  1223. {
  1224. L"title",
  1225. ADS_ATTR_UPDATE,
  1226. ADSTYPE_CASE_IGNORE_STRING,
  1227. NULL,
  1228. 0
  1229. },
  1230. 0
  1231. };
  1232. DSATTRIBUTETABLEENTRY titleUserEntry =
  1233. {
  1234. L"title",
  1235. eUserTitle,
  1236. 0,
  1237. &title,
  1238. FillAttrInfoFromObjectEntry,
  1239. NULL
  1240. };
  1241. DSATTRIBUTETABLEENTRY titleContactEntry =
  1242. {
  1243. L"title",
  1244. eContactTitle,
  1245. 0,
  1246. &title,
  1247. FillAttrInfoFromObjectEntry,
  1248. NULL
  1249. };
  1250. //
  1251. // Department
  1252. //
  1253. DSATTRIBUTEDESCRIPTION department =
  1254. {
  1255. {
  1256. L"department",
  1257. ADS_ATTR_UPDATE,
  1258. ADSTYPE_CASE_IGNORE_STRING,
  1259. NULL,
  1260. 0
  1261. },
  1262. 0
  1263. };
  1264. DSATTRIBUTETABLEENTRY departmentUserEntry =
  1265. {
  1266. L"department",
  1267. eUserDept,
  1268. 0,
  1269. &department,
  1270. FillAttrInfoFromObjectEntry,
  1271. NULL
  1272. };
  1273. DSATTRIBUTETABLEENTRY departmentContactEntry =
  1274. {
  1275. L"department",
  1276. eContactDept,
  1277. 0,
  1278. &department,
  1279. FillAttrInfoFromObjectEntry,
  1280. NULL
  1281. };
  1282. //
  1283. // Company
  1284. //
  1285. DSATTRIBUTEDESCRIPTION company =
  1286. {
  1287. {
  1288. L"company",
  1289. ADS_ATTR_UPDATE,
  1290. ADSTYPE_CASE_IGNORE_STRING,
  1291. NULL,
  1292. 0
  1293. },
  1294. 0
  1295. };
  1296. DSATTRIBUTETABLEENTRY companyUserEntry =
  1297. {
  1298. L"company",
  1299. eUserCompany,
  1300. 0,
  1301. &company,
  1302. FillAttrInfoFromObjectEntry,
  1303. NULL
  1304. };
  1305. DSATTRIBUTETABLEENTRY companyContactEntry =
  1306. {
  1307. L"company",
  1308. eContactCompany,
  1309. 0,
  1310. &company,
  1311. FillAttrInfoFromObjectEntry,
  1312. NULL
  1313. };
  1314. //
  1315. // Web Page
  1316. //
  1317. DSATTRIBUTEDESCRIPTION webPage =
  1318. {
  1319. {
  1320. L"wwwHomePage",
  1321. ADS_ATTR_UPDATE,
  1322. ADSTYPE_CASE_IGNORE_STRING,
  1323. NULL,
  1324. 0
  1325. },
  1326. 0
  1327. };
  1328. DSATTRIBUTETABLEENTRY webPageUserEntry =
  1329. {
  1330. L"wwwHomePage",
  1331. eUserWebPage,
  1332. 0,
  1333. &webPage,
  1334. FillAttrInfoFromObjectEntryExpandUsername,
  1335. NULL
  1336. };
  1337. //
  1338. // IP Phone
  1339. //
  1340. DSATTRIBUTEDESCRIPTION ipPhone =
  1341. {
  1342. {
  1343. L"ipPhone",
  1344. ADS_ATTR_UPDATE,
  1345. ADSTYPE_CASE_IGNORE_STRING,
  1346. NULL,
  1347. 0
  1348. },
  1349. 0
  1350. };
  1351. DSATTRIBUTETABLEENTRY ipPhoneUserEntry =
  1352. {
  1353. L"ipPhone",
  1354. eUserIPPhone,
  1355. 0,
  1356. &ipPhone,
  1357. FillAttrInfoFromObjectEntry,
  1358. NULL
  1359. };
  1360. DSATTRIBUTETABLEENTRY ipPhoneContactEntry =
  1361. {
  1362. L"ipPhone",
  1363. eContactIPPhone,
  1364. 0,
  1365. &ipPhone,
  1366. FillAttrInfoFromObjectEntry,
  1367. NULL
  1368. };
  1369. //
  1370. // Script Path
  1371. //
  1372. DSATTRIBUTEDESCRIPTION scriptPath =
  1373. {
  1374. {
  1375. L"scriptPath",
  1376. ADS_ATTR_UPDATE,
  1377. ADSTYPE_CASE_IGNORE_STRING,
  1378. NULL,
  1379. 0
  1380. },
  1381. 0
  1382. };
  1383. DSATTRIBUTETABLEENTRY scriptPathUserEntry =
  1384. {
  1385. L"scriptPath",
  1386. eUserScriptPath,
  1387. 0,
  1388. &scriptPath,
  1389. FillAttrInfoFromObjectEntry,
  1390. NULL
  1391. };
  1392. //
  1393. // Home Directory
  1394. //
  1395. DSATTRIBUTEDESCRIPTION homeDirectory =
  1396. {
  1397. {
  1398. L"homeDirectory",
  1399. ADS_ATTR_UPDATE,
  1400. ADSTYPE_CASE_IGNORE_STRING,
  1401. NULL,
  1402. 0
  1403. },
  1404. 0
  1405. };
  1406. DSATTRIBUTETABLEENTRY homeDirectoryUserEntry =
  1407. {
  1408. L"homeDirectory",
  1409. eUserHomeDir,
  1410. DS_ATTRIBUTE_NOT_REUSABLE,
  1411. &homeDirectory,
  1412. FillAttrInfoFromObjectEntryExpandUsername,
  1413. NULL
  1414. };
  1415. //
  1416. // Home Drive
  1417. //
  1418. DSATTRIBUTEDESCRIPTION homeDrive =
  1419. {
  1420. {
  1421. L"homeDrive",
  1422. ADS_ATTR_UPDATE,
  1423. ADSTYPE_CASE_IGNORE_STRING,
  1424. NULL,
  1425. 0
  1426. },
  1427. 0
  1428. };
  1429. DSATTRIBUTETABLEENTRY homeDriveUserEntry =
  1430. {
  1431. L"homeDrive",
  1432. eUserHomeDrive,
  1433. 0,
  1434. &homeDrive,
  1435. FillAttrInfoFromObjectEntry,
  1436. NULL
  1437. };
  1438. //
  1439. // Profile Path
  1440. //
  1441. DSATTRIBUTEDESCRIPTION profilePath =
  1442. {
  1443. {
  1444. L"profilePath",
  1445. ADS_ATTR_UPDATE,
  1446. ADSTYPE_CASE_IGNORE_STRING,
  1447. NULL,
  1448. 0
  1449. },
  1450. 0
  1451. };
  1452. DSATTRIBUTETABLEENTRY profilePathUserEntry =
  1453. {
  1454. L"profilePath",
  1455. eUserProfilePath,
  1456. DS_ATTRIBUTE_NOT_REUSABLE,
  1457. &profilePath,
  1458. FillAttrInfoFromObjectEntryExpandUsername,
  1459. NULL
  1460. };
  1461. //
  1462. // pwdLastSet
  1463. //
  1464. DSATTRIBUTEDESCRIPTION pwdLastSet =
  1465. {
  1466. {
  1467. L"pwdLastSet",
  1468. ADS_ATTR_UPDATE,
  1469. ADSTYPE_LARGE_INTEGER,
  1470. NULL,
  1471. 0
  1472. },
  1473. 0
  1474. };
  1475. DSATTRIBUTETABLEENTRY mustChangePwdUserEntry =
  1476. {
  1477. L"pwdLastSet",
  1478. eUserMustchpwd,
  1479. DS_ATTRIBUTE_NOT_REUSABLE | DS_ATTRIBUTE_POSTCREATE,
  1480. &pwdLastSet,
  1481. ChangeMustChangePwd,
  1482. NULL
  1483. };
  1484. //
  1485. // accountExpires
  1486. //
  1487. DSATTRIBUTEDESCRIPTION accountExpires =
  1488. {
  1489. {
  1490. L"accountExpires",
  1491. ADS_ATTR_UPDATE,
  1492. ADSTYPE_LARGE_INTEGER,
  1493. NULL,
  1494. 0
  1495. },
  1496. 0
  1497. };
  1498. DSATTRIBUTETABLEENTRY accountExpiresUserEntry =
  1499. {
  1500. L"accountExpires",
  1501. eUserAcctexpires,
  1502. 0,
  1503. &accountExpires,
  1504. AccountExpires,
  1505. NULL
  1506. };
  1507. //
  1508. // user account control
  1509. //
  1510. DSATTRIBUTEDESCRIPTION userAccountControl =
  1511. {
  1512. {
  1513. L"userAccountControl",
  1514. ADS_ATTR_UPDATE,
  1515. ADSTYPE_INTEGER,
  1516. NULL,
  1517. 0
  1518. },
  1519. 0
  1520. };
  1521. DSATTRIBUTETABLEENTRY disableComputerEntry =
  1522. {
  1523. L"userAccountControl",
  1524. eComputerDisabled,
  1525. DS_ATTRIBUTE_NOT_REUSABLE,
  1526. &userAccountControl,
  1527. DisableAccount,
  1528. NULL
  1529. };
  1530. DSATTRIBUTETABLEENTRY disableUserEntry =
  1531. {
  1532. L"userAccountControl",
  1533. eUserDisabled,
  1534. DS_ATTRIBUTE_NOT_REUSABLE,
  1535. &userAccountControl,
  1536. DisableAccount,
  1537. NULL
  1538. };
  1539. DSATTRIBUTETABLEENTRY pwdNeverExpiresUserEntry =
  1540. {
  1541. L"userAccountControl",
  1542. eUserPwdneverexpires,
  1543. DS_ATTRIBUTE_NOT_REUSABLE,
  1544. &userAccountControl,
  1545. PwdNeverExpires,
  1546. NULL
  1547. };
  1548. DSATTRIBUTETABLEENTRY reverisblePwdUserEntry =
  1549. {
  1550. L"userAccountControl",
  1551. eUserReversiblePwd,
  1552. DS_ATTRIBUTE_NOT_REUSABLE,
  1553. &userAccountControl,
  1554. ReversiblePwd,
  1555. NULL
  1556. };
  1557. //
  1558. // SAM Account Name
  1559. //
  1560. DSATTRIBUTEDESCRIPTION samAccountName =
  1561. {
  1562. {
  1563. L"sAMAccountName",
  1564. ADS_ATTR_UPDATE,
  1565. ADSTYPE_CASE_IGNORE_STRING,
  1566. NULL,
  1567. 0
  1568. },
  1569. 0
  1570. };
  1571. DSATTRIBUTETABLEENTRY samNameGroupEntry =
  1572. {
  1573. L"sAMAccountName",
  1574. eGroupSamname,
  1575. 0,
  1576. &samAccountName,
  1577. FillAttrInfoFromObjectEntry,
  1578. NULL
  1579. };
  1580. //
  1581. // Manager
  1582. //
  1583. DSATTRIBUTEDESCRIPTION manager =
  1584. {
  1585. {
  1586. L"manager",
  1587. ADS_ATTR_UPDATE,
  1588. ADSTYPE_CASE_IGNORE_STRING,
  1589. NULL,
  1590. 0
  1591. },
  1592. 0
  1593. };
  1594. DSATTRIBUTETABLEENTRY managerUserEntry =
  1595. {
  1596. L"manager",
  1597. eUserManager,
  1598. 0,
  1599. &manager,
  1600. FillAttrInfoFromObjectEntry,
  1601. NULL
  1602. };
  1603. //
  1604. // Group Type
  1605. //
  1606. DSATTRIBUTEDESCRIPTION groupType =
  1607. {
  1608. {
  1609. L"groupType",
  1610. ADS_ATTR_UPDATE,
  1611. ADSTYPE_INTEGER,
  1612. NULL,
  1613. 0
  1614. },
  1615. 0
  1616. };
  1617. DSATTRIBUTETABLEENTRY groupScopeTypeEntry =
  1618. {
  1619. L"groupType",
  1620. eGroupScope,
  1621. 0,
  1622. &groupType,
  1623. ChangeGroupScope,
  1624. NULL
  1625. };
  1626. DSATTRIBUTETABLEENTRY groupSecurityTypeEntry =
  1627. {
  1628. L"groupType",
  1629. eGroupSecgrp,
  1630. 0,
  1631. &groupType,
  1632. ChangeGroupSecurity,
  1633. NULL
  1634. };
  1635. //
  1636. // Add Group Members
  1637. //
  1638. DSATTRIBUTEDESCRIPTION groupAddMember =
  1639. {
  1640. {
  1641. L"member",
  1642. ADS_ATTR_APPEND,
  1643. ADSTYPE_DN_STRING,
  1644. NULL,
  1645. 0
  1646. },
  1647. 0
  1648. };
  1649. DSATTRIBUTETABLEENTRY groupAddMemberEntry =
  1650. {
  1651. L"member",
  1652. eGroupAddMember,
  1653. DS_ATTRIBUTE_NOT_REUSABLE,
  1654. &groupAddMember,
  1655. ModifyGroupMembers,
  1656. NULL
  1657. };
  1658. //
  1659. // Remove Group Members
  1660. //
  1661. DSATTRIBUTEDESCRIPTION groupRemoveMember =
  1662. {
  1663. {
  1664. L"member",
  1665. ADS_ATTR_UPDATE,
  1666. ADSTYPE_DN_STRING,
  1667. NULL,
  1668. 0
  1669. },
  1670. 0
  1671. };
  1672. DSATTRIBUTETABLEENTRY groupRemoveMemberEntry =
  1673. {
  1674. L"member",
  1675. eGroupRemoveMember,
  1676. DS_ATTRIBUTE_NOT_REUSABLE,
  1677. &groupRemoveMember,
  1678. RemoveGroupMembers,
  1679. NULL
  1680. };
  1681. //
  1682. // Change Group Members
  1683. //
  1684. DSATTRIBUTEDESCRIPTION groupChangeMember =
  1685. {
  1686. {
  1687. L"member",
  1688. ADS_ATTR_UPDATE,
  1689. ADSTYPE_DN_STRING,
  1690. NULL,
  1691. 0
  1692. },
  1693. 0
  1694. };
  1695. DSATTRIBUTETABLEENTRY groupChangeMemberEntry =
  1696. {
  1697. L"member",
  1698. eGroupChangeMember,
  1699. 0,
  1700. &groupChangeMember,
  1701. ModifyGroupMembers,
  1702. NULL
  1703. };
  1704. // Location
  1705. //
  1706. DSATTRIBUTEDESCRIPTION location =
  1707. {
  1708. {
  1709. L"location",
  1710. ADS_ATTR_UPDATE,
  1711. ADSTYPE_CASE_IGNORE_STRING,
  1712. NULL,
  1713. 0
  1714. },
  1715. 0
  1716. };
  1717. DSATTRIBUTETABLEENTRY locationComputerEntry =
  1718. {
  1719. L"location",
  1720. eComputerLocation,
  1721. DS_ATTRIBUTE_ONCREATE,
  1722. &location,
  1723. FillAttrInfoFromObjectEntry,
  1724. NULL
  1725. };
  1726. //
  1727. // Reset Computer account
  1728. //
  1729. DSATTRIBUTETABLEENTRY resetComputerEntry =
  1730. {
  1731. NULL,
  1732. eComputerReset,
  1733. DS_ATTRIBUTE_NOT_REUSABLE,
  1734. NULL,
  1735. ResetComputerAccount,
  1736. NULL
  1737. };
  1738. //
  1739. // User Can Change Password
  1740. //
  1741. DSATTRIBUTETABLEENTRY canChangePwdUserEntry =
  1742. {
  1743. NULL,
  1744. eUserCanchpwd,
  1745. DS_ATTRIBUTE_NOT_REUSABLE | DS_ATTRIBUTE_POSTCREATE,
  1746. NULL,
  1747. ChangeCanChangePassword,
  1748. NULL
  1749. };
  1750. //
  1751. // Server is GC
  1752. //
  1753. DSATTRIBUTEDESCRIPTION options =
  1754. {
  1755. {
  1756. L"options",
  1757. ADS_ATTR_UPDATE,
  1758. ADSTYPE_INTEGER,
  1759. NULL,
  1760. 0
  1761. },
  1762. 0
  1763. };
  1764. DSATTRIBUTETABLEENTRY serverIsGCEntry =
  1765. {
  1766. L"options",
  1767. eServerIsGC,
  1768. DS_ATTRIBUTE_NOT_REUSABLE | DS_ATTRIBUTE_POSTCREATE,
  1769. &options,
  1770. SetIsGC,
  1771. NULL
  1772. };
  1773. //
  1774. // qlimit
  1775. //
  1776. DSATTRIBUTEDESCRIPTION qlimit =
  1777. {
  1778. {
  1779. L"msDS-QuotaAmount",
  1780. ADS_ATTR_UPDATE,
  1781. ADSTYPE_INTEGER,
  1782. NULL,
  1783. 0
  1784. },
  1785. 0
  1786. };
  1787. DSATTRIBUTETABLEENTRY qlimitQuotaEntry =
  1788. {
  1789. L"qlimit",
  1790. eQuotaQlimit,
  1791. DS_ATTRIBUTE_ONCREATE,
  1792. &qlimit,
  1793. FillAttrInfoFromObjectEntry,
  1794. NULL
  1795. };
  1796. //
  1797. // qdefault
  1798. //
  1799. DSATTRIBUTEDESCRIPTION qdefault =
  1800. {
  1801. {
  1802. L"msDS-DefaultQuota",
  1803. ADS_ATTR_UPDATE,
  1804. ADSTYPE_INTEGER,
  1805. NULL,
  1806. 0
  1807. },
  1808. 0
  1809. };
  1810. DSATTRIBUTETABLEENTRY QDefaultPartitionEntry =
  1811. {
  1812. L"qdefault",
  1813. ePartitionQDefault,
  1814. DS_ATTRIBUTE_ONCREATE,
  1815. &qdefault,
  1816. FillAttrInfoFromObjectEntry,
  1817. NULL
  1818. };
  1819. //
  1820. // qtmbstnwt
  1821. //
  1822. DSATTRIBUTEDESCRIPTION qtmbstnwt =
  1823. {
  1824. {
  1825. L"msDS-TombstoneQuotaFactor",
  1826. ADS_ATTR_UPDATE,
  1827. ADSTYPE_INTEGER,
  1828. NULL,
  1829. 0
  1830. },
  1831. 0
  1832. };
  1833. DSATTRIBUTETABLEENTRY QtmbstnwtPartitionEntry =
  1834. {
  1835. L"qtmbstnwt",
  1836. ePartitionQtmbstnwt,
  1837. DS_ATTRIBUTE_ONCREATE,
  1838. &qtmbstnwt,
  1839. FillAttrInfoFromObjectEntry,
  1840. NULL
  1841. };
  1842. //+-------------------------------------------------------------------------
  1843. // Objects
  1844. //--------------------------------------------------------------------------
  1845. //
  1846. // Organizational Unit
  1847. //
  1848. PDSATTRIBUTETABLEENTRY OUAttributeTable[] =
  1849. {
  1850. &descriptionEntry
  1851. };
  1852. DSOBJECTTABLEENTRY g_OUObjectEntry =
  1853. {
  1854. L"organizationalUnit",
  1855. g_pszOU,
  1856. NULL, // Uses just the common switches
  1857. USAGE_DSMOD_OU,
  1858. sizeof(OUAttributeTable)/sizeof(PDSATTRIBUTETABLEENTRY),
  1859. OUAttributeTable
  1860. };
  1861. //
  1862. // User
  1863. //
  1864. PDSATTRIBUTETABLEENTRY UserAttributeTable[] =
  1865. {
  1866. &descriptionEntry,
  1867. &upnUserEntry,
  1868. &firstNameUserEntry,
  1869. &middleInitialUserEntry,
  1870. &lastNameUserEntry,
  1871. &displayNameUserEntry,
  1872. &employeeIDUserEntry,
  1873. &passwordUserEntry,
  1874. &officeUserEntry,
  1875. &telephoneUserEntry,
  1876. &emailUserEntry,
  1877. &homeTelephoneUserEntry,
  1878. &pagerUserEntry,
  1879. &mobileUserEntry,
  1880. &faxUserEntry,
  1881. &ipPhoneUserEntry,
  1882. &webPageUserEntry,
  1883. &titleUserEntry,
  1884. &departmentUserEntry,
  1885. &companyUserEntry,
  1886. &managerUserEntry,
  1887. &homeDirectoryUserEntry,
  1888. &homeDriveUserEntry,
  1889. &profilePathUserEntry,
  1890. &scriptPathUserEntry,
  1891. &mustChangePwdUserEntry,
  1892. &canChangePwdUserEntry,
  1893. &reverisblePwdUserEntry,
  1894. &pwdNeverExpiresUserEntry,
  1895. &accountExpiresUserEntry,
  1896. &disableUserEntry,
  1897. };
  1898. DSOBJECTTABLEENTRY g_UserObjectEntry =
  1899. {
  1900. L"user",
  1901. g_pszUser,
  1902. DSMOD_USER_COMMANDS,
  1903. USAGE_DSMOD_USER,
  1904. sizeof(UserAttributeTable)/sizeof(PDSATTRIBUTETABLEENTRY),
  1905. UserAttributeTable
  1906. };
  1907. //
  1908. // Contact
  1909. //
  1910. PDSATTRIBUTETABLEENTRY ContactAttributeTable[] =
  1911. {
  1912. &descriptionEntry,
  1913. &firstNameContactEntry,
  1914. &middleInitialContactEntry,
  1915. &lastNameContactEntry,
  1916. &displayNameContactEntry,
  1917. &officeContactEntry,
  1918. &telephoneContactEntry,
  1919. &emailContactEntry,
  1920. &homeTelephoneContactEntry,
  1921. &pagerContactEntry,
  1922. &mobileContactEntry,
  1923. &faxContactEntry,
  1924. &ipPhoneContactEntry,
  1925. &titleContactEntry,
  1926. &departmentContactEntry,
  1927. &companyContactEntry
  1928. };
  1929. DSOBJECTTABLEENTRY g_ContactObjectEntry =
  1930. {
  1931. L"contact",
  1932. g_pszContact,
  1933. DSMOD_CONTACT_COMMANDS,
  1934. USAGE_DSMOD_CONTACT,
  1935. sizeof(ContactAttributeTable)/sizeof(PDSATTRIBUTETABLEENTRY),
  1936. ContactAttributeTable
  1937. };
  1938. //
  1939. // Computer
  1940. //
  1941. PDSATTRIBUTETABLEENTRY ComputerAttributeTable[] =
  1942. {
  1943. &descriptionEntry,
  1944. &locationComputerEntry,
  1945. &disableComputerEntry,
  1946. &resetComputerEntry,
  1947. };
  1948. DSOBJECTTABLEENTRY g_ComputerObjectEntry =
  1949. {
  1950. L"computer",
  1951. g_pszComputer,
  1952. DSMOD_COMPUTER_COMMANDS,
  1953. USAGE_DSMOD_COMPUTER,
  1954. sizeof(ComputerAttributeTable)/sizeof(PDSATTRIBUTETABLEENTRY),
  1955. ComputerAttributeTable
  1956. };
  1957. //
  1958. // Group
  1959. //
  1960. PDSATTRIBUTETABLEENTRY GroupAttributeTable[] =
  1961. {
  1962. &descriptionEntry,
  1963. &samNameGroupEntry,
  1964. &groupScopeTypeEntry,
  1965. &groupSecurityTypeEntry,
  1966. &groupAddMemberEntry,
  1967. &groupRemoveMemberEntry,
  1968. &groupChangeMemberEntry
  1969. };
  1970. DSOBJECTTABLEENTRY g_GroupObjectEntry =
  1971. {
  1972. L"group",
  1973. g_pszGroup,
  1974. DSMOD_GROUP_COMMANDS,
  1975. USAGE_DSMOD_GROUP,
  1976. sizeof(GroupAttributeTable)/sizeof(PDSATTRIBUTETABLEENTRY),
  1977. GroupAttributeTable
  1978. };
  1979. //
  1980. // Server
  1981. //
  1982. PDSATTRIBUTETABLEENTRY ServerAttributeTable[] =
  1983. {
  1984. &descriptionEntry,
  1985. &serverIsGCEntry
  1986. };
  1987. DSOBJECTTABLEENTRY g_ServerObjectEntry =
  1988. {
  1989. L"server",
  1990. g_pszServer,
  1991. DSMOD_SERVER_COMMANDS,
  1992. USAGE_DSMOD_SERVER,
  1993. sizeof(ServerAttributeTable)/sizeof(PDSATTRIBUTETABLEENTRY),
  1994. ServerAttributeTable
  1995. };
  1996. //
  1997. // Quota
  1998. //
  1999. PDSATTRIBUTETABLEENTRY QuotaAttributeTable[] =
  2000. {
  2001. &descriptionEntry,
  2002. &qlimitQuotaEntry
  2003. };
  2004. DSOBJECTTABLEENTRY g_QuotaObjectEntry =
  2005. {
  2006. L"msDS-QuotaControl",
  2007. g_pszQuota,
  2008. DSMOD_QUOTA_COMMANDS,
  2009. USAGE_DSMOD_QUOTA,
  2010. sizeof(QuotaAttributeTable)/sizeof(PDSATTRIBUTETABLEENTRY),
  2011. QuotaAttributeTable
  2012. };
  2013. //
  2014. // Partition
  2015. //
  2016. PDSATTRIBUTETABLEENTRY PartitionAttributeTable[] =
  2017. {
  2018. &QDefaultPartitionEntry,
  2019. &QtmbstnwtPartitionEntry
  2020. };
  2021. DSOBJECTTABLEENTRY g_PartitionObjectEntry =
  2022. {
  2023. L"msDS-QuotaContainer",
  2024. g_pszPartition,
  2025. DSMOD_PARTITION_COMMANDS,
  2026. USAGE_DSMOD_PARTITION,
  2027. sizeof(PartitionAttributeTable)/sizeof(PDSATTRIBUTETABLEENTRY),
  2028. PartitionAttributeTable
  2029. };
  2030. //+-------------------------------------------------------------------------
  2031. // Object Table
  2032. //--------------------------------------------------------------------------
  2033. PDSOBJECTTABLEENTRY g_DSObjectTable[] =
  2034. {
  2035. &g_OUObjectEntry,
  2036. &g_UserObjectEntry,
  2037. &g_ContactObjectEntry,
  2038. &g_ComputerObjectEntry,
  2039. &g_GroupObjectEntry,
  2040. &g_ServerObjectEntry,
  2041. &g_QuotaObjectEntry,
  2042. &g_PartitionObjectEntry,
  2043. NULL
  2044. };
  2045. UINT USAGE_DSMOD[] =
  2046. {
  2047. USAGE_DSMOD_DESCRIPTION,
  2048. USAGE_DSMOD_REMARKS,
  2049. USAGE_DSMOD_EXAMPLES,
  2050. USAGE_END,
  2051. };
  2052. UINT USAGE_DSMOD_OU[] =
  2053. {
  2054. USAGE_DSMOD_OU_DESCRIPTION,
  2055. USAGE_DSMOD_OU_SYNTAX,
  2056. USAGE_DSMOD_OU_PARAMETERS,
  2057. USAGE_DSMOD_OU_REMARKS,
  2058. USAGE_DSMOD_OU_EXAMPLES,
  2059. USAGE_DSMOD_OU_SEE_ALSO,
  2060. USAGE_END,
  2061. };
  2062. UINT USAGE_DSMOD_USER[] =
  2063. {
  2064. USAGE_DSMOD_USER_DESCRIPTION,
  2065. USAGE_DSMOD_USER_SYNTAX,
  2066. USAGE_DSMOD_USER_PARAMETERS,
  2067. USAGE_DSMOD_USER_REMARKS,
  2068. USAGE_DSMOD_USER_EXAMPLES,
  2069. USAGE_DSMOD_USER_SEE_ALSO,
  2070. USAGE_END,
  2071. };
  2072. UINT USAGE_DSMOD_CONTACT[] =
  2073. {
  2074. USAGE_DSMOD_CONTACT_DESCRIPTION,
  2075. USAGE_DSMOD_CONTACT_SYNTAX,
  2076. USAGE_DSMOD_CONTACT_PARAMETERS,
  2077. USAGE_DSMOD_CONTACT_REMARKS,
  2078. USAGE_DSMOD_CONTACT_EXAMPLES,
  2079. USAGE_DSMOD_CONTACT_SEE_ALSO,
  2080. USAGE_END,
  2081. };
  2082. UINT USAGE_DSMOD_COMPUTER[] =
  2083. {
  2084. USAGE_DSMOD_COMPUTER_DESCRIPTION,
  2085. USAGE_DSMOD_COMPUTER_SYNTAX,
  2086. USAGE_DSMOD_COMPUTER_PARAMETERS,
  2087. USAGE_DSMOD_COMPUTER_REMARKS,
  2088. USAGE_DSMOD_COMPUTER_EXAMPLES,
  2089. USAGE_DSMOD_COMPUTER_SEE_ALSO,
  2090. USAGE_END,
  2091. };
  2092. UINT USAGE_DSMOD_GROUP[] =
  2093. {
  2094. USAGE_DSMOD_GROUP_DESCRIPTION,
  2095. USAGE_DSMOD_GROUP_SYNTAX,
  2096. USAGE_DSMOD_GROUP_PARAMETERS,
  2097. USAGE_DSMOD_GROUP_REMARKS,
  2098. USAGE_DSMOD_GROUP_EXAMPLES,
  2099. USAGE_DSMOD_GROUP_SEE_ALSO,
  2100. USAGE_END,
  2101. };
  2102. UINT USAGE_DSMOD_SERVER[] =
  2103. {
  2104. USAGE_DSMOD_SERVER_DESCRIPTION,
  2105. USAGE_DSMOD_SERVER_SYNTAX,
  2106. USAGE_DSMOD_SERVER_PARAMETERS,
  2107. USAGE_DSMOD_SERVER_REMARKS,
  2108. USAGE_DSMOD_SERVER_EXAMPLES,
  2109. USAGE_DSMOD_SERVER_SEE_ALSO,
  2110. USAGE_END,
  2111. };
  2112. UINT USAGE_DSMOD_QUOTA[] =
  2113. {
  2114. USAGE_DSMOD_QUOTA_DESCRIPTION,
  2115. USAGE_DSMOD_QUOTA_SYNTAX,
  2116. USAGE_DSMOD_QUOTA_PARAMETERS,
  2117. USAGE_DSMOD_QUOTA_REMARKS,
  2118. USAGE_DSMOD_QUOTA_SEE_ALSO,
  2119. USAGE_END,
  2120. };
  2121. UINT USAGE_DSMOD_PARTITION[] =
  2122. {
  2123. USAGE_DSMOD_PARTITION_DESCRIPTION,
  2124. USAGE_DSMOD_PARTITION_SYNTAX,
  2125. USAGE_DSMOD_PARTITION_PARAMETERS,
  2126. USAGE_DSMOD_PARTITION_REMARKS,
  2127. USAGE_DSMOD_PARTITION_SEE_ALSO,
  2128. USAGE_END,
  2129. };