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.

620 lines
18 KiB

  1. /*++
  2. Copyright (c) 1990 Microsoft Corporation
  3. Module Name:
  4. wkssvc.idl
  5. Abstract:
  6. Contains the Netr (Net Remote) RPC interface specification for the APIs
  7. associated with the Workstation service. This includes APIs from the
  8. following catagories:
  9. NetWksta
  10. NetUse
  11. Also contains the RPC specific data structures for these API.
  12. Author:
  13. Rita Wong (ritaw) 06-May-1991
  14. Environment:
  15. User Mode - Win32 - MIDL
  16. Revision History:
  17. 21-Jan-1992 rfirth
  18. * Removed NET_API_FUNCTION from all interfaces
  19. --*/
  20. //
  21. // Interface Attributes
  22. //
  23. [
  24. uuid(6BFFD098-A112-3610-9833-46C3F87E345A),
  25. version(1.0),
  26. #ifdef __midl
  27. ms_union,
  28. #endif // __midl
  29. pointer_default(unique)
  30. ]
  31. //
  32. // Interface Keyword
  33. //
  34. interface wkssvc
  35. //
  36. // Interface Body
  37. //
  38. {
  39. import "imports.idl";
  40. #include <lmcons.h>
  41. //
  42. // BUGBUG - take this definition out when midl understands LPWSTR etc
  43. //
  44. #ifdef UNICODE
  45. #define LPTSTR wchar_t*
  46. #endif
  47. //
  48. // ---------------------------------------------------------------//
  49. //
  50. typedef [handle] LPTSTR WKSSVC_IMPERSONATE_HANDLE;
  51. typedef [handle] LPTSTR WKSSVC_IDENTIFY_HANDLE;
  52. //
  53. // Workstation APIs
  54. //
  55. //
  56. // NetrWkstaGetInfo and NetrWkstaSetInfo
  57. //
  58. typedef [switch_type(unsigned long)] union _WKSTA_INFO {
  59. [case(100)]
  60. LPWKSTA_INFO_100 WkstaInfo100;
  61. [case(101)]
  62. LPWKSTA_INFO_101 WkstaInfo101;
  63. [case(102)]
  64. LPWKSTA_INFO_102 WkstaInfo102;
  65. [case(1010)]
  66. LPWKSTA_INFO_1010 WkstaInfo1010;
  67. [case(1011)]
  68. LPWKSTA_INFO_1011 WkstaInfo1011;
  69. [case(1012)]
  70. LPWKSTA_INFO_1012 WkstaInfo1012;
  71. [case(1013)]
  72. LPWKSTA_INFO_1013 WkstaInfo1013;
  73. [case(1018)]
  74. LPWKSTA_INFO_1018 WkstaInfo1018;
  75. [case(1023)]
  76. LPWKSTA_INFO_1023 WkstaInfo1023;
  77. [case(1033)]
  78. LPWKSTA_INFO_1033 WkstaInfo1033;
  79. [case(1041)]
  80. LPWKSTA_INFO_1041 WkstaInfo1041;
  81. [case(1042)]
  82. LPWKSTA_INFO_1042 WkstaInfo1042;
  83. [case(1043)]
  84. LPWKSTA_INFO_1043 WkstaInfo1043;
  85. [case(1044)]
  86. LPWKSTA_INFO_1044 WkstaInfo1044;
  87. [case(1045)]
  88. LPWKSTA_INFO_1045 WkstaInfo1045;
  89. [case(1046)]
  90. LPWKSTA_INFO_1046 WkstaInfo1046;
  91. [case(1047)]
  92. LPWKSTA_INFO_1047 WkstaInfo1047;
  93. [case(1048)]
  94. LPWKSTA_INFO_1048 WkstaInfo1048;
  95. [case(1049)]
  96. LPWKSTA_INFO_1049 WkstaInfo1049;
  97. [case(1050)]
  98. LPWKSTA_INFO_1050 WkstaInfo1050;
  99. [case(1051)]
  100. LPWKSTA_INFO_1051 WkstaInfo1051;
  101. [case(1052)]
  102. LPWKSTA_INFO_1052 WkstaInfo1052;
  103. [case(1053)]
  104. LPWKSTA_INFO_1053 WkstaInfo1053;
  105. [case(1054)]
  106. LPWKSTA_INFO_1054 WkstaInfo1054;
  107. [case(1055)]
  108. LPWKSTA_INFO_1055 WkstaInfo1055;
  109. [case(1056)]
  110. LPWKSTA_INFO_1056 WkstaInfo1056;
  111. [case(1057)]
  112. LPWKSTA_INFO_1057 WkstaInfo1057;
  113. [case(1058)]
  114. LPWKSTA_INFO_1058 WkstaInfo1058;
  115. [case(1059)]
  116. LPWKSTA_INFO_1059 WkstaInfo1059;
  117. [case(1060)]
  118. LPWKSTA_INFO_1060 WkstaInfo1060;
  119. [case(1061)]
  120. LPWKSTA_INFO_1061 WkstaInfo1061;
  121. [case(1062)]
  122. LPWKSTA_INFO_1062 WkstaInfo1062;
  123. [case(502)]
  124. LPWKSTA_INFO_502 WkstaInfo502;
  125. [default]
  126. ;
  127. } WKSTA_INFO, *PWKSTA_INFO, *LPWKSTA_INFO;
  128. NET_API_STATUS
  129. NetrWkstaGetInfo (
  130. [in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
  131. [in] DWORD Level,
  132. [out, switch_is(Level)] LPWKSTA_INFO WkstaInfo
  133. );
  134. NET_API_STATUS
  135. NetrWkstaSetInfo (
  136. [in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
  137. [in] DWORD Level,
  138. [in, switch_is(Level)] LPWKSTA_INFO WkstaInfo,
  139. [in,out,unique] LPDWORD ErrorParameter
  140. );
  141. //
  142. // NetrWkstaUserEnum
  143. //
  144. typedef struct _WKSTA_USER_INFO_0_CONTAINER {
  145. DWORD EntriesRead;
  146. [size_is(EntriesRead)] LPWKSTA_USER_INFO_0 Buffer;
  147. } WKSTA_USER_INFO_0_CONTAINER, *PWKSTA_USER_INFO_0_CONTAINER,
  148. *LPWKSTA_USER_INFO_0_CONTAINER;
  149. typedef struct _WKSTA_USER_INFO_1_CONTAINER {
  150. DWORD EntriesRead;
  151. [size_is(EntriesRead)] LPWKSTA_USER_INFO_1 Buffer;
  152. } WKSTA_USER_INFO_1_CONTAINER, *PWKSTA_USER_INFO_1_CONTAINER,
  153. *LPWKSTA_USER_INFO_1_CONTAINER;
  154. typedef struct _WKSTA_USER_ENUM_STRUCT {
  155. DWORD Level;
  156. [switch_is(Level)] union _WKSTA_USER_ENUM_UNION {
  157. [case(0)]
  158. LPWKSTA_USER_INFO_0_CONTAINER Level0;
  159. [case(1)]
  160. LPWKSTA_USER_INFO_1_CONTAINER Level1;
  161. [default]
  162. ;
  163. } WkstaUserInfo;
  164. } WKSTA_USER_ENUM_STRUCT, *PWKSTA_USER_ENUM_STRUCT, *LPWKSTA_USER_ENUM_STRUCT;
  165. NET_API_STATUS
  166. NetrWkstaUserEnum (
  167. [in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
  168. [in,out] LPWKSTA_USER_ENUM_STRUCT UserInfo,
  169. [in] DWORD PreferredMaximumLength,
  170. [out] LPDWORD TotalEntries,
  171. [in,out,unique] LPDWORD ResumeHandle
  172. );
  173. //
  174. // NetrWkstaUserGetInfo and NetrWkstaUserSetInfo
  175. //
  176. typedef [switch_type(unsigned long)] union _WKSTA_USER_INFO {
  177. [case(0)]
  178. LPWKSTA_USER_INFO_0 UserInfo0;
  179. [case(1)]
  180. LPWKSTA_USER_INFO_1 UserInfo1;
  181. [case(1101)]
  182. LPWKSTA_USER_INFO_1101 UserInfo1101;
  183. [default]
  184. ;
  185. } WKSTA_USER_INFO, *PWKSTA_USER_INFO, *LPWKSTA_USER_INFO;
  186. NET_API_STATUS
  187. NetrWkstaUserGetInfo (
  188. [in,string,unique] WKSSVC_IDENTIFY_HANDLE Reserved,
  189. [in] DWORD Level,
  190. [out, switch_is(Level)] LPWKSTA_USER_INFO UserInfo
  191. );
  192. NET_API_STATUS
  193. NetrWkstaUserSetInfo (
  194. [in,string,unique] WKSSVC_IDENTIFY_HANDLE Reserved,
  195. [in] DWORD Level,
  196. [in, switch_is(Level)] LPWKSTA_USER_INFO UserInfo,
  197. [in,out,unique] LPDWORD ErrorParameter
  198. );
  199. //
  200. // NetrWkstaTransportEnum
  201. //
  202. typedef struct _WKSTA_TRANSPORT_INFO_0_CONTAINER {
  203. DWORD EntriesRead;
  204. [size_is(EntriesRead)] LPWKSTA_TRANSPORT_INFO_0 Buffer;
  205. } WKSTA_TRANSPORT_INFO_0_CONTAINER, *PWKSTA_TRANSPORT_INFO_0_CONTAINER,
  206. *LPWKSTA_TRANSPORT_INFO_0_CONTAINER;
  207. typedef struct _WKSTA_TRANSPORT_ENUM_STRUCT {
  208. DWORD Level;
  209. [switch_is(Level)] union _WKSTA_TRANSPORT_ENUM_UNION {
  210. [case(0)]
  211. LPWKSTA_TRANSPORT_INFO_0_CONTAINER Level0;
  212. [default]
  213. ;
  214. } WkstaTransportInfo;
  215. } WKSTA_TRANSPORT_ENUM_STRUCT, *PWKSTA_TRANSPORT_ENUM_STRUCT,
  216. *LPWKSTA_TRANSPORT_ENUM_STRUCT;
  217. NET_API_STATUS
  218. NetrWkstaTransportEnum (
  219. [in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
  220. [in,out] LPWKSTA_TRANSPORT_ENUM_STRUCT TransportInfo,
  221. [in] DWORD PreferredMaximumLength,
  222. [out] LPDWORD TotalEntries,
  223. [in,out,unique] LPDWORD ResumeHandle
  224. );
  225. //
  226. // NetrWkstaTransportAdd
  227. //
  228. NET_API_STATUS
  229. NetrWkstaTransportAdd (
  230. [in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
  231. [in] DWORD Level,
  232. [in] LPWKSTA_TRANSPORT_INFO_0 TransportInfo,
  233. [in,out,unique] LPDWORD ErrorParameter
  234. );
  235. //
  236. // NetrWkstaTransportDel
  237. //
  238. NET_API_STATUS
  239. NetrWkstaTransportDel (
  240. [in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
  241. [in,string,unique] LPTSTR TransportName,
  242. [in] DWORD ForceLevel
  243. );
  244. //
  245. // NetrUseAdd and NetrUseGetInfo
  246. //
  247. typedef [switch_type(unsigned long)] union _USE_INFO {
  248. [case(0)]
  249. LPUSE_INFO_0 UseInfo0;
  250. [case(1)]
  251. LPUSE_INFO_1 UseInfo1;
  252. [case(2)]
  253. LPUSE_INFO_2 UseInfo2;
  254. [case(3)]
  255. LPUSE_INFO_3 UseInfo3;
  256. [default]
  257. ;
  258. } USE_INFO, *PUSE_INFO, *LPUSE_INFO;
  259. NET_API_STATUS
  260. NetrUseAdd (
  261. [in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
  262. [in] DWORD Level,
  263. [in, switch_is(Level)] LPUSE_INFO InfoStruct,
  264. [in,out,unique] LPDWORD ErrorParameter
  265. );
  266. NET_API_STATUS
  267. NetrUseGetInfo (
  268. [in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
  269. [in,string] LPTSTR UseName,
  270. [in] DWORD Level,
  271. [out, switch_is(Level)] LPUSE_INFO InfoStruct
  272. );
  273. //
  274. // NetrUseDel
  275. //
  276. NET_API_STATUS
  277. NetrUseDel (
  278. [in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
  279. [in,string] LPTSTR UseName,
  280. [in] DWORD ForceLevel
  281. );
  282. //
  283. // NetrUseEnum
  284. //
  285. typedef struct _USE_INFO_0_CONTAINER {
  286. DWORD EntriesRead;
  287. [size_is(EntriesRead)] LPUSE_INFO_0 Buffer;
  288. } USE_INFO_0_CONTAINER, *PUSE_INFO_0_CONTAINER, *LPUSE_INFO_0_CONTAINER;
  289. typedef struct _USE_INFO_1_CONTAINER {
  290. DWORD EntriesRead;
  291. [size_is(EntriesRead)] LPUSE_INFO_1 Buffer;
  292. } USE_INFO_1_CONTAINER, *PUSE_INFO_1_CONTAINER, *LPUSE_INFO_1_CONTAINER;
  293. typedef struct _USE_INFO_2_CONTAINER {
  294. DWORD EntriesRead;
  295. [size_is(EntriesRead)] LPUSE_INFO_2 Buffer;
  296. } USE_INFO_2_CONTAINER, *PUSE_INFO_2_CONTAINER, *LPUSE_INFO_2_CONTAINER;
  297. typedef struct _USE_ENUM_STRUCT {
  298. DWORD Level;
  299. [switch_is(Level)] union _USE_ENUM_UNION {
  300. [case(0)]
  301. LPUSE_INFO_0_CONTAINER Level0;
  302. [case(1)]
  303. LPUSE_INFO_1_CONTAINER Level1;
  304. [case(2)]
  305. LPUSE_INFO_2_CONTAINER Level2;
  306. [default]
  307. ;
  308. } UseInfo;
  309. }USE_ENUM_STRUCT, *PUSE_ENUM_STRUCT, *LPUSE_ENUM_STRUCT;
  310. NET_API_STATUS
  311. NetrUseEnum (
  312. [in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
  313. [in,out] LPUSE_ENUM_STRUCT InfoStruct,
  314. [in] DWORD PreferedMaximumLength,
  315. [out] LPDWORD TotalEntries,
  316. [in,out,unique] LPDWORD ResumeHandle
  317. );
  318. //
  319. // NetrMessageBufferSend
  320. //
  321. NET_API_STATUS
  322. NetrMessageBufferSend (
  323. [in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
  324. [in,string] LPTSTR MessageName,
  325. [in,string,unique] LPTSTR FromName,
  326. [in,size_is(MessageSize)] LPBYTE Message,
  327. [in] DWORD MessageSize
  328. );
  329. NET_API_STATUS
  330. NetrWorkstationStatisticsGet(
  331. [in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
  332. [in,string,unique] LPTSTR ServiceName,
  333. [in] DWORD Level,
  334. [in] DWORD Options,
  335. [out] LPSTAT_WORKSTATION_0* Buffer
  336. );
  337. //
  338. // I_NetrLogonDomainNameAdd
  339. //
  340. NET_API_STATUS
  341. I_NetrLogonDomainNameAdd(
  342. [in,string] WKSSVC_IDENTIFY_HANDLE LogonDomain
  343. );
  344. //
  345. // I_NetrLogonDomainNameDel
  346. //
  347. NET_API_STATUS
  348. I_NetrLogonDomainNameDel(
  349. [in,string] WKSSVC_IDENTIFY_HANDLE LogonDomain
  350. );
  351. //
  352. // Net join apis
  353. //
  354. NET_API_STATUS
  355. NetrJoinDomain(
  356. [in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
  357. [in,string] LPTSTR DomainName,
  358. [in,string,unique] LPTSTR MachineAccountOU,
  359. [in,string,unique] LPTSTR AccountName,
  360. [in,string,unique] LPTSTR Password,
  361. [in] DWORD Options
  362. );
  363. NET_API_STATUS
  364. NetrUnjoinDomain(
  365. [in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
  366. [in,string,unique] LPTSTR AccountName,
  367. [in,string,unique] LPTSTR Password,
  368. [in] DWORD Options
  369. );
  370. NET_API_STATUS
  371. NetrRenameMachineInDomain(
  372. [in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
  373. [in,string,unique] LPTSTR MachineName,
  374. [in,string,unique] LPTSTR AccountName,
  375. [in,string,unique] LPTSTR Password,
  376. [in] DWORD Options
  377. );
  378. //
  379. // Determine the validity of a name
  380. //
  381. NET_API_STATUS
  382. NetrValidateName(
  383. [in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
  384. [in,string] LPTSTR NameToValidate,
  385. [in,string,unique] LPTSTR AccountName,
  386. [in,string,unique] LPTSTR Password,
  387. [in] NETSETUP_NAME_TYPE NameType
  388. );
  389. //
  390. // Determines whether a workstation is joined to a domain or not
  391. //
  392. NET_API_STATUS
  393. NetrGetJoinInformation(
  394. [in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
  395. [in,out,string] LPTSTR *NameBuffer,
  396. [out] PNETSETUP_JOIN_STATUS BufferType
  397. );
  398. typedef struct _NETSETUPR_MACHINE_ACCOUNT_OUS {
  399. [size_is( OUCount ), string ] LPWSTR *OUs;
  400. DWORD OUCount;
  401. } NETSETUPR_MACHINE_ACCOUNT_OUS, *PNETSETUPR_MACHINE_ACCOUNT_OUS,
  402. *LPNETSETUPR_MACHINE_ACCOUNT_OUS;
  403. typedef [string] LPWSTR OUSTRING;
  404. NET_API_STATUS
  405. NetrGetJoinableOUs(
  406. [in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
  407. [in,string] LPWSTR Domain,
  408. [in,string,unique] LPWSTR Account,
  409. [in,string,unique] LPWSTR Password,
  410. [in,out] DWORD *OUCount,
  411. [out,size_is(,*OUCount)] OUSTRING **OUs
  412. );
  413. //
  414. // Join APIs with encrypted passwords
  415. //
  416. //
  417. // Structure to pass an encrypted password over the wire. The Length is the
  418. // length of the password, which should be placed at the end of the buffer.
  419. //
  420. #define JOIN_OBFUSCATOR_LENGTH 8
  421. #define JOIN_MAX_PASSWORD_LENGTH PWLEN
  422. typedef struct _JOINPR_USER_PASSWORD {
  423. UCHAR Obfuscator[JOIN_OBFUSCATOR_LENGTH];
  424. WCHAR Buffer[JOIN_MAX_PASSWORD_LENGTH];
  425. ULONG Length;
  426. } JOINPR_USER_PASSWORD, *PJOINPR_USER_PASSWORD;
  427. //
  428. // Buffer - contains random fill with the password filling up the end
  429. // of the buffer (the last Length bytes).
  430. // Length - Length, in bytes, of the buffer.
  431. //
  432. //
  433. // This is the encrypted version of the above structure, and is passed
  434. // on the wire.
  435. //
  436. typedef struct _JOINPR_ENCRYPTED_USER_PASSWORD {
  437. UCHAR Buffer[ JOIN_OBFUSCATOR_LENGTH + (JOIN_MAX_PASSWORD_LENGTH * sizeof(WCHAR)) + sizeof(ULONG) ];
  438. } JOINPR_ENCRYPTED_USER_PASSWORD, *PJOINPR_ENCRYPTED_USER_PASSWORD;
  439. NET_API_STATUS
  440. NetrJoinDomain2(
  441. [in] handle_t RpcBindingHandle,
  442. [in,string,unique] LPTSTR ServerName,
  443. [in,string] LPTSTR DomainName,
  444. [in,string,unique] LPTSTR MachineAccountOU,
  445. [in,string,unique] LPTSTR AccountName,
  446. [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
  447. [in] DWORD Options
  448. );
  449. NET_API_STATUS
  450. NetrUnjoinDomain2(
  451. [in] handle_t RpcBindingHandle,
  452. [in,string,unique] LPTSTR ServerName,
  453. [in,string,unique] LPTSTR AccountName,
  454. [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
  455. [in] DWORD Options
  456. );
  457. NET_API_STATUS
  458. NetrRenameMachineInDomain2(
  459. [in] handle_t RpcBindingHandle,
  460. [in,string,unique] LPTSTR ServerName,
  461. [in,string,unique] LPTSTR MachineName,
  462. [in,string,unique] LPTSTR AccountName,
  463. [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
  464. [in] DWORD Options
  465. );
  466. NET_API_STATUS
  467. NetrValidateName2(
  468. [in] handle_t RpcBindingHandle,
  469. [in,string,unique] LPTSTR ServerName,
  470. [in,string] LPTSTR NameToValidate,
  471. [in,string,unique] LPTSTR AccountName,
  472. [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
  473. [in] NETSETUP_NAME_TYPE NameType
  474. );
  475. NET_API_STATUS
  476. NetrGetJoinableOUs2(
  477. [in] handle_t RpcBindingHandle,
  478. [in,string,unique] LPTSTR ServerName,
  479. [in,string] LPWSTR Domain,
  480. [in,string,unique] LPWSTR Account,
  481. [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
  482. [in,out] DWORD *OUCount,
  483. [out,size_is(,*OUCount)] OUSTRING **OUs
  484. );
  485. //
  486. // Computer rename preparation API
  487. //
  488. NET_API_STATUS
  489. NetrAddAlternateComputerName(
  490. [in] handle_t RpcBindingHandle,
  491. [in,string,unique] LPTSTR ServerName,
  492. [in,string,unique] LPTSTR AlternateName,
  493. [in,string,unique] LPTSTR DomainAccount,
  494. [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
  495. [in] DWORD Options
  496. );
  497. NET_API_STATUS
  498. NetrRemoveAlternateComputerName(
  499. [in] handle_t RpcBindingHandle,
  500. [in,string,unique] LPTSTR ServerName,
  501. [in,string,unique] LPTSTR AlternateName,
  502. [in,string,unique] LPTSTR DomainAccount,
  503. [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
  504. [in] DWORD Options
  505. );
  506. NET_API_STATUS
  507. NetrSetPrimaryComputerName(
  508. [in] handle_t RpcBindingHandle,
  509. [in,string,unique] LPTSTR ServerName,
  510. [in,string,unique] LPTSTR PrimaryName,
  511. [in,string,unique] LPTSTR DomainAccount,
  512. [in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
  513. [in] DWORD Options
  514. );
  515. typedef struct _NET_COMPUTER_NAME_ARRAY {
  516. ULONG EntryCount;
  517. [size_is(EntryCount)] PUNICODE_STRING ComputerNames;
  518. } NET_COMPUTER_NAME_ARRAY, *PNET_COMPUTER_NAME_ARRAY;
  519. NET_API_STATUS
  520. NetrEnumerateComputerNames(
  521. [in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
  522. [in] NET_COMPUTER_NAME_TYPE NameType,
  523. [in] DWORD Options,
  524. [out] PNET_COMPUTER_NAME_ARRAY *ComputerNames
  525. );
  526. }