2 * Workstation Service interface definition
7 typedef [handle] wchar_t *WKSSVC_IDENTIFY_HANDLE;
8 typedef [handle] wchar_t *WKSSVC_IMPERSONATE_HANDLE;
10 typedef enum _NETSETUP_JOIN_STATUS
12 NetSetupUnknownStatus = 0,
14 NetSetupWorkgroupName,
16 } NETSETUP_JOIN_STATUS, *PNETSETUP_JOIN_STATUS;
18 typedef enum _NETSETUP_NAME_TYPE
24 NetSetupNonExistentDomain,
26 } NETSETUP_NAME_TYPE, *PNETSETUP_NAME_TYPE;
28 typedef enum _NET_COMPUTER_NAME_TYPE
30 NetPrimaryComputerName = 0,
31 NetAlternateComputerNames,
33 NetComputerNameTypeMax
34 } NET_COMPUTER_NAME_TYPE, *PNET_COMPUTER_NAME_TYPE;
36 typedef struct _STAT_WORKSTATION_0
38 LARGE_INTEGER StatisticsStartTime;
39 LARGE_INTEGER BytesReceived;
40 LARGE_INTEGER SmbsReceived;
41 LARGE_INTEGER PagingReadBytesRequested;
42 LARGE_INTEGER NonPagingReadBytesRequested;
43 LARGE_INTEGER CacheReadBytesRequested;
44 LARGE_INTEGER NetworkReadBytesRequested;
45 LARGE_INTEGER BytesTransmitted;
46 LARGE_INTEGER SmbsTransmitted;
47 LARGE_INTEGER PagingWriteBytesRequested;
48 LARGE_INTEGER NonPagingWriteBytesRequested;
49 LARGE_INTEGER CacheWriteBytesRequested;
50 LARGE_INTEGER NetworkWriteBytesRequested;
51 unsigned long InitiallyFailedOperations;
52 unsigned long FailedCompletionOperations;
53 unsigned long ReadOperations;
54 unsigned long RandomReadOperations;
55 unsigned long ReadSmbs;
56 unsigned long LargeReadSmbs;
57 unsigned long SmallReadSmbs;
58 unsigned long WriteOperations;
59 unsigned long RandomWriteOperations;
60 unsigned long WriteSmbs;
61 unsigned long LargeWriteSmbs;
62 unsigned long SmallWriteSmbs;
63 unsigned long RawReadsDenied;
64 unsigned long RawWritesDenied;
65 unsigned long NetworkErrors;
66 unsigned long Sessions;
67 unsigned long FailedSessions;
68 unsigned long Reconnects;
69 unsigned long CoreConnects;
70 unsigned long Lanman20Connects;
71 unsigned long Lanman21Connects;
72 unsigned long LanmanNtConnects;
73 unsigned long ServerDisconnects;
74 unsigned long HungSessions;
75 unsigned long UseCount;
76 unsigned long FailedUseCount;
77 unsigned long CurrentCommands;
78 } STAT_WORKSTATION_0, *PSTAT_WORKSTATION_0, *LPSTAT_WORKSTATION_0;
80 typedef struct _WKSTA_INFO_100
82 unsigned long wki100_platform_id;
83 [string] wchar_t *wki100_computername;
84 [string] wchar_t *wki100_langroup;
85 unsigned long wki100_ver_major;
86 unsigned long wki100_ver_minor;
87 } WKSTA_INFO_100, *PWKSTA_INFO_100, *LPWKSTA_INFO_100;
89 typedef struct _WKSTA_INFO_101
91 unsigned long wki101_platform_id;
92 [string] wchar_t *wki101_computername;
93 [string] wchar_t *wki101_langroup;
94 unsigned long wki101_ver_major;
95 unsigned long wki101_ver_minor;
96 [string] wchar_t* wki101_lanroot;
97 } WKSTA_INFO_101, *PWKSTA_INFO_101, *LPWKSTA_INFO_101;
99 typedef struct _WKSTA_INFO_102
101 unsigned long wki102_platform_id;
102 [string] wchar_t *wki102_computername;
103 [string] wchar_t *wki102_langroup;
104 unsigned long wki102_ver_major;
105 unsigned long wki102_ver_minor;
106 [string] wchar_t *wki102_lanroot;
107 unsigned long wki102_logged_on_users;
108 } WKSTA_INFO_102, *PWKSTA_INFO_102, *LPWKSTA_INFO_102;
110 typedef struct _WKSTA_INFO_502
112 unsigned long wki502_char_wait;
113 unsigned long wki502_collection_time;
114 unsigned long wki502_maximum_collection_count;
115 unsigned long wki502_keep_conn;
116 unsigned long wki502_max_cmds;
117 unsigned long wki502_sess_timeout;
118 unsigned long wki502_siz_char_buf;
119 unsigned long wki502_max_threads;
120 unsigned long wki502_lock_quota;
121 unsigned long wki502_lock_increment;
122 unsigned long wki502_lock_maximum;
123 unsigned long wki502_pipe_increment;
124 unsigned long wki502_pipe_maximum;
125 unsigned long wki502_cache_file_timeout;
126 unsigned long wki502_dormant_file_limit;
127 unsigned long wki502_read_ahead_throughput;
128 unsigned long wki502_num_mailslot_buffers;
129 unsigned long wki502_num_srv_announce_buffers;
130 unsigned long wki502_max_illegal_datagram_events;
131 unsigned long wki502_illegal_datagram_event_reset_frequency;
132 int wki502_log_election_packets;
133 int wki502_use_opportunistic_locking;
134 int wki502_use_unlock_behind;
135 int wki502_use_close_behind;
136 int wki502_buf_named_pipes;
137 int wki502_use_lock_read_unlock;
138 int wki502_utilize_nt_caching;
139 int wki502_use_raw_read;
140 int wki502_use_raw_write;
141 int wki502_use_write_raw_data;
142 int wki502_use_encryption;
143 int wki502_buf_files_deny_write;
144 int wki502_buf_read_only_files;
145 int wki502_force_core_create_mode;
146 int wki502_use_512_byte_max_transfer;
147 } WKSTA_INFO_502, *PWKSTA_INFO_502, *LPWKSTA_INFO_502;
149 typedef struct _WKSTA_INFO_1013
151 unsigned long wki1013_keep_conn;
152 } WKSTA_INFO_1013, *PWKSTA_INFO_1013, *LPWKSTA_INFO_1013;
154 typedef struct _WKSTA_INFO_1018
156 unsigned long wki1018_sess_timeout;
157 } WKSTA_INFO_1018, *PWKSTA_INFO_1018, *LPWKSTA_INFO_1018;
159 typedef struct _WKSTA_INFO_1046
161 unsigned long wki1046_dormant_file_limit;
162 } WKSTA_INFO_1046, *PWKSTA_INFO_1046, *LPWKSTA_INFO_1046;
164 typedef struct _WKSTA_USER_INFO_0
166 [string] wchar_t *wkui0_username;
167 } WKSTA_USER_INFO_0, *PWKSTA_USER_INFO_0, *LPWKSTA_USER_INFO_0;
169 typedef struct _WKSTA_USER_INFO_1
171 [string] wchar_t *wkui1_username;
172 [string] wchar_t *wkui1_logon_domain;
173 [string] wchar_t *wkui1_oth_domains;
174 [string] wchar_t *wkui1_logon_server;
175 } WKSTA_USER_INFO_1, *PWKSTA_USER_INFO_1, *LPWKSTA_USER_INFO_1;
177 typedef struct _WKSTA_USER_INFO_1101
179 [string] wchar_t *wkui1101_oth_domains;
180 } WKSTA_USER_INFO_1101, *PWKSTA_USER_INFO_1101, *LPWKSTA_USER_INFO_1101;
182 typedef [switch_type(unsigned long)] union _WKSTA_USER_INFO
184 [case(0)] LPWKSTA_USER_INFO_0 UserInfo0;
185 [case(1)] LPWKSTA_USER_INFO_1 UserInfo1;
186 [case(1101)] LPWKSTA_USER_INFO_1101 UserInfo1101;
188 } WKSTA_USER_INFO, *PWKSTA_USER_INFO, *LPWKSTA_USER_INFO;
190 typedef struct _WKSTA_TRANSPORT_INFO_0
192 unsigned long wkti0_quality_of_service;
193 unsigned long wkti0_number_of_vcs;
194 [string] wchar_t *wkti0_transport_name;
195 [string] wchar_t *wkti0_transport_address;
196 unsigned long wkti0_wan_ish;
197 } WKSTA_TRANSPORT_INFO_0, *PWKSTA_TRANSPORT_INFO_0, *LPWKSTA_TRANSPORT_INFO_0;
199 typedef [switch_type(unsigned long)] union _WKSTA_INFO
201 [case(100)] LPWKSTA_INFO_100 WkstaInfo100;
202 [case(101)] LPWKSTA_INFO_101 WkstaInfo101;
203 [case(102)] LPWKSTA_INFO_102 WkstaInfo102;
204 [case(502)] LPWKSTA_INFO_502 WkstaInfo502;
205 [case(1013)] LPWKSTA_INFO_1013 WkstaInfo1013;
206 [case(1018)] LPWKSTA_INFO_1018 WkstaInfo1018;
207 [case(1046)] LPWKSTA_INFO_1046 WkstaInfo1046;
209 } WKSTA_INFO, *PWKSTA_INFO, *LPWKSTA_INFO;
211 typedef struct _USE_INFO_0
213 [string] wchar_t *ui0_local;
214 [string] wchar_t *ui0_remote;
215 } USE_INFO_0, *PUSE_INFO_0, *LPUSE_INFO_0;
217 typedef struct _USE_INFO_1
219 [string] wchar_t *ui1_local;
220 [string] wchar_t *ui1_remote;
221 [string] wchar_t *ui1_password;
222 unsigned long ui1_status;
223 unsigned long ui1_asg_type;
224 unsigned long ui1_refcount;
225 unsigned long ui1_usecount;
226 } USE_INFO_1, *PUSE_INFO_1, *LPUSE_INFO_1;
228 typedef struct _USE_INFO_2
230 USE_INFO_1 ui2_useinfo;
231 [string] wchar_t *ui2_username;
232 [string] wchar_t *ui2_domainname;
233 } USE_INFO_2, *PUSE_INFO_2, *LPUSE_INFO_2;
235 typedef struct _USE_INFO_3
239 } USE_INFO_3, *PUSE_INFO_3, *LPUSE_INFO_3;
241 typedef [switch_type(unsigned long)] union _USE_INFO
243 [case(0)] LPUSE_INFO_0 UseInfo0;
244 [case(1)] LPUSE_INFO_1 UseInfo1;
245 [case(2)] LPUSE_INFO_2 UseInfo2;
246 [case(3)] LPUSE_INFO_3 UseInfo3;
248 } USE_INFO, *PUSE_INFO, *LPUSE_INFO;
250 typedef struct _USE_INFO_0_CONTAINER
252 unsigned long EntriesRead;
254 } USE_INFO_0_CONTAINER, *PUSE_INFO_0_CONTAINER, *LPUSE_INFO_0_CONTAINER;
256 typedef struct _USE_INFO_1_CONTAINER
258 unsigned long EntriesRead;
260 } USE_INFO_1_CONTAINER, *PUSE_INFO_1_CONTAINER, *LPUSE_INFO_1_CONTAINER;
262 typedef struct _USE_INFO_2_CONTAINER
264 unsigned long EntriesRead;
266 } USE_INFO_2_CONTAINER, *PUSE_INFO_2_CONTAINER, *LPUSE_INFO_2_CONTAINER;
268 typedef struct _USE_ENUM_STRUCT
271 [switch_is(Level)] union _USE_ENUM_UNION
273 [case(0)] LPUSE_INFO_0_CONTAINER Level0;
274 [case(1)] LPUSE_INFO_1_CONTAINER Level1;
275 [case(2)] LPUSE_INFO_2_CONTAINER Level2;
278 } USE_ENUM_STRUCT, *PUSE_ENUM_STRUCT, *LPUSE_ENUM_STRUCT;
280 typedef struct _WKSTA_USER_INFO_0_CONTAINER
282 unsigned long EntriesRead;
283 [size_is(EntriesRead)] LPWKSTA_USER_INFO_0 Buffer;
284 } WKSTA_USER_INFO_0_CONTAINER, *PWKSTA_USER_INFO_0_CONTAINER, *LPWKSTA_USER_INFO_0_CONTAINER;
286 typedef struct _WKSTA_USER_INFO_1_CONTAINER
288 unsigned long EntriesRead;
289 [size_is(EntriesRead)] LPWKSTA_USER_INFO_1 Buffer;
290 } WKSTA_USER_INFO_1_CONTAINER, *PWKSTA_USER_INFO_1_CONTAINER, *LPWKSTA_USER_INFO_1_CONTAINER;
292 typedef struct _WKSTA_USER_ENUM_STRUCT
295 [switch_is(Level)] union _WKSTA_USER_ENUM_UNION
297 [case(0)] LPWKSTA_USER_INFO_0_CONTAINER Level0;
298 [case(1)] LPWKSTA_USER_INFO_1_CONTAINER Level1;
301 } WKSTA_USER_ENUM_STRUCT, *PWKSTA_USER_ENUM_STRUCT, *LPWKSTA_USER_ENUM_STRUCT;
303 typedef struct _WKSTA_TRANSPORT_INFO_0_CONTAINER
305 unsigned long EntriesRead;
306 [size_is(EntriesRead)] LPWKSTA_TRANSPORT_INFO_0 Buffer;
307 } WKSTA_TRANSPORT_INFO_0_CONTAINER, *PWKSTA_TRANSPORT_INFO_0_CONTAINER, *LPWKSTA_TRANSPORT_INFO_0_CONTAINER;
309 typedef struct _WKSTA_TRANSPORT_ENUM_STRUCT
312 [switch_is(Level)] union _WKSTA_TRANSPORT_ENUM_UNION
314 [case(0)] LPWKSTA_TRANSPORT_INFO_0_CONTAINER Level0;
316 } WkstaTransportInfo;
317 } WKSTA_TRANSPORT_ENUM_STRUCT, *PWKSTA_TRANSPORT_ENUM_STRUCT, *LPWKSTA_TRANSPORT_ENUM_STRUCT;
319 #define JOIN_OBFUSCATOR_LENGTH 8
320 #define JOIN_MAX_PASSWORD_LENGTH 256
321 typedef struct _JOINPR_USER_PASSWORD
323 unsigned char Obfuscator[JOIN_OBFUSCATOR_LENGTH];
324 wchar_t Buffer[JOIN_MAX_PASSWORD_LENGTH];
325 unsigned long Length;
326 } JOINPR_USER_PASSWORD, *PJOINPR_USER_PASSWORD;
328 typedef struct _JOINPR_ENCRYPTED_USER_PASSWORD
330 unsigned char Buffer[JOIN_OBFUSCATOR_LENGTH + (JOIN_MAX_PASSWORD_LENGTH * sizeof(wchar_t)) + sizeof(unsigned long)];
331 } JOINPR_ENCRYPTED_USER_PASSWORD, *PJOINPR_ENCRYPTED_USER_PASSWORD;
333 cpp_quote("#if !defined(_NTSECAPI_H)")
334 typedef struct _UNICODE_STRING
336 unsigned short Length;
337 unsigned short MaximumLength;
338 [size_is(MaximumLength / 2), length_is((Length) / 2)] unsigned short *Buffer;
339 } UNICODE_STRING, *PUNICODE_STRING;
342 typedef struct _NET_COMPUTER_NAME_ARRAY
344 unsigned long EntryCount;
345 [size_is(EntryCount)] PUNICODE_STRING ComputerNames;
346 } NET_COMPUTER_NAME_ARRAY, *PNET_COMPUTER_NAME_ARRAY;
350 uuid(6BFFD098-A112-3610-9833-46C3F87E345A),
352 pointer_default(unique),
353 endpoint("ncacn_np:[\\pipe\\wkssvc]")
355 ,implicit_handle(handle_t hBinding)
365 [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
366 [in] unsigned long Level,
367 [out, switch_is(Level)] LPWKSTA_INFO WkstaInfo);
373 [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
374 [in] unsigned long Level,
375 [in, switch_is(Level)] LPWKSTA_INFO WkstaInfo,
376 [in, out, unique] unsigned long *ErrorParameter);
382 [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
383 [in, out] LPWKSTA_USER_ENUM_STRUCT UserInfo,
384 [in] unsigned long PreferredMaximumLength,
385 [out] unsigned long *TotalEntries,
386 [in, out, unique] unsigned long *ResumeHandle);
391 NetrWkstaUserGetInfo(
392 [in, string, unique] WKSSVC_IDENTIFY_HANDLE Unused,
393 [in] unsigned long Level,
394 [out, switch_is(Level)] LPWKSTA_USER_INFO UserInfo);
399 NetrWkstaUserSetInfo(
400 [in, string, unique] WKSSVC_IDENTIFY_HANDLE Unused,
401 [in] unsigned long Level,
402 [in, switch_is(Level)] LPWKSTA_USER_INFO UserInfo,
403 [in, out, unique] unsigned long *ErrorParameter);
408 NetrWkstaTransportEnum(
409 [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
410 [in, out] LPWKSTA_TRANSPORT_ENUM_STRUCT TransportInfo,
411 [in] unsigned long PreferredMaximumLength,
412 [out] unsigned long* TotalEntries,
413 [in, out, unique] unsigned long *ResumeHandle);
418 NetrWkstaTransportAdd(
419 [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
420 [in] unsigned long Level,
421 [in] LPWKSTA_TRANSPORT_INFO_0 TransportInfo,
422 [in, out, unique] unsigned long *ErrorParameter);
427 NetrWkstaTransportDel(
428 [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
429 [in, string, unique] wchar_t *TransportName,
430 [in] unsigned long ForceLevel);
436 [in, string, unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
437 [in] unsigned long Level,
438 [in, switch_is(Level)] LPUSE_INFO InfoStruct,
439 [in, out, unique] unsigned long *ErrorParameter);
445 [in, string, unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
446 [in, string] wchar_t *UseName,
447 [in] unsigned long Level,
448 [out, switch_is(Level)] LPUSE_INFO InfoStruct);
454 [in, string, unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
455 [in, string] wchar_t *UseName,
456 [in] unsigned long ForceLevel);
462 [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
463 [in, out] LPUSE_ENUM_STRUCT InfoStruct,
464 [in] unsigned long PreferredMaximumLength,
465 [out] unsigned long *TotalEntries,
466 [in, out, unique] unsigned long *ResumeHandle);
471 Opnum12NotUsedOnWire(void);
476 NetrWorkstationStatisticsGet(
477 [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
478 [in, string, unique] wchar_t *ServiceName,
479 [in] unsigned long Level,
480 [in] unsigned long Options,
481 [out] LPSTAT_WORKSTATION_0 *Buffer);
486 Opnum14NotUsedOnWire(void);
491 Opnum15NotUsedOnWire(void);
496 Opnum16NotUsedOnWire(void);
501 Opnum17NotUsedOnWire(void);
506 Opnum18NotUsedOnWire(void);
511 Opnum19NotUsedOnWire(void);
516 NetrGetJoinInformation(
517 [in, string, unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
518 [in, out, string] wchar_t **NameBuffer,
519 [out] PNETSETUP_JOIN_STATUS BufferType);
524 Opnum21NotUsedOnWire(void);
530 [in] handle_t RpcBindingHandle,
531 [in, string, unique] wchar_t *ServerName,
532 [in, string] wchar_t *DomainNameParam,
533 [in, string, unique] wchar_t *MachineAccountOU,
534 [in, string, unique] wchar_t *AccountName,
535 [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
536 [in] unsigned long Options);
542 [in] handle_t RpcBindingHandle,
543 [in, string, unique] wchar_t *ServerName,
544 [in, string, unique] wchar_t *AccountName,
545 [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
546 [in] unsigned long Options);
551 NetrRenameMachineInDomain2(
552 [in] handle_t RpcBindingHandle,
553 [in, string, unique] wchar_t *ServerName,
554 [in, string, unique] wchar_t *MachineName,
555 [in, string, unique] wchar_t *AccountName,
556 [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
557 [in] unsigned long Options);
563 [in] handle_t RpcBindingHandle,
564 [in, string, unique] wchar_t *ServerName,
565 [in, string] wchar_t *NameToValidate,
566 [in, string, unique] wchar_t *AccountName,
567 [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
568 [in] NETSETUP_NAME_TYPE NameType);
574 [in] handle_t RpcBindingHandle,
575 [in, string, unique] wchar_t *ServerName,
576 [in, string] wchar_t *DomainNameParam,
577 [in, string, unique] wchar_t *AccountName,
578 [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
579 [in, out] unsigned long* OUCount,
580 [out, string, size_is(,*OUCount)] wchar_t ***OUs);
585 NetrAddAlternateComputerName(
586 [in] handle_t RpcBindingHandle,
587 [in, string, unique] wchar_t *ServerName,
588 [in, string, unique] wchar_t *AlternateName,
589 [in, string, unique] wchar_t *DomainAccount,
590 [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
591 [in] unsigned long Reserved);
596 NetrRemoveAlternateComputerName(
597 [in] handle_t RpcBindingHandle,
598 [in, string, unique] wchar_t *ServerName,
599 [in, string, unique] wchar_t *AlternateName,
600 [in, string, unique] wchar_t *DomainAccount,
601 [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
602 [in] unsigned long Reserved);
607 NetrSetPrimaryComputerName(
608 [in] handle_t RpcBindingHandle,
609 [in, string, unique] wchar_t *ServerName,
610 [in, string, unique] wchar_t *PrimaryName,
611 [in, string, unique] wchar_t *DomainAccount,
612 [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
613 [in] unsigned long Reserved);
618 NetrEnumerateComputerNames(
619 [in, string, unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
620 [in] NET_COMPUTER_NAME_TYPE NameType,
621 [in] unsigned long Reserved,
622 [out] PNET_COMPUTER_NAME_ARRAY *ComputerNames);