1# Copyright (c) 2003-2016 CORE Security Technologies
2#
3# This software is provided under under a slightly modified version
4# of the Apache Software License. See the accompanying LICENSE file
5# for more information.
6#
7# Author: Alberto Solino (@agsolino)
8#
9# Description:
10#   [MS-SRVS] Interface implementation
11#
12#   Best way to learn how to use these calls is to grab the protocol standard
13#   so you understand what the call does, and then read the test case located
14#   at https://github.com/CoreSecurity/impacket/tree/master/impacket/testcases/SMB_RPC
15#
16#   Some calls have helper functions, which makes it even easier to use.
17#   They are located at the end of this file.
18#   Helper functions start with "h"<name of the call>.
19#   There are test cases for them too.
20#
21from impacket.dcerpc.v5.rpcrt import DCERPCException
22from impacket.dcerpc.v5.ndr import NDRCALL, NDR, NDRSTRUCT, NDRUNION, NDRPOINTER, NDRUniConformantArray, \
23    NDRUniFixedArray, NDRBOOLEAN, NDRUniConformantVaryingArray, PNDRUniConformantArray
24from impacket.dcerpc.v5.dtypes import NULL, DWORD, LPWSTR, LPBYTE, LMSTR, ULONG, GUID, LPLONG, WSTR, \
25    SECURITY_INFORMATION, WCHAR
26from impacket import system_errors
27from impacket.uuid import uuidtup_to_bin
28
29MSRPC_UUID_SRVS  = uuidtup_to_bin(('4B324FC8-1670-01D3-1278-5A47BF6EE188', '3.0'))
30
31class DCERPCSessionError(DCERPCException):
32    def __init__(self, error_string=None, error_code=None, packet=None):
33        DCERPCException.__init__(self, error_string, error_code, packet)
34
35    def __str__( self ):
36        key = self.error_code
37        if system_errors.ERROR_MESSAGES.has_key(key):
38            error_msg_short = system_errors.ERROR_MESSAGES[key][0]
39            error_msg_verbose = system_errors.ERROR_MESSAGES[key][1]
40            return 'SRVS SessionError: code: 0x%x - %s - %s' % (self.error_code, error_msg_short, error_msg_verbose)
41        else:
42            return 'SRVS SessionError: unknown error code: 0x%x' % self.error_code
43
44################################################################################
45# CONSTANTS
46################################################################################
47# 2.2.1.1 SRVSVC_HANDLE
48SRVSVC_HANDLE = WCHAR
49
50class PSRVSVC_HANDLE(NDRPOINTER):
51    referent = (
52        ('Data', SRVSVC_HANDLE),
53    )
54
55# 2.2.1.2 SHARE_DEL_HANDLE
56class SHARE_DEL_HANDLE(NDRSTRUCT):
57    align = 1
58    structure =  (
59        ('Data','20s=""'),
60    )
61
62# 2.2.1.3 PSHARE_DEL_HANDLE
63class PSHARE_DEL_HANDLE(NDRPOINTER):
64    referent = (
65        ('Data', SHARE_DEL_HANDLE),
66    )
67
68# 2.2.2.2 MAX_PREFERRED_LENGTH
69MAX_PREFERRED_LENGTH = -1
70
71# 2.2.2.3 Session User Flags
72SESS_GUEST        = 0x00000001
73SESS_NOENCRYPTION = 0x00000002
74
75# 2.2.2.4 Share Types
76STYPE_DISKTREE     = 0x00000000
77STYPE_PRINTQ       = 0x00000001
78STYPE_DEVICE       = 0x00000002
79STYPE_IPC          = 0x00000003
80STYPE_CLUSTER_FS   = 0x02000000
81STYPE_CLUSTER_SOFS = 0x04000000
82STYPE_CLUSTER_DFS  = 0x08000000
83
84STYPE_SPECIAL      = 0x80000000
85STYPE_TEMPORARY    = 0x40000000
86
87# 2.2.2.5 Client-Side Caching (CSC) States
88CSC_CACHE_MANUAL_REINT = 0x00
89CSC_CACHE_AUTO_REINT   = 0x10
90CSC_CACHE_VDO          = 0x20
91CSC_CACHE_NONE         = 0x30
92
93# 2.2.2.6 Platform IDs
94PLATFORM_ID_DOS = 300
95PLATFORM_ID_OS2 = 400
96PLATFORM_ID_NT  = 500
97PLATFORM_ID_OSF = 600
98PLATFORM_ID_VMS = 700
99
100# 2.2.2.7 Software Type Flags
101SV_TYPE_WORKSTATION       = 0x00000001
102SV_TYPE_SERVER            = 0x00000002
103SV_TYPE_SQLSERVER         = 0x00000004
104SV_TYPE_DOMAIN_CTRL       = 0x00000008
105SV_TYPE_DOMAIN_BAKCTRL    = 0x00000010
106SV_TYPE_TIME_SOURCE       = 0x00000020
107SV_TYPE_AFP               = 0x00000040
108SV_TYPE_NOVELL            = 0x00000080
109SV_TYPE_DOMAIN_MEMBER     = 0x00000100
110SV_TYPE_LOCAL_LIST_ONLY   = 0x40000000
111SV_TYPE_PRINTQ_SERVER     = 0x00000200
112SV_TYPE_DIALIN_SERVER     = 0x00000400
113SV_TYPE_XENIX_SERVER      = 0x00000800
114SV_TYPE_SERVER_MFPN       = 0x00004000
115SV_TYPE_NT                = 0x00001000
116SV_TYPE_WFW               = 0x00002000
117SV_TYPE_SERVER_NT         = 0x00008000
118SV_TYPE_POTENTIAL_BROWSER = 0x00010000
119SV_TYPE_BACKUP_BROWSER    = 0x00020000
120SV_TYPE_MASTER_BROWSER    = 0x00040000
121SV_TYPE_DOMAIN_MASTER     = 0x00080000
122SV_TYPE_DOMAIN_ENUM       = 0x80000000
123SV_TYPE_WINDOWS           = 0x00400000
124SV_TYPE_ALL               = 0xFFFFFFFF
125SV_TYPE_TERMINALSERVER    = 0x02000000
126SV_TYPE_CLUSTER_NT        = 0x10000000
127SV_TYPE_CLUSTER_VS_NT     = 0x04000000
128
129# 2.2.2.8 Name Types
130NAMETYPE_USER          = 1
131NAMETYPE_PASSWORD      = 2
132NAMETYPE_GROUP         = 3
133NAMETYPE_COMPUTER      = 4
134NAMETYPE_EVENT         = 5
135NAMETYPE_DOMAIN        = 6
136NAMETYPE_SERVICE       = 7
137NAMETYPE_NET           = 8
138NAMETYPE_SHARE         = 9
139NAMETYPE_MESSAGE       = 10
140NAMETYPE_MESSAGEDEST   = 11
141NAMETYPE_SHAREPASSWORD = 12
142NAMETYPE_WORKGROUP     = 13
143
144# 2.2.2.9 Path Types
145ITYPE_UNC_COMPNAME     = 4144
146ITYPE_UNC_WC           = 4145
147ITYPE_UNC              = 4096
148ITYPE_UNC_WC_PATH      = 4097
149ITYPE_UNC_SYS_SEM      = 6400
150ITYPE_UNC_SYS_SHMEM    = 6656
151ITYPE_UNC_SYS_MSLOT    = 6144
152ITYPE_UNC_SYS_PIPE     = 6912
153ITYPE_UNC_SYS_QUEUE    = 7680
154ITYPE_PATH_ABSND       = 8194
155ITYPE_PATH_ABSD        = 8198
156ITYPE_PATH_RELND       = 8192
157ITYPE_PATH_RELD        = 8196
158ITYPE_PATH_ABSND_WC    = 8195
159ITYPE_PATH_ABSD_WC     = 8199
160ITYPE_PATH_RELND_WC    = 8193
161ITYPE_PATH_RELD_WC     = 8197
162ITYPE_PATH_SYS_SEM     = 10498
163ITYPE_PATH_SYS_SHMEM   = 10754
164ITYPE_PATH_SYS_MSLOT   = 10242
165ITYPE_PATH_SYS_PIPE    = 11010
166ITYPE_PATH_SYS_COMM    = 11266
167ITYPE_PATH_SYS_PRINT   = 11522
168ITYPE_PATH_SYS_QUEUE   = 11778
169ITYPE_PATH_SYS_SEM_M   = 43266
170ITYPE_PATH_SYS_SHMEM_M = 43522
171ITYPE_PATH_SYS_MSLOT_M = 43010
172ITYPE_PATH_SYS_PIPE_M  = 43778
173ITYPE_PATH_SYS_COMM_M  = 44034
174ITYPE_PATH_SYS_PRINT_M = 44290
175ITYPE_PATH_SYS_QUEUE_M = 44546
176ITYPE_DEVICE_DISK      = 16384
177ITYPE_DEVICE_LPT       = 16400
178ITYPE_DEVICE_COM       = 16416
179ITYPE_DEVICE_CON       = 16448
180ITYPE_DEVICE_NUL       = 16464
181
182# 2.2.2.11 SHARE_INFO Parameter Error Codes
183
184SHARE_NETNAME_PARMNUM      = 1
185SHARE_TYPE_PARMNUM         = 3
186SHARE_REMARK_PARMNUM       = 4
187SHARE_PERMISSIONS_PARMNUM  = 5
188SHARE_MAX_USES_PARMNUM     = 6
189SHARE_CURRENT_USES_PARMNUM = 7
190SHARE_PATH_PARMNUM         = 8
191SHARE_PASSWD_PARMNUM       = 9
192SHARE_FILE_SD_PARMNUM      = 501
193
194# 2.2.2.12 SERVER_INFO Parameter Error Codes
195SV_PLATFORM_ID_PARMNUM             = 101
196SV_NAME_PARMNUM                    = 102
197SV_VERSION_MAJOR_PARMNUM           = 103
198SV_VERSION_MINOR_PARMNUM           = 104
199SV_TYPE_PARMNUM                    = 105
200SV_COMMENT_PARMNUM                 = 5
201SV_USERS_PARMNUM                   = 107
202SV_DISC_PARMNUM                    = 10
203SV_HIDDEN_PARMNUM                  = 16
204SV_ANNOUNCE_PARMNUM                = 17
205SV_ANNDELTA_PARMNUM                = 18
206SV_USERPATH_PARMNUM                = 112
207SV_SESSOPENS_PARMNUM               = 501
208SV_SESSVCS_PARMNUM                 = 502
209SV_OPENSEARCH_PARMNUM              = 503
210SV_SIZREQBUF_PARMNUM               = 504
211SV_INITWORKITEMS_PARMNUM           = 505
212SV_MAXWORKITEMS_PARMNUM            = 506
213SV_RAWWORKITEMS_PARMNUM            = 507
214SV_IRPSTACKSIZE_PARMNUM            = 508
215SV_MAXRAWBUFLEN_PARMNUM            = 509
216SV_SESSUSERS_PARMNUM               = 510
217SV_SESSCONNS_PARMNUM               = 511
218SV_MAXNONPAGEDMEMORYUSAGE_PARMNUM  = 512
219SV_MAXPAGEDMEMORYUSAGE_PARMNUM     = 513
220SV_ENABLESOFTCOMPAT_PARMNUM        = 514
221SV_ENABLEFORCEDLOGOFF_PARMNUM      = 515
222SV_TIMESOURCE_PARMNUM              = 516
223SV_ACCEPTDOWNLEVELAPIS_PARMNUM     = 517
224SV_LMANNOUNCE_PARMNUM              = 518
225SV_DOMAIN_PARMNUM                  = 519
226SV_MAXCOPYREADLEN_PARMNUM          = 520
227SV_MAXCOPYWRITELEN_PARMNUM         = 521
228SV_MINKEEPSEARCH_PARMNUM           = 522
229SV_MAXKEEPSEARCH_PARMNUM           = 523
230SV_MINKEEPCOMPLSEARCH_PARMNUM      = 524
231SV_MAXKEEPCOMPLSEARCH_PARMNUM      = 525
232SV_THREADCOUNTADD_PARMNUM          = 526
233SV_NUMBLOCKTHREADS_PARMNUM         = 527
234SV_SCAVTIMEOUT_PARMNUM             = 528
235SV_MINRCVQUEUE_PARMNUM             = 529
236SV_MINFREEWORKITEMS_PARMNUM        = 530
237SV_XACTMEMSIZE_PARMNUM             = 531
238SV_THREADPRIORITY_PARMNUM          = 532
239SV_MAXMPXCT_PARMNUM                = 533
240SV_OPLOCKBREAKWAIT_PARMNUM         = 534
241SV_OPLOCKBREAKRESPONSEWAIT_PARMNUM = 535
242SV_ENABLEOPLOCKS_PARMNUM           = 536
243SV_ENABLEOPLOCKFORCECLOSE_PARMNUM  = 537
244SV_ENABLEFCBOPENS_PARMNUM          = 538
245SV_ENABLERAW_PARMNUM               = 539
246SV_ENABLESHAREDNETDRIVES_PARMNUM   = 540
247SV_MINFREECONNECTIONS_PARMNUM      = 541
248SV_MAXFREECONNECTIONS_PARMNUM      = 542
249SV_INITSESSTABLE_PARMNUM           = 543
250SV_INITCONNTABLE_PARMNUM           = 544
251SV_INITFILETABLE_PARMNUM           = 545
252SV_INITSEARCHTABLE_PARMNUM         = 546
253SV_ALERTSCHEDULE_PARMNUM           = 547
254SV_ERRORTHRESHOLD_PARMNUM          = 548
255SV_NETWORKERRORTHRESHOLD_PARMNUM   = 549
256SV_DISKSPACETHRESHOLD_PARMNUM      = 550
257SV_MAXLINKDELAY_PARMNUM            = 552
258SV_MINLINKTHROUGHPUT_PARMNUM       = 553
259SV_LINKINFOVALIDTIME_PARMNUM       = 554
260SV_SCAVQOSINFOUPDATETIME_PARMNUM   = 555
261SV_MAXWORKITEMIDLETIME_PARMNUM     = 556
262
263# 2.2.2.13 DFS Entry Flags
264PKT_ENTRY_TYPE_CAIRO          = 0x0001
265PKT_ENTRY_TYPE_MACHINE        = 0x0002
266PKT_ENTRY_TYPE_NONCAIRO       = 0x0004
267PKT_ENTRY_TYPE_LEAFONLY       = 0x0008
268PKT_ENTRY_TYPE_OUTSIDE_MY_DOM = 0x0010
269PKT_ENTRY_TYPE_INSITE_ONLY    = 0x0020
270PKT_ENTRY_TYPE_REFERRAL_SVC   = 0x0080
271PKT_ENTRY_TYPE_PERMANENT      = 0x0100
272PKT_ENTRY_TYPE_LOCAL          = 0x0400
273PKT_ENTRY_TYPE_LOCAL_XPOINT   = 0x0800
274PKT_ENTRY_TYPE_MACH_SHARE     = 0x1000
275PKT_ENTRY_TYPE_OFFLINE        = 0x2000
276
277# 2.2.4.7 FILE_INFO_3
278# fi3_permissions
279PERM_FILE_READ   = 0x00000001
280PERM_FILE_WRITE  = 0x00000002
281PERM_FILE_CREATE = 0x00000004
282ACCESS_EXEC      = 0x00000008
283ACCESS_DELETE    = 0x00000010
284ACCESS_ATRIB     = 0x00000020
285ACCESS_PERM      = 0x00000040
286
287# 2.2.4.29 SHARE_INFO_1005
288# shi1005_flags
289SHI1005_FLAGS_DFS                         = 0x00000001
290SHI1005_FLAGS_DFS_ROOT                    = 0x00000002
291CSC_MASK                                  = 0x00000030
292SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS    = 0x00000100
293SHI1005_FLAGS_FORCE_SHARED_DELETE         = 0x00000200
294SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING     = 0x00000400
295SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM = 0x00000800
296SHI1005_FLAGS_FORCE_LEVELII_OPLOCK        = 0x00001000
297SHI1005_FLAGS_ENABLE_HASH                 = 0x00002000
298SHI1005_FLAGS_ENABLE_CA                   = 0x00004000
299SHI1005_FLAGS_ENCRYPT_DATA                = 0x00008000
300
301# 2.2.4.43 SERVER_INFO_103
302# sv103_capabilities
303SRV_SUPPORT_HASH_GENERATION = 0x0001
304SRV_HASH_GENERATION_ACTIVE  = 0x0002
305
306# 2.2.4.96 SERVER_TRANSPORT_INFO_3
307# svti3_flags
308SVTI2_REMAP_PIPE_NAMES = 0x00000002
309SVTI2_SCOPED_NAME      = 0x00000004
310
311# 2.2.4.109 DFS_SITENAME_INFO
312# SiteFlags
313DFS_SITE_PRIMARY = 0x00000001
314
315# 3.1.4.42 NetrDfsFixLocalVolume (Opnum 51)
316# ServiceType
317DFS_SERVICE_TYPE_MASTER     = 0x00000001
318DFS_SERVICE_TYPE_READONLY   = 0x00000002
319DFS_SERVICE_TYPE_LOCAL      = 0x00000004
320DFS_SERVICE_TYPE_REFERRAL   = 0x00000008
321DFS_SERVICE_TYPE_ACTIVE     = 0x000000010
322DFS_SERVICE_TYPE_DOWN_LEVEL = 0x000000020
323DFS_SERVICE_TYPE_COSTLIER   = 0x000000040
324DFS_SERVICE_TYPE_OFFLINE    = 0x000000080
325
326# CreateDisposition
327FILE_SUPERSEDE = 0x00000000
328FILE_OPEN      = 0x00000001
329FILE_CREATE    = 0x00000002
330
331################################################################################
332# STRUCTURES
333################################################################################
334# 2.2.4.1 CONNECTION_INFO_0
335class CONNECTION_INFO_0(NDRSTRUCT):
336    structure = (
337        ('coni0_id', DWORD),
338    )
339
340class CONNECTION_INFO_0_ARRAY(NDRUniConformantArray):
341    item = CONNECTION_INFO_0
342
343class LPCONNECTION_INFO_0_ARRAY(NDRPOINTER):
344    referent = (
345        ('Data', CONNECTION_INFO_0_ARRAY),
346    )
347
348# 2.2.4.2 CONNECTION_INFO_1
349class CONNECTION_INFO_1(NDRSTRUCT):
350    structure = (
351        ('coni1_id', DWORD),
352        ('coni1_type', DWORD),
353        ('coni1_num_opens', DWORD),
354        ('coni1_num_users', DWORD),
355        ('coni1_time', DWORD),
356        ('coni1_username', LPWSTR),
357        ('coni1_netname', LPWSTR),
358    )
359
360class CONNECTION_INFO_1_ARRAY(NDRUniConformantArray):
361    item = CONNECTION_INFO_1
362
363class LPCONNECTION_INFO_1_ARRAY(NDRPOINTER):
364    referent = (
365        ('Data', CONNECTION_INFO_1_ARRAY),
366    )
367
368# 2.2.4.3 CONNECT_INFO_0_CONTAINER
369class CONNECT_INFO_0_CONTAINER(NDRSTRUCT):
370    structure = (
371        ('EntriesRead', DWORD),
372        ('Buffer', LPCONNECTION_INFO_0_ARRAY),
373    )
374
375class LPCONNECT_INFO_0_CONTAINER(NDRPOINTER):
376    referent = (
377        ('Data', CONNECT_INFO_0_CONTAINER),
378    )
379
380# 2.2.4.4 CONNECT_INFO_1_CONTAINER
381class CONNECT_INFO_1_CONTAINER(NDRSTRUCT):
382    structure = (
383        ('EntriesRead', DWORD),
384        ('Buffer', LPCONNECTION_INFO_1_ARRAY),
385    )
386
387class LPCONNECT_INFO_1_CONTAINER(NDRPOINTER):
388    referent = (
389        ('Data', CONNECT_INFO_1_CONTAINER),
390    )
391
392# 2.2.3.1 CONNECT_ENUM_UNION
393class CONNECT_ENUM_UNION(NDRUNION):
394    commonHdr = (
395        ('tag', DWORD),
396    )
397
398    union = {
399        0: ('Level0', LPCONNECT_INFO_0_CONTAINER),
400        1: ('Level1', LPCONNECT_INFO_1_CONTAINER),
401    }
402
403# 2.2.4.5 CONNECT_ENUM_STRUCT
404class CONNECT_ENUM_STRUCT(NDRSTRUCT):
405    structure = (
406        ('Level', DWORD),
407        ('ConnectInfo', CONNECT_ENUM_UNION),
408    )
409
410# 2.2.4.6 FILE_INFO_2
411class FILE_INFO_2(NDRSTRUCT):
412    structure = (
413        ('fi2_id', DWORD),
414    )
415
416class LPFILE_INFO_2(NDRPOINTER):
417    referent = (
418        ('Data', FILE_INFO_2),
419    )
420
421class FILE_INFO_2_ARRAY(NDRUniConformantArray):
422    item = FILE_INFO_2
423
424class LPFILE_INFO_2_ARRAY(NDRPOINTER):
425    referent = (
426        ('Data', FILE_INFO_2_ARRAY),
427    )
428
429# 2.2.4.7 FILE_INFO_3
430class FILE_INFO_3(NDRSTRUCT):
431    structure = (
432        ('fi3_id', DWORD),
433        ('fi3_permissions', DWORD),
434        ('fi3_num_locks', DWORD),
435        ('fi3_path_name', LPWSTR),
436        ('fi3_username', LPWSTR),
437    )
438
439class LPFILE_INFO_3(NDRPOINTER):
440    referent = (
441        ('Data', FILE_INFO_3),
442    )
443
444class FILE_INFO_3_ARRAY(NDRUniConformantArray):
445    item = FILE_INFO_3
446
447class LPFILE_INFO_3_ARRAY(NDRPOINTER):
448    referent = (
449        ('Data', FILE_INFO_3_ARRAY),
450    )
451
452# 2.2.4.8 FILE_INFO_2_CONTAINER
453class FILE_INFO_2_CONTAINER(NDRSTRUCT):
454    structure = (
455        ('EntriesRead', DWORD),
456        ('Buffer', LPFILE_INFO_2_ARRAY),
457    )
458
459class LPFILE_INFO_2_CONTAINER(NDRPOINTER):
460    referent = (
461        ('Data', FILE_INFO_2_CONTAINER),
462    )
463
464# 2.2.4.9 FILE_INFO_3_CONTAINER
465class FILE_INFO_3_CONTAINER(NDRSTRUCT):
466    structure = (
467        ('EntriesRead', DWORD),
468        ('Buffer', LPFILE_INFO_3_ARRAY),
469    )
470
471class LPFILE_INFO_3_CONTAINER(NDRPOINTER):
472    referent = (
473        ('Data', FILE_INFO_3_CONTAINER),
474    )
475
476# 2.2.3.2 FILE_ENUM_UNION
477class FILE_ENUM_UNION(NDRUNION):
478    commonHdr = (
479        ('tag', DWORD),
480    )
481
482    union = {
483        2: ('Level2', LPFILE_INFO_2_CONTAINER),
484        3: ('Level3', LPFILE_INFO_3_CONTAINER),
485    }
486
487# 2.2.4.10 FILE_ENUM_STRUCT
488class FILE_ENUM_STRUCT(NDRSTRUCT):
489    structure = (
490        ('Level', DWORD),
491        ('FileInfo', FILE_ENUM_UNION),
492    )
493
494# 2.2.4.11 SESSION_INFO_0
495class SESSION_INFO_0(NDRSTRUCT):
496    structure = (
497        ('sesi0_cname', LPWSTR),
498    )
499
500class LPSESSION_INFO_0(NDRPOINTER):
501    referent = (
502        ('Data', SESSION_INFO_0),
503    )
504
505class SESSION_INFO_0_ARRAY(NDRUniConformantArray):
506    item = SESSION_INFO_0
507
508class LPSESSION_INFO_0_ARRAY(NDRPOINTER):
509    referent = (
510        ('Data', SESSION_INFO_0_ARRAY),
511    )
512
513# 2.2.4.12 SESSION_INFO_1
514class SESSION_INFO_1(NDRSTRUCT):
515    structure = (
516        ('sesi1_cname', LPWSTR),
517        ('sesi1_username', LPWSTR),
518        ('sesi1_num_opens', DWORD),
519        ('sesi1_time', DWORD),
520        ('sesi1_idle_time', DWORD),
521        ('sesi1_user_flags', DWORD),
522    )
523
524class LPSESSION_INFO_1(NDRPOINTER):
525    referent = (
526        ('Data', SESSION_INFO_1),
527    )
528
529class SESSION_INFO_1_ARRAY(NDRUniConformantArray):
530    item = SESSION_INFO_1
531
532class LPSESSION_INFO_1_ARRAY(NDRPOINTER):
533    referent = (
534        ('Data', SESSION_INFO_1_ARRAY),
535    )
536
537# 2.2.4.13 SESSION_INFO_2
538class SESSION_INFO_2(NDRSTRUCT):
539    structure = (
540        ('sesi2_cname', LPWSTR),
541        ('sesi2_username', LPWSTR),
542        ('sesi2_num_opens', DWORD),
543        ('sesi2_time', DWORD),
544        ('sesi2_idle_time', DWORD),
545        ('sesi2_user_flags', DWORD),
546        ('sesi2_cltype_name', LPWSTR),
547    )
548
549class LPSESSION_INFO_2(NDRPOINTER):
550    referent = (
551        ('Data', SESSION_INFO_2),
552    )
553
554class SESSION_INFO_2_ARRAY(NDRUniConformantArray):
555    item = SESSION_INFO_2
556
557class LPSESSION_INFO_2_ARRAY(NDRPOINTER):
558    referent = (
559        ('Data', SESSION_INFO_2_ARRAY),
560    )
561
562# 2.2.4.14 SESSION_INFO_10
563class SESSION_INFO_10(NDRSTRUCT):
564    structure = (
565        ('sesi10_cname', LPWSTR),
566        ('sesi10_username', LPWSTR),
567        ('sesi10_time', DWORD),
568        ('sesi10_idle_time', DWORD),
569    )
570
571class LPSESSION_INFO_10(NDRPOINTER):
572    referent = (
573        ('Data', SESSION_INFO_10),
574    )
575
576class SESSION_INFO_10_ARRAY(NDRUniConformantArray):
577    item = SESSION_INFO_10
578
579class LPSESSION_INFO_10_ARRAY(NDRPOINTER):
580    referent = (
581        ('Data', SESSION_INFO_10_ARRAY),
582    )
583
584# 2.2.4.15 SESSION_INFO_502
585class SESSION_INFO_502(NDRSTRUCT):
586    structure = (
587        ('sesi502_cname', LPWSTR),
588        ('sesi502_username', LPWSTR),
589        ('sesi502_num_opens', DWORD),
590        ('sesi502_time', DWORD),
591        ('sesi502_idle_time', DWORD),
592        ('sesi502_user_flags', DWORD),
593        ('sesi502_cltype_name', LPWSTR),
594        ('sesi502_transport', LPWSTR),
595    )
596
597class LPSESSION_INFO_502(NDRPOINTER):
598    referent = (
599        ('Data', SESSION_INFO_502),
600    )
601
602class SESSION_INFO_502_ARRAY(NDRUniConformantArray):
603    item = SESSION_INFO_502
604
605class LPSESSION_INFO_502_ARRAY(NDRPOINTER):
606    referent = (
607        ('Data', SESSION_INFO_502_ARRAY),
608    )
609
610# 2.2.4.16 SESSION_INFO_0_CONTAINER
611class SESSION_INFO_0_CONTAINER(NDRSTRUCT):
612    structure = (
613        ('EntriesRead', DWORD),
614        ('Buffer', LPSESSION_INFO_0_ARRAY),
615    )
616
617class LPSESSION_INFO_0_CONTAINER(NDRPOINTER):
618    referent = (
619        ('Data', SESSION_INFO_0_CONTAINER),
620    )
621
622# 2.2.4.17 SESSION_INFO_1_CONTAINER
623class SESSION_INFO_1_CONTAINER(NDRSTRUCT):
624    structure = (
625        ('EntriesRead', DWORD),
626        ('Buffer', LPSESSION_INFO_1_ARRAY),
627    )
628
629class LPSESSION_INFO_1_CONTAINER(NDRPOINTER):
630    referent = (
631        ('Data', SESSION_INFO_1_CONTAINER),
632    )
633
634# 2.2.4.18 SESSION_INFO_2_CONTAINER
635class SESSION_INFO_2_CONTAINER(NDRSTRUCT):
636    structure = (
637        ('EntriesRead', DWORD),
638        ('Buffer', LPSESSION_INFO_2_ARRAY),
639    )
640
641class LPSESSION_INFO_2_CONTAINER(NDRPOINTER):
642    referent = (
643        ('Data', SESSION_INFO_2_CONTAINER),
644    )
645
646# 2.2.4.19 SESSION_INFO_10_CONTAINER
647class SESSION_INFO_10_CONTAINER(NDRSTRUCT):
648    structure = (
649        ('EntriesRead', DWORD),
650        ('Buffer', LPSESSION_INFO_10_ARRAY),
651    )
652
653class LPSESSION_INFO_10_CONTAINER(NDRPOINTER):
654    referent = (
655        ('Data', SESSION_INFO_10_CONTAINER),
656    )
657
658# 2.2.4.20 SESSION_INFO_502_CONTAINER
659class SESSION_INFO_502_CONTAINER(NDRSTRUCT):
660    structure = (
661        ('EntriesRead', DWORD),
662        ('Buffer', LPSESSION_INFO_502_ARRAY),
663    )
664
665class LPSESSION_INFO_502_CONTAINER(NDRPOINTER):
666    referent = (
667        ('Data', SESSION_INFO_502_CONTAINER),
668    )
669
670# 2.2.3.4 SESSION_ENUM_UNION
671class SESSION_ENUM_UNION(NDRUNION):
672    commonHdr = (
673        ('tag', DWORD),
674    )
675
676    union = {
677        0: ('Level0', LPSESSION_INFO_0_CONTAINER),
678        1: ('Level1', LPSESSION_INFO_1_CONTAINER),
679        2: ('Level2', LPSESSION_INFO_2_CONTAINER),
680        10: ('Level10', LPSESSION_INFO_10_CONTAINER),
681        502: ('Level502', LPSESSION_INFO_502_CONTAINER),
682    }
683
684# 2.2.4.21 SESSION_ENUM_STRUCT
685class SESSION_ENUM_STRUCT(NDRSTRUCT):
686    structure = (
687        ('Level', DWORD),
688        ('SessionInfo', SESSION_ENUM_UNION),
689    )
690
691# 2.2.4.22 SHARE_INFO_0
692class SHARE_INFO_0(NDRSTRUCT):
693    structure = (
694        ('shi0_netname', LPWSTR),
695    )
696
697class LPSHARE_INFO_0(NDRPOINTER):
698    referent = (
699        ('Data', SHARE_INFO_0),
700    )
701
702class SHARE_INFO_0_ARRAY(NDRUniConformantArray):
703    item = SHARE_INFO_0
704
705class LPSHARE_INFO_0_ARRAY(NDRPOINTER):
706    referent = (
707        ('Data', SHARE_INFO_0_ARRAY),
708    )
709
710# 2.2.4.23 SHARE_INFO_1
711class SHARE_INFO_1(NDRSTRUCT):
712    structure = (
713        ('shi1_netname', LPWSTR),
714        ('shi1_type', DWORD),
715        ('shi1_remark', LPWSTR),
716    )
717
718class LPSHARE_INFO_1(NDRPOINTER):
719    referent = (
720        ('Data', SHARE_INFO_1),
721    )
722
723class SHARE_INFO_1_ARRAY(NDRUniConformantArray):
724    item = SHARE_INFO_1
725
726class LPSHARE_INFO_1_ARRAY(NDRPOINTER):
727    referent = (
728        ('Data', SHARE_INFO_1_ARRAY),
729    )
730
731# 2.2.4.24 SHARE_INFO_2
732class SHARE_INFO_2(NDRSTRUCT):
733    structure = (
734        ('shi2_netname', LPWSTR),
735        ('shi2_type', DWORD),
736        ('shi2_remark', LPWSTR),
737        ('shi2_permissions', DWORD),
738        ('shi2_max_uses', DWORD),
739        ('shi2_current_uses', DWORD),
740        ('shi2_path', LPWSTR),
741        ('shi2_passwd', LPWSTR),
742    )
743
744class LPSHARE_INFO_2(NDRPOINTER):
745    referent = (
746        ('Data', SHARE_INFO_2),
747    )
748
749class SHARE_INFO_2_ARRAY(NDRUniConformantArray):
750    item = SHARE_INFO_2
751
752class LPSHARE_INFO_2_ARRAY(NDRPOINTER):
753    referent = (
754        ('Data', SHARE_INFO_2_ARRAY),
755    )
756
757# 2.2.4.25 SHARE_INFO_501
758class SHARE_INFO_501(NDRSTRUCT):
759    structure = (
760        ('shi501_netname', LPWSTR),
761        ('shi501_type', DWORD),
762        ('shi501_remark', LPWSTR),
763        ('shi501_flags', DWORD),
764    )
765
766class LPSHARE_INFO_501(NDRPOINTER):
767    referent = (
768        ('Data', SHARE_INFO_501),
769    )
770
771class SHARE_INFO_501_ARRAY(NDRUniConformantArray):
772    item = SHARE_INFO_501
773
774class LPSHARE_INFO_501_ARRAY(NDRPOINTER):
775    referent = (
776        ('Data', SHARE_INFO_501_ARRAY),
777    )
778
779# 2.2.4.26 SHARE_INFO_502_I
780class SHARE_INFO_502(NDRSTRUCT):
781    structure = (
782        ('shi502_netname', LPWSTR),
783        ('shi502_type', DWORD),
784        ('shi502_remark', LPWSTR),
785        ('shi502_permissions', DWORD),
786        ('shi502_max_uses', DWORD),
787        ('shi502_current_uses', DWORD),
788        ('shi502_path', LPWSTR),
789        ('shi502_passwd', LPWSTR),
790        ('shi502_reserved', DWORD),
791        ('shi502_security_descriptor', LPBYTE),
792    )
793
794class LPSHARE_INFO_502(NDRPOINTER):
795    referent = (
796        ('Data', SHARE_INFO_502),
797    )
798
799class SHARE_INFO_502_ARRAY(NDRUniConformantArray):
800    item = SHARE_INFO_502
801
802class LPSHARE_INFO_502_ARRAY(NDRPOINTER):
803    referent = (
804        ('Data', SHARE_INFO_502_ARRAY),
805    )
806
807# 2.2.4.27 SHARE_INFO_503_I
808class SHARE_INFO_503(NDRSTRUCT):
809    structure = (
810        ('shi503_netname', LPWSTR),
811        ('shi503_type', DWORD),
812        ('shi503_remark', LPWSTR),
813        ('shi503_permissions', DWORD),
814        ('shi503_max_uses', DWORD),
815        ('shi503_current_uses', DWORD),
816        ('shi503_path', LPWSTR),
817        ('shi503_passwd', LPWSTR),
818        ('shi503_servername', LPWSTR),
819        ('shi503_reserved', DWORD),
820        ('shi503_security_descriptor', LPBYTE),
821    )
822
823class LPSHARE_INFO_503(NDRPOINTER):
824    referent = (
825        ('Data', SHARE_INFO_503),
826    )
827
828class SHARE_INFO_503_ARRAY(NDRUniConformantArray):
829    item = SHARE_INFO_503
830
831class LPSHARE_INFO_503_ARRAY(NDRPOINTER):
832    referent = (
833        ('Data', SHARE_INFO_503_ARRAY),
834    )
835
836# 2.2.4.28 SHARE_INFO_1004
837class SHARE_INFO_1004(NDRSTRUCT):
838    structure = (
839        ('shi1004_remark', LPWSTR),
840    )
841
842class LPSHARE_INFO_1004(NDRPOINTER):
843    referent = (
844        ('Data', SHARE_INFO_1004),
845    )
846
847class SHARE_INFO_1004_ARRAY(NDRUniConformantArray):
848    item = SHARE_INFO_1004
849
850class LPSHARE_INFO_1004_ARRAY(NDRPOINTER):
851    referent = (
852        ('Data', SHARE_INFO_1004_ARRAY),
853    )
854
855# 2.2.4.29 SHARE_INFO_1005
856class SHARE_INFO_1005(NDRSTRUCT):
857    structure = (
858        ('shi1005_flags', DWORD),
859    )
860
861class LPSHARE_INFO_1005(NDRPOINTER):
862    referent = (
863        ('Data', SHARE_INFO_1005),
864    )
865
866class SHARE_INFO_1005_ARRAY(NDRUniConformantArray):
867    item = SHARE_INFO_1004
868
869class LPSHARE_INFO_1005_ARRAY(NDRPOINTER):
870    referent = (
871        ('Data', SHARE_INFO_1005_ARRAY),
872    )
873
874# 2.2.4.30 SHARE_INFO_1006
875class SHARE_INFO_1006(NDRSTRUCT):
876    structure = (
877        ('shi1006_max_uses', DWORD),
878    )
879
880class LPSHARE_INFO_1006(NDRPOINTER):
881    referent = (
882        ('Data', SHARE_INFO_1006),
883    )
884
885class SHARE_INFO_1006_ARRAY(NDRUniConformantArray):
886    item = SHARE_INFO_1006
887
888class LPSHARE_INFO_1006_ARRAY(NDRPOINTER):
889    referent = (
890        ('Data', SHARE_INFO_1006_ARRAY),
891    )
892
893# 2.2.4.31 SHARE_INFO_1501_I
894class SHARE_INFO_1501(NDRSTRUCT):
895    structure = (
896        ('shi1501_reserved', DWORD),
897        ('shi1501_security_descriptor', NDRUniConformantArray),
898    )
899
900class LPSHARE_INFO_1501(NDRPOINTER):
901    referent = (
902        ('Data', SHARE_INFO_1501),
903    )
904
905class SHARE_INFO_1501_ARRAY(NDRUniConformantArray):
906    item = SHARE_INFO_1501
907
908class LPSHARE_INFO_1501_ARRAY(NDRPOINTER):
909    referent = (
910        ('Data', SHARE_INFO_1501_ARRAY),
911    )
912
913# 2.2.4.32 SHARE_INFO_0_CONTAINER
914class SHARE_INFO_0_CONTAINER(NDRSTRUCT):
915    structure = (
916        ('EntriesRead', DWORD),
917        ('Buffer', LPSHARE_INFO_0_ARRAY),
918    )
919
920class LPSHARE_INFO_0_CONTAINER(NDRPOINTER):
921    referent = (
922        ('Data', SHARE_INFO_0_CONTAINER),
923    )
924
925# 2.2.4.33 SHARE_INFO_1_CONTAINER
926class SHARE_INFO_1_CONTAINER(NDRSTRUCT):
927    structure = (
928        ('EntriesRead', DWORD),
929        ('Buffer', LPSHARE_INFO_1_ARRAY),
930    )
931
932class LPSHARE_INFO_1_CONTAINER(NDRPOINTER):
933    referent = (
934        ('Data', SHARE_INFO_1_CONTAINER),
935    )
936
937# 2.2.4.34 SHARE_INFO_2_CONTAINER
938class SHARE_INFO_2_CONTAINER(NDRSTRUCT):
939    structure = (
940        ('EntriesRead', DWORD),
941        ('Buffer', LPSHARE_INFO_2_ARRAY),
942    )
943
944class LPSHARE_INFO_2_CONTAINER(NDRPOINTER):
945    referent = (
946        ('Data', SHARE_INFO_2_CONTAINER),
947    )
948
949# 2.2.4.35 SHARE_INFO_501_CONTAINER
950class SHARE_INFO_501_CONTAINER(NDRSTRUCT):
951    structure = (
952        ('EntriesRead', DWORD),
953        ('Buffer', LPSHARE_INFO_501_ARRAY),
954    )
955
956class LPSHARE_INFO_501_CONTAINER(NDRPOINTER):
957    referent = (
958        ('Data', SHARE_INFO_501_CONTAINER),
959    )
960
961# 2.2.4.36 SHARE_INFO_502_CONTAINER
962class SHARE_INFO_502_CONTAINER(NDRSTRUCT):
963    structure = (
964        ('EntriesRead', DWORD),
965        ('Buffer', LPSHARE_INFO_502_ARRAY),
966    )
967
968class LPSHARE_INFO_502_CONTAINER(NDRPOINTER):
969    referent = (
970        ('Data', SHARE_INFO_502_CONTAINER),
971    )
972
973# 2.2.4.37 SHARE_INFO_503_CONTAINER
974class SHARE_INFO_503_CONTAINER(NDRSTRUCT):
975    structure = (
976        ('EntriesRead', DWORD),
977        ('Buffer', LPSHARE_INFO_503_ARRAY),
978    )
979
980class LPSHARE_INFO_503_CONTAINER(NDRPOINTER):
981    referent = (
982        ('Data', SHARE_INFO_503_CONTAINER),
983    )
984
985# 2.2.3.5 SHARE_ENUM_UNION
986class SHARE_ENUM_UNION(NDRUNION):
987    commonHdr = (
988        ('tag', DWORD),
989    )
990
991    union = {
992        0: ('Level0', LPSHARE_INFO_0_CONTAINER),
993        1: ('Level1', LPSHARE_INFO_1_CONTAINER),
994        2: ('Level2', LPSHARE_INFO_2_CONTAINER),
995        501: ('Level501', LPSHARE_INFO_501_CONTAINER),
996        502: ('Level502', LPSHARE_INFO_502_CONTAINER),
997        503: ('Level503', LPSHARE_INFO_503_CONTAINER),
998    }
999
1000# 2.2.4.38 SHARE_ENUM_STRUCT
1001class SHARE_ENUM_STRUCT(NDRSTRUCT):
1002    structure = (
1003        ('Level', DWORD),
1004        ('ShareInfo', SHARE_ENUM_UNION),
1005    )
1006
1007# 2.2.4.39 STAT_SERVER_0
1008class STAT_SERVER_0(NDRSTRUCT):
1009    structure = (
1010        ('sts0_start', DWORD),
1011        ('sts0_fopens', DWORD),
1012        ('sts0_devopens', DWORD),
1013        ('sts0_jobsqueued', DWORD),
1014        ('sts0_sopens', DWORD),
1015        ('sts0_stimedout', DWORD),
1016        ('sts0_serrorout', DWORD),
1017        ('sts0_pwerrors', DWORD),
1018        ('sts0_permerrors', DWORD),
1019        ('sts0_syserrors', DWORD),
1020        ('sts0_bytessent_low', DWORD),
1021        ('sts0_bytessent_high', DWORD),
1022        ('sts0_bytesrcvd_low', DWORD),
1023        ('sts0_bytesrcvd_high', DWORD),
1024        ('sts0_avresponse', DWORD),
1025        ('sts0_reqbufneed', DWORD),
1026        ('sts0_bigbufneed', DWORD),
1027    )
1028
1029class LPSTAT_SERVER_0(NDRPOINTER):
1030    referent = (
1031        ('Data', STAT_SERVER_0),
1032    )
1033
1034# 2.2.4.40 SERVER_INFO_100
1035class SERVER_INFO_100(NDRSTRUCT):
1036    structure = (
1037        ('sv100_platform_id', DWORD),
1038        ('sv100_name', LPWSTR),
1039    )
1040
1041class LPSERVER_INFO_100(NDRPOINTER):
1042    referent = (
1043        ('Data', SERVER_INFO_100),
1044    )
1045
1046# 2.2.4.41 SERVER_INFO_101
1047class SERVER_INFO_101(NDRSTRUCT):
1048    structure = (
1049        ('sv101_platform_id', DWORD),
1050        ('sv101_name', LPWSTR),
1051        ('sv101_version_major', DWORD),
1052        ('sv101_version_minor', DWORD),
1053        ('sv101_type', DWORD),
1054        ('sv101_comment', LPWSTR),
1055    )
1056
1057class LPSERVER_INFO_101(NDRPOINTER):
1058    referent = (
1059        ('Data', SERVER_INFO_101),
1060    )
1061
1062# 2.2.4.42 SERVER_INFO_102
1063class SERVER_INFO_102(NDRSTRUCT):
1064    structure = (
1065        ('sv102_platform_id', DWORD),
1066        ('sv102_name', LPWSTR),
1067        ('sv102_version_major', DWORD),
1068        ('sv102_version_minor', DWORD),
1069        ('sv102_type', DWORD),
1070        ('sv102_comment', LPWSTR),
1071        ('sv102_users', DWORD),
1072        ('sv102_disc', DWORD),
1073        ('sv102_hidden', DWORD),
1074        ('sv102_announce', DWORD),
1075        ('sv102_anndelta', DWORD),
1076        ('sv102_licenses', DWORD),
1077        ('sv102_userpath', LPWSTR),
1078    )
1079
1080class LPSERVER_INFO_102(NDRPOINTER):
1081    referent = (
1082        ('Data', SERVER_INFO_102),
1083    )
1084
1085# 2.2.4.43 SERVER_INFO_103
1086class SERVER_INFO_103(NDRSTRUCT):
1087    structure = (
1088        ('sv103_platform_id', DWORD),
1089        ('sv103_name', LPWSTR),
1090        ('sv103_version_major', DWORD),
1091        ('sv103_version_minor', DWORD),
1092        ('sv103_type', DWORD),
1093        ('sv103_comment', LPWSTR),
1094        ('sv103_users', DWORD),
1095        ('sv103_disc', DWORD),
1096        ('sv103_hidden', DWORD),
1097        ('sv103_announce', DWORD),
1098        ('sv103_anndelta', DWORD),
1099        ('sv103_licenses', DWORD),
1100        ('sv103_userpath', LPWSTR),
1101        ('sv103_capabilities', DWORD),
1102    )
1103
1104class LPSERVER_INFO_103(NDRPOINTER):
1105    referent = (
1106        ('Data', SERVER_INFO_103),
1107    )
1108
1109# 2.2.4.44 SERVER_INFO_502
1110class SERVER_INFO_502(NDRSTRUCT):
1111    structure = (
1112        ('sv502_sessopens', DWORD),
1113        ('sv502_sessvcs', DWORD),
1114        ('sv502_opensearch', DWORD),
1115        ('sv502_sizreqbuf', DWORD),
1116        ('sv502_initworkitems', DWORD),
1117        ('sv502_maxworkitems', DWORD),
1118        ('sv502_rawworkitems', DWORD),
1119        ('sv502_irpstacksize', DWORD),
1120        ('sv502_maxrawbuflen', DWORD),
1121        ('sv502_sessusers', DWORD),
1122        ('sv502_sessconns', DWORD),
1123        ('sv502_maxpagedmemoryusage', DWORD),
1124        ('sv502_maxnonpagedmemoryusage', DWORD),
1125        ('sv502_enablesoftcompat', DWORD),
1126        ('sv502_enableforcedlogoff', DWORD),
1127        ('sv502_timesource', DWORD),
1128        ('sv502_acceptdownlevelapis', DWORD),
1129        ('sv502_lmannounce', DWORD),
1130    )
1131
1132class LPSERVER_INFO_502(NDRPOINTER):
1133    referent = (
1134        ('Data', SERVER_INFO_502),
1135    )
1136
1137# 2.2.4.45 SERVER_INFO_503
1138class SERVER_INFO_503(NDRSTRUCT):
1139    structure = (
1140        ('sv503_sessopens', DWORD),
1141        ('sv503_sessvcs', DWORD),
1142        ('sv503_opensearch', DWORD),
1143        ('sv503_sizreqbuf', DWORD),
1144        ('sv503_initworkitems', DWORD),
1145        ('sv503_maxworkitems', DWORD),
1146        ('sv503_rawworkitems', DWORD),
1147        ('sv503_irpstacksize', DWORD),
1148        ('sv503_maxrawbuflen', DWORD),
1149        ('sv503_sessusers', DWORD),
1150        ('sv503_sessconns', DWORD),
1151        ('sv503_maxpagedmemoryusage', DWORD),
1152        ('sv503_maxnonpagedmemoryusage', DWORD),
1153        ('sv503_enablesoftcompat', DWORD),
1154        ('sv503_enableforcedlogoff', DWORD),
1155        ('sv503_timesource', DWORD),
1156        ('sv503_acceptdownlevelapis', DWORD),
1157        ('sv503_lmannounce', DWORD),
1158        ('sv503_domain', LPWSTR),
1159        ('sv503_maxcopyreadlen', DWORD),
1160        ('sv503_maxcopywritelen', DWORD),
1161        ('sv503_minkeepsearch', DWORD),
1162        ('sv503_maxkeepsearch', DWORD),
1163        ('sv503_minkeepcomplsearch', DWORD),
1164        ('sv503_maxkeepcomplsearch', DWORD),
1165        ('sv503_threadcountadd', DWORD),
1166        ('sv503_numblockthreads', DWORD),
1167        ('sv503_scavtimeout', DWORD),
1168        ('sv503_minrcvqueue', DWORD),
1169        ('sv503_minfreeworkitems', DWORD),
1170        ('sv503_xactmemsize', DWORD),
1171        ('sv503_threadpriority', DWORD),
1172        ('sv503_maxmpxct', DWORD),
1173        ('sv503_oplockbreakwait', DWORD),
1174        ('sv503_oplockbreakresponsewait', DWORD),
1175        ('sv503_enableoplocks', DWORD),
1176        ('sv503_enableoplockforceclose', DWORD),
1177        ('sv503_enablefcbopens', DWORD),
1178        ('sv503_enableraw', DWORD),
1179        ('sv503_enablesharednetdrives', DWORD),
1180        ('sv503_minfreeconnections', DWORD),
1181        ('sv503_maxfreeconnections', DWORD),
1182    )
1183
1184class LPSERVER_INFO_503(NDRPOINTER):
1185    referent = (
1186        ('Data', SERVER_INFO_503),
1187    )
1188
1189# 2.2.4.46 SERVER_INFO_599
1190class SERVER_INFO_599(NDRSTRUCT):
1191    structure = (
1192        ('sv599_sessopens', DWORD),
1193        ('sv599_sessvcs', DWORD),
1194        ('sv599_opensearch', DWORD),
1195        ('sv599_sizreqbuf', DWORD),
1196        ('sv599_initworkitems', DWORD),
1197        ('sv599_maxworkitems', DWORD),
1198        ('sv599_rawworkitems', DWORD),
1199        ('sv599_irpstacksize', DWORD),
1200        ('sv599_maxrawbuflen', DWORD),
1201        ('sv599_sessusers', DWORD),
1202        ('sv599_sessconns', DWORD),
1203        ('sv599_maxpagedmemoryusage', DWORD),
1204        ('sv599_maxnonpagedmemoryusage', DWORD),
1205        ('sv599_enablesoftcompat', DWORD),
1206        ('sv599_enableforcedlogoff', DWORD),
1207        ('sv599_timesource', DWORD),
1208        ('sv599_acceptdownlevelapis', DWORD),
1209        ('sv599_lmannounce', DWORD),
1210        ('sv599_domain', LPWSTR),
1211        ('sv599_maxcopyreadlen', DWORD),
1212        ('sv599_maxcopywritelen', DWORD),
1213        ('sv599_minkeepsearch', DWORD),
1214        ('sv599_maxkeepsearch', DWORD),
1215        ('sv599_minkeepcomplsearch', DWORD),
1216        ('sv599_maxkeepcomplsearch', DWORD),
1217        ('sv599_threadcountadd', DWORD),
1218        ('sv599_numblockthreads', DWORD),
1219        ('sv599_scavtimeout', DWORD),
1220        ('sv599_minrcvqueue', DWORD),
1221        ('sv599_minfreeworkitems', DWORD),
1222        ('sv599_xactmemsize', DWORD),
1223        ('sv599_threadpriority', DWORD),
1224        ('sv599_maxmpxct', DWORD),
1225        ('sv599_oplockbreakwait', DWORD),
1226        ('sv599_oplockbreakresponsewait', DWORD),
1227        ('sv599_enableoplocks', DWORD),
1228        ('sv599_enableoplockforceclose', DWORD),
1229        ('sv599_enablefcbopens', DWORD),
1230        ('sv599_enableraw', DWORD),
1231        ('sv599_enablesharednetdrives', DWORD),
1232        ('sv599_minfreeconnections', DWORD),
1233        ('sv599_maxfreeconnections', DWORD),
1234        ('sv599_initsesstable', DWORD),
1235        ('sv599_initconntable', DWORD),
1236        ('sv599_initfiletable', DWORD),
1237        ('sv599_initsearchtable', DWORD),
1238        ('sv599_alertschedule', DWORD),
1239        ('sv599_errorthreshold', DWORD),
1240        ('sv599_networkerrorthreshold', DWORD),
1241        ('sv599_diskspacethreshold', DWORD),
1242        ('sv599_reserved', DWORD),
1243        ('sv599_maxlinkdelay', DWORD),
1244        ('sv599_minlinkthroughput', DWORD),
1245        ('sv599_linkinfovalidtime', DWORD),
1246        ('sv599_scavqosinfoupdatetime', DWORD),
1247        ('sv599_maxworkitemidletime', DWORD),
1248    )
1249
1250class LPSERVER_INFO_599(NDRPOINTER):
1251    referent = (
1252        ('Data', SERVER_INFO_599),
1253    )
1254
1255# 2.2.4.47 SERVER_INFO_1005
1256class SERVER_INFO_1005(NDRSTRUCT):
1257    structure = (
1258        ('sv1005_comment', LPWSTR),
1259    )
1260
1261class LPSERVER_INFO_1005(NDRPOINTER):
1262    referent = (
1263        ('Data', SERVER_INFO_1005),
1264    )
1265
1266# 2.2.4.48 SERVER_INFO_1107
1267class SERVER_INFO_1107(NDRSTRUCT):
1268    structure = (
1269        ('sv1107_users', DWORD),
1270    )
1271
1272class LPSERVER_INFO_1107(NDRPOINTER):
1273    referent = (
1274        ('Data', SERVER_INFO_1107),
1275    )
1276
1277# 2.2.4.49 SERVER_INFO_1010
1278class SERVER_INFO_1010(NDRSTRUCT):
1279    structure = (
1280        ('sv1010_disc', DWORD),
1281    )
1282
1283class LPSERVER_INFO_1010(NDRPOINTER):
1284    referent = (
1285        ('Data', SERVER_INFO_1010),
1286    )
1287
1288# 2.2.4.50 SERVER_INFO_1016
1289class SERVER_INFO_1016(NDRSTRUCT):
1290    structure = (
1291        ('sv1016_hidden', DWORD),
1292    )
1293
1294class LPSERVER_INFO_1016(NDRPOINTER):
1295    referent = (
1296        ('Data', SERVER_INFO_1016),
1297    )
1298
1299# 2.2.4.51 SERVER_INFO_1017
1300class SERVER_INFO_1017(NDRSTRUCT):
1301    structure = (
1302        ('sv1017_announce', DWORD),
1303    )
1304
1305class LPSERVER_INFO_1017(NDRPOINTER):
1306    referent = (
1307        ('Data', SERVER_INFO_1017),
1308    )
1309
1310# 2.2.4.52 SERVER_INFO_1018
1311class SERVER_INFO_1018(NDRSTRUCT):
1312    structure = (
1313        ('sv1018_anndelta', DWORD),
1314    )
1315
1316class LPSERVER_INFO_1018(NDRPOINTER):
1317    referent = (
1318        ('Data', SERVER_INFO_1018),
1319    )
1320
1321# 2.2.4.53 SERVER_INFO_1501
1322class SERVER_INFO_1501(NDRSTRUCT):
1323    structure = (
1324        ('sv1501_sessopens', DWORD),
1325    )
1326
1327class LPSERVER_INFO_1501(NDRPOINTER):
1328    referent = (
1329        ('Data', SERVER_INFO_1501),
1330    )
1331
1332# 2.2.4.54 SERVER_INFO_1502
1333class SERVER_INFO_1502(NDRSTRUCT):
1334    structure = (
1335        ('sv1502_sessvcs', DWORD),
1336    )
1337
1338class LPSERVER_INFO_1502(NDRPOINTER):
1339    referent = (
1340        ('Data', SERVER_INFO_1502),
1341    )
1342
1343# 2.2.4.55 SERVER_INFO_1503
1344class SERVER_INFO_1503(NDRSTRUCT):
1345    structure = (
1346        ('sv1503_opensearch', DWORD),
1347    )
1348
1349class LPSERVER_INFO_1503(NDRPOINTER):
1350    referent = (
1351        ('Data', SERVER_INFO_1503),
1352    )
1353
1354# 2.2.4.56 SERVER_INFO_1506
1355class SERVER_INFO_1506(NDRSTRUCT):
1356    structure = (
1357        ('sv1506_maxworkitems', DWORD),
1358    )
1359
1360class LPSERVER_INFO_1506(NDRPOINTER):
1361    referent = (
1362        ('Data', SERVER_INFO_1506),
1363    )
1364
1365# 2.2.4.57 SERVER_INFO_1510
1366class SERVER_INFO_1510(NDRSTRUCT):
1367    structure = (
1368        ('sv1510_sessusers', DWORD),
1369    )
1370
1371class LPSERVER_INFO_1510(NDRPOINTER):
1372    referent = (
1373        ('Data', SERVER_INFO_1510),
1374    )
1375
1376# 2.2.4.58 SERVER_INFO_1511
1377class SERVER_INFO_1511(NDRSTRUCT):
1378    structure = (
1379        ('sv1511_sessconns', DWORD),
1380    )
1381
1382class LPSERVER_INFO_1511(NDRPOINTER):
1383    referent = (
1384        ('Data', SERVER_INFO_1511),
1385    )
1386
1387# 2.2.4.59 SERVER_INFO_1512
1388class SERVER_INFO_1512(NDRSTRUCT):
1389    structure = (
1390        ('sv1512_maxnonpagedmemoryusage', DWORD),
1391    )
1392
1393class LPSERVER_INFO_1512(NDRPOINTER):
1394    referent = (
1395        ('Data', SERVER_INFO_1512),
1396    )
1397
1398# 2.2.4.60 SERVER_INFO_1513
1399class SERVER_INFO_1513(NDRSTRUCT):
1400    structure = (
1401        ('sv1513_maxpagedmemoryusage', DWORD),
1402    )
1403
1404class LPSERVER_INFO_1513(NDRPOINTER):
1405    referent = (
1406        ('Data', SERVER_INFO_1513),
1407    )
1408
1409# 2.2.4.61 SERVER_INFO_1514
1410class SERVER_INFO_1514(NDRSTRUCT):
1411    structure = (
1412        ('sv1514_enablesoftcompat', DWORD),
1413    )
1414
1415class LPSERVER_INFO_1514(NDRPOINTER):
1416    referent = (
1417        ('Data', SERVER_INFO_1514),
1418    )
1419
1420# 2.2.4.62 SERVER_INFO_1515
1421class SERVER_INFO_1515(NDRSTRUCT):
1422    structure = (
1423        ('sv1515_enableforcedlogoff', DWORD),
1424    )
1425
1426class LPSERVER_INFO_1515(NDRPOINTER):
1427    referent = (
1428        ('Data', SERVER_INFO_1515),
1429    )
1430
1431# 2.2.4.63 SERVER_INFO_1516
1432class SERVER_INFO_1516(NDRSTRUCT):
1433    structure = (
1434        ('sv1516_timesource', DWORD),
1435    )
1436
1437class LPSERVER_INFO_1516(NDRPOINTER):
1438    referent = (
1439        ('Data', SERVER_INFO_1516),
1440    )
1441
1442# 2.2.4.64 SERVER_INFO_1518
1443class SERVER_INFO_1518(NDRSTRUCT):
1444    structure = (
1445        ('sv1518_lmannounce', DWORD),
1446    )
1447
1448class LPSERVER_INFO_1518(NDRPOINTER):
1449    referent = (
1450        ('Data', SERVER_INFO_1518),
1451    )
1452
1453# 2.2.4.65 SERVER_INFO_1523
1454class SERVER_INFO_1523(NDRSTRUCT):
1455    structure = (
1456        ('sv1523_maxkeepsearch', DWORD),
1457    )
1458
1459class LPSERVER_INFO_1523(NDRPOINTER):
1460    referent = (
1461        ('Data', SERVER_INFO_1523),
1462    )
1463
1464# 2.2.4.66 SERVER_INFO_1528
1465class SERVER_INFO_1528(NDRSTRUCT):
1466    structure = (
1467        ('sv1528_scavtimeout', DWORD),
1468    )
1469
1470class LPSERVER_INFO_1528(NDRPOINTER):
1471    referent = (
1472        ('Data', SERVER_INFO_1528),
1473    )
1474
1475# 2.2.4.67 SERVER_INFO_1529
1476class SERVER_INFO_1529(NDRSTRUCT):
1477    structure = (
1478        ('sv1529_minrcvqueue', DWORD),
1479    )
1480
1481class LPSERVER_INFO_1529(NDRPOINTER):
1482    referent = (
1483        ('Data', SERVER_INFO_1529),
1484    )
1485
1486# 2.2.4.68 SERVER_INFO_1530
1487class SERVER_INFO_1530(NDRSTRUCT):
1488    structure = (
1489        ('sv1530_minfreeworkitems', DWORD),
1490    )
1491
1492class LPSERVER_INFO_1530(NDRPOINTER):
1493    referent = (
1494        ('Data', SERVER_INFO_1530),
1495    )
1496
1497# 2.2.4.69 SERVER_INFO_1533
1498class SERVER_INFO_1533(NDRSTRUCT):
1499    structure = (
1500        ('sv1533_maxmpxct', DWORD),
1501    )
1502
1503class LPSERVER_INFO_1533(NDRPOINTER):
1504    referent = (
1505        ('Data', SERVER_INFO_1533),
1506    )
1507
1508# 2.2.4.70 SERVER_INFO_1534
1509class SERVER_INFO_1534(NDRSTRUCT):
1510    structure = (
1511        ('sv1534_oplockbreakwait', DWORD),
1512    )
1513
1514class LPSERVER_INFO_1534(NDRPOINTER):
1515    referent = (
1516        ('Data', SERVER_INFO_1534),
1517    )
1518
1519# 2.2.4.71 SERVER_INFO_1535
1520class SERVER_INFO_1535(NDRSTRUCT):
1521    structure = (
1522        ('sv1535_oplockbreakresponsewait', DWORD),
1523    )
1524
1525class LPSERVER_INFO_1535(NDRPOINTER):
1526    referent = (
1527        ('Data', SERVER_INFO_1535),
1528    )
1529
1530# 2.2.4.72 SERVER_INFO_1536
1531class SERVER_INFO_1536(NDRSTRUCT):
1532    structure = (
1533        ('sv1536_enableoplocks', DWORD),
1534    )
1535
1536class LPSERVER_INFO_1536(NDRPOINTER):
1537    referent = (
1538        ('Data', SERVER_INFO_1536),
1539    )
1540
1541# 2.2.4.73 SERVER_INFO_1538
1542class SERVER_INFO_1538(NDRSTRUCT):
1543    structure = (
1544        ('sv1538_enablefcbopens', DWORD),
1545    )
1546
1547class LPSERVER_INFO_1538(NDRPOINTER):
1548    referent = (
1549        ('Data', SERVER_INFO_1538),
1550    )
1551
1552# 2.2.4.74 SERVER_INFO_1539
1553class SERVER_INFO_1539(NDRSTRUCT):
1554    structure = (
1555        ('sv1539_enableraw', DWORD),
1556    )
1557
1558class LPSERVER_INFO_1539(NDRPOINTER):
1559    referent = (
1560        ('Data', SERVER_INFO_1539),
1561    )
1562
1563# 2.2.4.75 SERVER_INFO_1540
1564class SERVER_INFO_1540(NDRSTRUCT):
1565    structure = (
1566        ('sv1540_enablesharednetdrives', DWORD),
1567    )
1568
1569class LPSERVER_INFO_1540(NDRPOINTER):
1570    referent = (
1571        ('Data', SERVER_INFO_1540),
1572    )
1573
1574# 2.2.4.76 SERVER_INFO_1541
1575class SERVER_INFO_1541(NDRSTRUCT):
1576    structure = (
1577        ('sv1541_minfreeconnections', DWORD),
1578    )
1579
1580class LPSERVER_INFO_1541(NDRPOINTER):
1581    referent = (
1582        ('Data', SERVER_INFO_1541),
1583    )
1584
1585# 2.2.4.77 SERVER_INFO_1542
1586class SERVER_INFO_1542(NDRSTRUCT):
1587    structure = (
1588        ('sv1542_maxfreeconnections', DWORD),
1589    )
1590
1591class LPSERVER_INFO_1542(NDRPOINTER):
1592    referent = (
1593        ('Data', SERVER_INFO_1542),
1594    )
1595
1596# 2.2.4.78 SERVER_INFO_1543
1597class SERVER_INFO_1543(NDRSTRUCT):
1598    structure = (
1599        ('sv1543_initsesstable', DWORD),
1600    )
1601
1602class LPSERVER_INFO_1543(NDRPOINTER):
1603    referent = (
1604        ('Data', SERVER_INFO_1543),
1605    )
1606
1607# 2.2.4.79 SERVER_INFO_1544
1608class SERVER_INFO_1544(NDRSTRUCT):
1609    structure = (
1610        ('sv1544_initconntable', DWORD),
1611    )
1612
1613class LPSERVER_INFO_1544(NDRPOINTER):
1614    referent = (
1615        ('Data', SERVER_INFO_1544),
1616    )
1617
1618# 2.2.4.80 SERVER_INFO_1545
1619class SERVER_INFO_1545(NDRSTRUCT):
1620    structure = (
1621        ('sv1545_initfiletable', DWORD),
1622    )
1623
1624class LPSERVER_INFO_1545(NDRPOINTER):
1625    referent = (
1626        ('Data', SERVER_INFO_1545),
1627    )
1628
1629# 2.2.4.81 SERVER_INFO_1546
1630class SERVER_INFO_1546(NDRSTRUCT):
1631    structure = (
1632        ('sv1546_initsearchtable', DWORD),
1633    )
1634
1635class LPSERVER_INFO_1546(NDRPOINTER):
1636    referent = (
1637        ('Data', SERVER_INFO_1546),
1638    )
1639
1640# 2.2.4.82 SERVER_INFO_1547
1641class SERVER_INFO_1547(NDRSTRUCT):
1642    structure = (
1643        ('sv1547_alertschedule', DWORD),
1644    )
1645
1646class LPSERVER_INFO_1547(NDRPOINTER):
1647    referent = (
1648        ('Data', SERVER_INFO_1547),
1649    )
1650
1651# 2.2.4.83 SERVER_INFO_1548
1652class SERVER_INFO_1548(NDRSTRUCT):
1653    structure = (
1654        ('sv1548_errorthreshold', DWORD),
1655    )
1656
1657class LPSERVER_INFO_1548(NDRPOINTER):
1658    referent = (
1659        ('Data', SERVER_INFO_1548),
1660    )
1661
1662# 2.2.4.84 SERVER_INFO_1549
1663class SERVER_INFO_1549(NDRSTRUCT):
1664    structure = (
1665        ('sv1549_networkerrorthreshold', DWORD),
1666    )
1667
1668class LPSERVER_INFO_1549(NDRPOINTER):
1669    referent = (
1670        ('Data', SERVER_INFO_1549),
1671    )
1672
1673# 2.2.4.85 SERVER_INFO_1550
1674class SERVER_INFO_1550(NDRSTRUCT):
1675    structure = (
1676        ('sv1550_diskspacethreshold', DWORD),
1677    )
1678
1679class LPSERVER_INFO_1550(NDRPOINTER):
1680    referent = (
1681        ('Data', SERVER_INFO_1550),
1682    )
1683
1684# 2.2.4.86 SERVER_INFO_1552
1685class SERVER_INFO_1552(NDRSTRUCT):
1686    structure = (
1687        ('sv1552_maxlinkdelay', DWORD),
1688    )
1689
1690class LPSERVER_INFO_1552(NDRPOINTER):
1691    referent = (
1692        ('Data', SERVER_INFO_1552),
1693    )
1694
1695# 2.2.4.87 SERVER_INFO_1553
1696class SERVER_INFO_1553(NDRSTRUCT):
1697    structure = (
1698        ('sv1553_minlinkthroughput', DWORD),
1699    )
1700
1701class LPSERVER_INFO_1553(NDRPOINTER):
1702    referent = (
1703        ('Data', SERVER_INFO_1553),
1704    )
1705
1706# 2.2.4.88 SERVER_INFO_1554
1707class SERVER_INFO_1554(NDRSTRUCT):
1708    structure = (
1709        ('sv1554_linkinfovalidtime', DWORD),
1710    )
1711
1712class LPSERVER_INFO_1554(NDRPOINTER):
1713    referent = (
1714        ('Data', SERVER_INFO_1554),
1715    )
1716
1717# 2.2.4.89 SERVER_INFO_1555
1718class SERVER_INFO_1555(NDRSTRUCT):
1719    structure = (
1720        ('sv1555_scavqosinfoupdatetime', DWORD),
1721    )
1722
1723class LPSERVER_INFO_1555(NDRPOINTER):
1724    referent = (
1725        ('Data', SERVER_INFO_1555),
1726    )
1727
1728# 2.2.4.90 SERVER_INFO_1556
1729class SERVER_INFO_1556(NDRSTRUCT):
1730    structure = (
1731        ('sv1556_maxworkitemidletime', DWORD),
1732    )
1733
1734class LPSERVER_INFO_1556(NDRPOINTER):
1735    referent = (
1736        ('Data', SERVER_INFO_1556),
1737    )
1738
1739# 2.2.4.91 DISK_INFO
1740class WCHAR_ARRAY(NDRSTRUCT):
1741    commonHdr = (
1742        ('Offset','<L=0'),
1743        ('ActualCount','<L=len(Data)/2'),
1744    )
1745    commonHdr64 = (
1746        ('Offset','<Q=0'),
1747        ('ActualCount','<Q=len(Data)/2'),
1748    )
1749    structure = (
1750        ('Data',':'),
1751    )
1752
1753    def dump(self, msg = None, indent = 0):
1754        if msg is None: msg = self.__class__.__name__
1755        if msg != '':
1756            print "%s" % msg,
1757        # Here just print the data
1758        print " %r" % (self['Data']),
1759
1760    def __setitem__(self, key, value):
1761        if key == 'Data':
1762            try:
1763                self.fields[key] = value.encode('utf-16le')
1764            except UnicodeDecodeError:
1765                import sys
1766                self.fields[key] = value.decode(sys.getfilesystemencoding()).encode('utf-16le')
1767            self.fields['ActualCount'] = None
1768            self.data = None        # force recompute
1769        else:
1770            return NDR.__setitem__(self, key, value)
1771
1772    def __getitem__(self, key):
1773        if key == 'Data':
1774            return self.fields[key].decode('utf-16le')
1775        else:
1776            return NDR.__getitem__(self,key)
1777
1778    def getDataLen(self, data):
1779        return self["ActualCount"]*2
1780
1781
1782class DISK_INFO(NDRSTRUCT):
1783    structure = (
1784        ('Disk', WCHAR_ARRAY),
1785    )
1786
1787class LPDISK_INFO(NDRPOINTER):
1788    referent = (
1789        ('Data', DISK_INFO),
1790    )
1791
1792class DISK_INFO_ARRAY(NDRUniConformantVaryingArray):
1793    item = DISK_INFO
1794
1795class LPDISK_INFO_ARRAY(NDRPOINTER):
1796    referent = (
1797        ('Data', DISK_INFO_ARRAY),
1798    )
1799
1800# 2.2.4.92 DISK_ENUM_CONTAINER
1801class DISK_ENUM_CONTAINER(NDRSTRUCT):
1802    structure = (
1803        ('EntriesRead', DWORD),
1804        ('Buffer', LPDISK_INFO_ARRAY),
1805    )
1806
1807class LPDISK_ENUM_CONTAINER(NDRPOINTER):
1808    referent = (
1809        ('Data', DISK_ENUM_CONTAINER),
1810    )
1811
1812# 2.2.4.93 SERVER_TRANSPORT_INFO_0
1813class SERVER_TRANSPORT_INFO_0(NDRSTRUCT):
1814    structure = (
1815        ('svti0_numberofvcs', DWORD),
1816        ('svti0_transportname', LPWSTR),
1817        ('svti0_transportaddress', PNDRUniConformantArray),
1818        ('svti0_transportaddresslength', DWORD),
1819        ('svti0_networkaddress', LPWSTR),
1820    )
1821
1822class LPSERVER_TRANSPORT_INFO_0(NDRPOINTER):
1823    referent = (
1824        ('Data', SERVER_TRANSPORT_INFO_0),
1825    )
1826
1827class SERVER_TRANSPORT_INFO_0_ARRAY(NDRUniConformantArray):
1828    item = SERVER_TRANSPORT_INFO_0
1829
1830class LPSERVER_TRANSPORT_INFO_0_ARRAY(NDRPOINTER):
1831    referent = (
1832        ('Data', SERVER_TRANSPORT_INFO_0_ARRAY),
1833    )
1834
1835# 2.2.4.94 SERVER_TRANSPORT_INFO_1
1836class SERVER_TRANSPORT_INFO_1(NDRSTRUCT):
1837    structure = (
1838        ('svti1_numberofvcs', DWORD),
1839        ('svti1_transportname', LPWSTR),
1840        ('svti1_transportaddress', PNDRUniConformantArray),
1841        ('svti1_transportaddresslength', DWORD),
1842        ('svti1_networkaddress', LPWSTR),
1843        ('svti1_domain', LPWSTR),
1844    )
1845
1846class LPSERVER_TRANSPORT_INFO_1(NDRPOINTER):
1847    referent = (
1848        ('Data', SERVER_TRANSPORT_INFO_1),
1849    )
1850
1851class SERVER_TRANSPORT_INFO_1_ARRAY(NDRUniConformantArray):
1852    item = SERVER_TRANSPORT_INFO_1
1853
1854class LPSERVER_TRANSPORT_INFO_1_ARRAY(NDRPOINTER):
1855    referent = (
1856        ('Data', SERVER_TRANSPORT_INFO_1_ARRAY),
1857    )
1858
1859# 2.2.4.95 SERVER_TRANSPORT_INFO_2
1860class SERVER_TRANSPORT_INFO_2(NDRSTRUCT):
1861    structure = (
1862        ('svti2_numberofvcs', DWORD),
1863        ('svti2_transportname', LPWSTR),
1864        ('svti2_transportaddress', PNDRUniConformantArray),
1865        ('svti2_transportaddresslength', DWORD),
1866        ('svti2_networkaddress', LPWSTR),
1867        ('svti2_domain', LPWSTR),
1868        ('svti2_flags', DWORD),
1869    )
1870
1871class LPSERVER_TRANSPORT_INFO_2(NDRPOINTER):
1872    referent = (
1873        ('Data', SERVER_TRANSPORT_INFO_2),
1874    )
1875
1876class SERVER_TRANSPORT_INFO_2_ARRAY(NDRUniConformantArray):
1877    item = SERVER_TRANSPORT_INFO_2
1878
1879class LPSERVER_TRANSPORT_INFO_2_ARRAY(NDRPOINTER):
1880    referent = (
1881        ('Data', SERVER_TRANSPORT_INFO_2_ARRAY),
1882    )
1883
1884# 2.2.4.96 SERVER_TRANSPORT_INFO_3
1885class PASSWORD_ARRAY(NDRUniFixedArray):
1886    def getDataLen(self, data):
1887        return 256
1888
1889class SERVER_TRANSPORT_INFO_3(NDRSTRUCT):
1890    structure = (
1891        ('svti3_numberofvcs', DWORD),
1892        ('svti3_transportname', LPWSTR),
1893        ('svti3_transportaddress', PNDRUniConformantArray),
1894        ('svti3_transportaddresslength', DWORD),
1895        ('svti3_networkaddress', LPWSTR),
1896        ('svti3_domain', LPWSTR),
1897        ('svti3_flags', DWORD),
1898        ('svti3_passwordlength', DWORD),
1899        ('svti3_password', PASSWORD_ARRAY),
1900    )
1901
1902class LPSERVER_TRANSPORT_INFO_3(NDRPOINTER):
1903    referent = (
1904        ('Data', SERVER_TRANSPORT_INFO_3),
1905    )
1906
1907class SERVER_TRANSPORT_INFO_3_ARRAY(NDRUniConformantArray):
1908    item = SERVER_TRANSPORT_INFO_3
1909
1910class LPSERVER_TRANSPORT_INFO_3_ARRAY(NDRPOINTER):
1911    referent = (
1912        ('Data', SERVER_TRANSPORT_INFO_3_ARRAY),
1913    )
1914
1915# 2.2.4.97 SERVER_XPORT_INFO_0_CONTAINER
1916class SERVER_XPORT_INFO_0_CONTAINER(NDRSTRUCT):
1917    structure = (
1918        ('EntriesRead', DWORD),
1919        ('Buffer', LPSERVER_TRANSPORT_INFO_0_ARRAY),
1920    )
1921
1922class LPSERVER_XPORT_INFO_0_CONTAINER(NDRPOINTER):
1923    referent = (
1924        ('Data', SERVER_XPORT_INFO_0_CONTAINER),
1925    )
1926
1927# 2.2.4.98 SERVER_XPORT_INFO_1_CONTAINER
1928class SERVER_XPORT_INFO_1_CONTAINER(NDRSTRUCT):
1929    structure = (
1930        ('EntriesRead', DWORD),
1931        ('Buffer', LPSERVER_TRANSPORT_INFO_1_ARRAY),
1932    )
1933
1934class LPSERVER_XPORT_INFO_1_CONTAINER(NDRPOINTER):
1935    referent = (
1936        ('Data', SERVER_XPORT_INFO_1_CONTAINER),
1937    )
1938
1939# 2.2.4.99 SERVER_XPORT_INFO_2_CONTAINER
1940class SERVER_XPORT_INFO_2_CONTAINER(NDRSTRUCT):
1941    structure = (
1942        ('EntriesRead', DWORD),
1943        ('Buffer', LPSERVER_TRANSPORT_INFO_2_ARRAY),
1944    )
1945
1946class LPSERVER_XPORT_INFO_2_CONTAINER(NDRPOINTER):
1947    referent = (
1948        ('Data', SERVER_XPORT_INFO_2_CONTAINER),
1949    )
1950
1951# 2.2.4.100 SERVER_XPORT_INFO_3_CONTAINER
1952class SERVER_XPORT_INFO_3_CONTAINER(NDRSTRUCT):
1953    structure = (
1954        ('EntriesRead', DWORD),
1955        ('Buffer', LPSERVER_TRANSPORT_INFO_3_ARRAY),
1956    )
1957
1958class LPSERVER_XPORT_INFO_3_CONTAINER(NDRPOINTER):
1959    referent = (
1960        ('Data', SERVER_XPORT_INFO_3_CONTAINER),
1961    )
1962
1963# 2.2.3.8 SERVER_XPORT_ENUM_UNION
1964class SERVER_XPORT_ENUM_UNION(NDRUNION):
1965    commonHdr = (
1966        ('tag', DWORD),
1967    )
1968
1969    union = {
1970        0: ('Level0', LPSERVER_XPORT_INFO_0_CONTAINER),
1971        1: ('Level1', LPSERVER_XPORT_INFO_1_CONTAINER),
1972        2: ('Level2', LPSERVER_XPORT_INFO_2_CONTAINER),
1973        3: ('Level3', LPSERVER_XPORT_INFO_3_CONTAINER),
1974    }
1975
1976# 2.2.4.101 SERVER_XPORT_ENUM_STRUCT
1977class SERVER_XPORT_ENUM_STRUCT(NDRSTRUCT):
1978    structure = (
1979        ('Level', DWORD),
1980        ('XportInfo', SERVER_XPORT_ENUM_UNION),
1981    )
1982
1983# 2.2.4.102 SERVER_ALIAS_INFO_0
1984class SERVER_ALIAS_INFO_0(NDRSTRUCT):
1985    structure = (
1986        ('srvai0_alias', LMSTR),
1987        ('srvai0_target', LMSTR),
1988        ('srvai0_default', NDRBOOLEAN),
1989        ('srvai0_reserved', ULONG),
1990    )
1991
1992class LPSERVER_ALIAS_INFO_0(NDRPOINTER):
1993    referent = (
1994        ('Data', SERVER_ALIAS_INFO_0),
1995    )
1996
1997class SERVER_ALIAS_INFO_0_ARRAY(NDRUniConformantArray):
1998    item = SERVER_ALIAS_INFO_0
1999
2000class LPSERVER_ALIAS_INFO_0_ARRAY(NDRPOINTER):
2001    referent = (
2002        ('Data', SERVER_ALIAS_INFO_0_ARRAY),
2003    )
2004
2005# 2.2.4.103 SERVER_ALIAS_INFO_0_CONTAINER
2006class SERVER_ALIAS_INFO_0_CONTAINER(NDRSTRUCT):
2007    structure = (
2008        ('EntriesRead', DWORD),
2009        ('Buffer', LPSERVER_ALIAS_INFO_0_ARRAY),
2010    )
2011
2012class LPSERVER_ALIAS_INFO_0_CONTAINER(NDRPOINTER):
2013    referent = (
2014        ('Data', SERVER_ALIAS_INFO_0_CONTAINER),
2015    )
2016
2017# 2.2.4.104 SERVER_ALIAS_ENUM_STRUCT
2018class SERVER_ALIAS_ENUM_UNION(NDRUNION):
2019    commonHdr = (
2020        ('tag', DWORD),
2021    )
2022
2023    union = {
2024        0: ('Level0', LPSERVER_ALIAS_INFO_0_CONTAINER),
2025    }
2026
2027class SERVER_ALIAS_ENUM_STRUCT(NDRSTRUCT):
2028    structure = (
2029        ('Level', DWORD),
2030        ('ServerAliasInfo', SERVER_ALIAS_ENUM_UNION),
2031    )
2032
2033# 2.2.4.105 TIME_OF_DAY_INFO
2034class TIME_OF_DAY_INFO(NDRSTRUCT):
2035    structure = (
2036        ('tod_elapsedt', DWORD),
2037        ('tod_msecs', DWORD),
2038        ('tod_hours', DWORD),
2039        ('tod_mins', DWORD),
2040        ('tod_secs', DWORD),
2041        ('tod_hunds', DWORD),
2042        ('tod_timezone', DWORD),
2043        ('tod_tinterval', DWORD),
2044        ('tod_day', DWORD),
2045        ('tod_month', DWORD),
2046        ('tod_year', DWORD),
2047        ('tod_weekday', DWORD),
2048    )
2049
2050class LPTIME_OF_DAY_INFO(NDRPOINTER):
2051    referent = (
2052        ('Data', TIME_OF_DAY_INFO),
2053    )
2054
2055# 2.2.4.106 ADT_SECURITY_DESCRIPTOR
2056class ADT_SECURITY_DESCRIPTOR(NDRSTRUCT):
2057    structure = (
2058        ('Length', DWORD),
2059        ('Buffer', PNDRUniConformantArray),
2060    )
2061
2062class PADT_SECURITY_DESCRIPTOR(NDRPOINTER):
2063    referent = (
2064        ('Data', ADT_SECURITY_DESCRIPTOR),
2065    )
2066
2067# 2.2.4.107 NET_DFS_ENTRY_ID
2068class NET_DFS_ENTRY_ID(NDRSTRUCT):
2069    structure = (
2070        ('Uid', GUID),
2071        ('Prefix', LPWSTR),
2072    )
2073
2074class NET_DFS_ENTRY_ID_ARRAY(NDRUniConformantArray):
2075    item = NET_DFS_ENTRY_ID
2076
2077class LPNET_DFS_ENTRY_ID_ARRAY(NDRPOINTER):
2078     referent = (
2079         ('Data', NET_DFS_ENTRY_ID_ARRAY),
2080     )
2081
2082# 2.2.4.108 NET_DFS_ENTRY_ID_CONTAINER
2083class NET_DFS_ENTRY_ID_CONTAINER(NDRSTRUCT):
2084    structure = (
2085        ('Count', DWORD),
2086        ('Buffer', LPNET_DFS_ENTRY_ID_ARRAY),
2087    )
2088
2089# 2.2.4.109 DFS_SITENAME_INFO
2090class DFS_SITENAME_INFO(NDRSTRUCT):
2091    structure = (
2092        ('SiteFlags', DWORD),
2093        ('SiteName', LPWSTR),
2094    )
2095
2096# 2.2.4.110 DFS_SITELIST_INFO
2097class DFS_SITENAME_INFO_ARRAY(NDRUniConformantArray):
2098    item = DFS_SITENAME_INFO
2099
2100class DFS_SITELIST_INFO(NDRSTRUCT):
2101    structure = (
2102        ('cSites', DWORD),
2103        ('Site', DFS_SITENAME_INFO_ARRAY),
2104    )
2105
2106class LPDFS_SITELIST_INFO(NDRPOINTER):
2107    referent = (
2108        ('Data', DFS_SITELIST_INFO),
2109    )
2110
2111# 2.2.3 Unions
2112# 2.2.3.3 FILE_INFO
2113class FILE_INFO(NDRUNION):
2114    commonHdr = (
2115        ('tag', DWORD),
2116    )
2117
2118    union = {
2119        2: ('FileInfo2', LPFILE_INFO_2),
2120        3: ('FileInfo3', LPFILE_INFO_3),
2121    }
2122
2123# 2.2.3.6 SHARE_INFO
2124class SHARE_INFO(NDRUNION):
2125    commonHdr = (
2126        ('tag', DWORD),
2127    )
2128
2129    union = {
2130        0: ('ShareInfo0', LPSHARE_INFO_0),
2131        1: ('ShareInfo1', LPSHARE_INFO_1),
2132        2: ('ShareInfo2', LPSHARE_INFO_2),
2133        502: ('ShareInfo502', LPSHARE_INFO_502),
2134        1004: ('ShareInfo1004', LPSHARE_INFO_1004),
2135        1006: ('ShareInfo1006', LPSHARE_INFO_1006),
2136        1501: ('ShareInfo1501', LPSHARE_INFO_1501),
2137        1005: ('ShareInfo1005', LPSHARE_INFO_1005),
2138        501: ('ShareInfo501', LPSHARE_INFO_501),
2139        503: ('ShareInfo503', LPSHARE_INFO_503),
2140    }
2141
2142# 2.2.3.7 SERVER_INFO
2143class SERVER_INFO(NDRUNION):
2144    commonHdr = (
2145        ('tag', DWORD),
2146    )
2147
2148    union = {
2149        100: ('ServerInfo100', LPSERVER_INFO_100),
2150        101: ('ServerInfo101', LPSERVER_INFO_101),
2151        102: ('ServerInfo102', LPSERVER_INFO_102),
2152        103: ('ServerInfo103', LPSERVER_INFO_103),
2153        502: ('ServerInfo502', LPSERVER_INFO_502),
2154        503: ('ServerInfo503', LPSERVER_INFO_503),
2155        599: ('ServerInfo599', LPSERVER_INFO_599),
2156        1005: ('ServerInfo1005', LPSERVER_INFO_1005),
2157        1107: ('ServerInfo1107', LPSERVER_INFO_1107),
2158        1010: ('ServerInfo1010', LPSERVER_INFO_1010),
2159        1016: ('ServerInfo1016', LPSERVER_INFO_1016),
2160        1017: ('ServerInfo1017', LPSERVER_INFO_1017),
2161        1018: ('ServerInfo1018', LPSERVER_INFO_1018),
2162        1501: ('ServerInfo1501', LPSERVER_INFO_1501),
2163        1502: ('ServerInfo1502', LPSERVER_INFO_1502),
2164        1503: ('ServerInfo1503', LPSERVER_INFO_1503),
2165        1506: ('ServerInfo1506', LPSERVER_INFO_1506),
2166        1510: ('ServerInfo1510', LPSERVER_INFO_1510),
2167        1511: ('ServerInfo1511', LPSERVER_INFO_1511),
2168        1512: ('ServerInfo1512', LPSERVER_INFO_1512),
2169        1513: ('ServerInfo1513', LPSERVER_INFO_1513),
2170        1514: ('ServerInfo1514', LPSERVER_INFO_1514),
2171        1515: ('ServerInfo1515', LPSERVER_INFO_1515),
2172        1516: ('ServerInfo1516', LPSERVER_INFO_1516),
2173        1518: ('ServerInfo1518', LPSERVER_INFO_1518),
2174        1523: ('ServerInfo1523', LPSERVER_INFO_1523),
2175        1528: ('ServerInfo1528', LPSERVER_INFO_1528),
2176        1529: ('ServerInfo1529', LPSERVER_INFO_1529),
2177        1530: ('ServerInfo1530', LPSERVER_INFO_1530),
2178        1533: ('ServerInfo1533', LPSERVER_INFO_1533),
2179        1534: ('ServerInfo1534', LPSERVER_INFO_1534),
2180        1535: ('ServerInfo1535', LPSERVER_INFO_1535),
2181        1536: ('ServerInfo1536', LPSERVER_INFO_1536),
2182        1538: ('ServerInfo1538', LPSERVER_INFO_1538),
2183        1539: ('ServerInfo1539', LPSERVER_INFO_1539),
2184        1540: ('ServerInfo1540', LPSERVER_INFO_1540),
2185        1541: ('ServerInfo1541', LPSERVER_INFO_1541),
2186        1542: ('ServerInfo1542', LPSERVER_INFO_1542),
2187        1543: ('ServerInfo1543', LPSERVER_INFO_1543),
2188        1544: ('ServerInfo1544', LPSERVER_INFO_1544),
2189        1545: ('ServerInfo1545', LPSERVER_INFO_1545),
2190        1546: ('ServerInfo1546', LPSERVER_INFO_1546),
2191        1547: ('ServerInfo1547', LPSERVER_INFO_1547),
2192        1548: ('ServerInfo1548', LPSERVER_INFO_1548),
2193        1549: ('ServerInfo1549', LPSERVER_INFO_1549),
2194        1550: ('ServerInfo1550', LPSERVER_INFO_1550),
2195        1552: ('ServerInfo1552', LPSERVER_INFO_1552),
2196        1553: ('ServerInfo1553', LPSERVER_INFO_1553),
2197        1554: ('ServerInfo1554', LPSERVER_INFO_1554),
2198        1555: ('ServerInfo1555', LPSERVER_INFO_1555),
2199        1556: ('ServerInfo1556', LPSERVER_INFO_1556),
2200    }
2201
2202# 2.2.3.9 TRANSPORT_INFO
2203class TRANSPORT_INFO(NDRUNION):
2204    commonHdr = (
2205        ('tag', DWORD),
2206    )
2207
2208    union = {
2209        0: ('Transport0', SERVER_TRANSPORT_INFO_0),
2210        1: ('Transport1', SERVER_TRANSPORT_INFO_1),
2211        2: ('Transport2', SERVER_TRANSPORT_INFO_2),
2212        3: ('Transport3', SERVER_TRANSPORT_INFO_3),
2213    }
2214
2215# 2.2.3.10 SERVER_ALIAS_INFO
2216class SERVER_ALIAS_INFO(NDRUNION):
2217    commonHdr = (
2218        ('tag', DWORD),
2219    )
2220
2221    union = {
2222        0: ('ServerAliasInfo0', LPSERVER_ALIAS_INFO_0),
2223    }
2224
2225
2226################################################################################
2227# RPC CALLS
2228################################################################################
2229# 3.1.4.1 NetrConnectionEnum (Opnum 8)
2230class NetrConnectionEnum(NDRCALL):
2231    opnum = 8
2232    structure = (
2233       ('ServerName', PSRVSVC_HANDLE),
2234       ('Qualifier', LPWSTR),
2235       ('InfoStruct', CONNECT_ENUM_STRUCT),
2236       ('PreferedMaximumLength', DWORD),
2237       ('ResumeHandle', LPLONG),
2238    )
2239
2240class NetrConnectionEnumResponse(NDRCALL):
2241    structure = (
2242       ('InfoStruct',CONNECT_ENUM_STRUCT),
2243       ('TotalEntries',DWORD),
2244       ('ResumeHandle',LPLONG),
2245       ('ErrorCode',ULONG),
2246    )
2247
2248# 3.1.4.2 NetrFileEnum (Opnum 9)
2249class NetrFileEnum(NDRCALL):
2250    opnum = 9
2251    structure = (
2252       ('ServerName', PSRVSVC_HANDLE),
2253       ('BasePath', LPWSTR),
2254       ('UserName', LPWSTR),
2255       ('InfoStruct', FILE_ENUM_STRUCT),
2256       ('PreferedMaximumLength', DWORD),
2257       ('ResumeHandle', LPLONG),
2258    )
2259
2260class NetrFileEnumResponse(NDRCALL):
2261    structure = (
2262       ('InfoStruct',FILE_ENUM_STRUCT),
2263       ('TotalEntries',DWORD),
2264       ('ResumeHandle',LPLONG),
2265       ('ErrorCode',ULONG),
2266    )
2267
2268# 3.1.4.3 NetrFileGetInfo (Opnum 10)
2269class NetrFileGetInfo(NDRCALL):
2270    opnum = 10
2271    structure = (
2272       ('ServerName', PSRVSVC_HANDLE),
2273       ('FileId', DWORD),
2274       ('Level', DWORD),
2275    )
2276
2277class NetrFileGetInfoResponse(NDRCALL):
2278    structure = (
2279       ('InfoStruct',FILE_INFO),
2280       ('ErrorCode',ULONG),
2281    )
2282
2283# 3.1.4.4 NetrFileClose (Opnum 11)
2284class NetrFileClose(NDRCALL):
2285    opnum = 11
2286    structure = (
2287       ('ServerName', PSRVSVC_HANDLE),
2288       ('FileId', DWORD),
2289    )
2290
2291class NetrFileCloseResponse(NDRCALL):
2292    structure = (
2293       ('ErrorCode',ULONG),
2294    )
2295
2296# 3.1.4.5 NetrSessionEnum (Opnum 12)
2297class NetrSessionEnum(NDRCALL):
2298    opnum = 12
2299    structure = (
2300       ('ServerName', PSRVSVC_HANDLE),
2301       ('ClientName', LPWSTR),
2302       ('UserName', LPWSTR),
2303       ('InfoStruct', SESSION_ENUM_STRUCT),
2304       ('PreferedMaximumLength', DWORD),
2305       ('ResumeHandle', LPLONG),
2306    )
2307
2308class NetrSessionEnumResponse(NDRCALL):
2309    structure = (
2310       ('InfoStruct',SESSION_ENUM_STRUCT),
2311       ('TotalEntries',DWORD),
2312       ('ResumeHandle',LPLONG),
2313       ('ErrorCode',ULONG),
2314    )
2315
2316# 3.1.4.6 NetrSessionDel (Opnum 13)
2317class NetrSessionDel(NDRCALL):
2318    opnum = 13
2319    structure = (
2320       ('ServerName', PSRVSVC_HANDLE),
2321       ('ClientName', LPWSTR),
2322       ('UserName', LPWSTR),
2323    )
2324
2325class NetrSessionDelResponse(NDRCALL):
2326    structure = (
2327       ('ErrorCode',ULONG),
2328    )
2329
2330# 3.1.4.7 NetrShareAdd (Opnum 14)
2331class NetrShareAdd(NDRCALL):
2332    opnum = 14
2333    structure = (
2334       ('ServerName', PSRVSVC_HANDLE),
2335       ('Level', DWORD),
2336       ('InfoStruct', SHARE_INFO),
2337       ('ParmErr', LPLONG),
2338    )
2339
2340class NetrShareAddResponse(NDRCALL):
2341    structure = (
2342       ('ParmErr', LPLONG),
2343       ('ErrorCode',ULONG),
2344    )
2345
2346# 3.1.4.8 NetrShareEnum (Opnum 15)
2347class NetrShareEnum(NDRCALL):
2348    opnum = 15
2349    structure = (
2350       ('ServerName', PSRVSVC_HANDLE),
2351       ('InfoStruct', SHARE_ENUM_STRUCT),
2352       ('PreferedMaximumLength', DWORD),
2353       ('ResumeHandle', LPLONG),
2354    )
2355
2356class NetrShareEnumResponse(NDRCALL):
2357    structure = (
2358       ('InfoStruct', SHARE_ENUM_STRUCT),
2359       ('TotalEntries',DWORD),
2360       ('ResumeHandle',LPLONG),
2361       ('ErrorCode',ULONG),
2362    )
2363
2364# 3.1.4.9 NetrShareEnumSticky (Opnum 36)
2365class NetrShareEnumSticky(NDRCALL):
2366    opnum = 36
2367    structure = (
2368       ('ServerName', PSRVSVC_HANDLE),
2369       ('InfoStruct', SHARE_ENUM_STRUCT),
2370       ('PreferedMaximumLength', DWORD),
2371       ('ResumeHandle', LPLONG),
2372    )
2373
2374class NetrShareEnumStickyResponse(NDRCALL):
2375    structure = (
2376       ('InfoStruct', SHARE_ENUM_STRUCT),
2377       ('TotalEntries',DWORD),
2378       ('ResumeHandle',LPLONG),
2379       ('ErrorCode',ULONG),
2380    )
2381
2382# 3.1.4.10 NetrShareGetInfo (Opnum 16)
2383class NetrShareGetInfo(NDRCALL):
2384    opnum = 16
2385    structure = (
2386       ('ServerName', PSRVSVC_HANDLE),
2387       ('NetName', WSTR),
2388       ('Level', DWORD),
2389    )
2390
2391class NetrShareGetInfoResponse(NDRCALL):
2392    structure = (
2393       ('InfoStruct', SHARE_INFO),
2394       ('ErrorCode',ULONG),
2395    )
2396
2397# 3.1.4.11 NetrShareSetInfo (Opnum 17)
2398class NetrShareSetInfo(NDRCALL):
2399    opnum = 17
2400    structure = (
2401       ('ServerName', PSRVSVC_HANDLE),
2402       ('NetName', WSTR),
2403       ('Level', DWORD),
2404       ('ShareInfo', SHARE_INFO),
2405       ('ParmErr', LPLONG),
2406    )
2407
2408class NetrShareSetInfoResponse(NDRCALL):
2409    structure = (
2410       ('ParmErr', LPLONG),
2411       ('ErrorCode',ULONG),
2412    )
2413
2414# 3.1.4.12 NetrShareDel (Opnum 18)
2415class NetrShareDel(NDRCALL):
2416    opnum = 18
2417    structure = (
2418       ('ServerName', PSRVSVC_HANDLE),
2419       ('NetName', WSTR),
2420       ('Reserved', DWORD),
2421    )
2422
2423class NetrShareDelResponse(NDRCALL):
2424    structure = (
2425       ('ErrorCode',ULONG),
2426    )
2427
2428# 3.1.4.13 NetrShareDelSticky (Opnum 19)
2429class NetrShareDelSticky(NDRCALL):
2430    opnum = 19
2431    structure = (
2432       ('ServerName', PSRVSVC_HANDLE),
2433       ('NetName', WSTR),
2434       ('Reserved', DWORD),
2435    )
2436
2437class NetrShareDelStickyResponse(NDRCALL):
2438    structure = (
2439       ('ErrorCode',ULONG),
2440    )
2441
2442# 3.1.4.14 NetrShareDelStart (Opnum 37)
2443class NetrShareDelStart(NDRCALL):
2444    opnum = 37
2445    structure = (
2446       ('ServerName', PSRVSVC_HANDLE),
2447       ('NetName', WSTR),
2448       ('Reserved', DWORD),
2449    )
2450
2451class NetrShareDelStartResponse(NDRCALL):
2452    structure = (
2453       ('ContextHandle',SHARE_DEL_HANDLE),
2454       ('ErrorCode',ULONG),
2455    )
2456
2457# 3.1.4.15 NetrShareDelCommit (Opnum 38)
2458class NetrShareDelCommit(NDRCALL):
2459    opnum = 38
2460    structure = (
2461       ('ContextHandle',SHARE_DEL_HANDLE),
2462    )
2463
2464class NetrShareDelCommitResponse(NDRCALL):
2465    structure = (
2466       ('ErrorCode',ULONG),
2467    )
2468
2469# 3.1.4.16 NetrShareCheck (Opnum 20)
2470class NetrShareCheck(NDRCALL):
2471    opnum = 20
2472    structure = (
2473       ('ServerName', PSRVSVC_HANDLE),
2474       ('Device', WSTR),
2475    )
2476
2477class NetrShareCheckResponse(NDRCALL):
2478    structure = (
2479       ('Type',DWORD),
2480       ('ErrorCode',ULONG),
2481    )
2482
2483# 3.1.4.17 NetrServerGetInfo (Opnum 21)
2484class NetrServerGetInfo(NDRCALL):
2485    opnum = 21
2486    structure = (
2487       ('ServerName', PSRVSVC_HANDLE),
2488       ('Level', DWORD),
2489    )
2490
2491class NetrServerGetInfoResponse(NDRCALL):
2492    structure = (
2493       ('InfoStruct', SERVER_INFO),
2494       ('ErrorCode',ULONG),
2495    )
2496
2497# 3.1.4.18 NetrServerSetInfo (Opnum 22)
2498class NetrServerSetInfo(NDRCALL):
2499    opnum = 22
2500    structure = (
2501       ('ServerName', PSRVSVC_HANDLE),
2502       ('Level', DWORD),
2503       ('InfoStruct', SERVER_INFO),
2504    )
2505
2506class NetrServerSetInfoResponse(NDRCALL):
2507    structure = (
2508       ('ParmErr', LPLONG),
2509       ('ErrorCode',ULONG),
2510    )
2511
2512# 3.1.4.19 NetrServerDiskEnum (Opnum 23)
2513class NetrServerDiskEnum(NDRCALL):
2514    opnum = 23
2515    structure = (
2516       ('ServerName', PSRVSVC_HANDLE),
2517       ('Level', DWORD),
2518       ('DiskInfoStruct', DISK_ENUM_CONTAINER),
2519       ('PreferedMaximumLength', DWORD),
2520       ('ResumeHandle', LPLONG),
2521    )
2522
2523class NetrServerDiskEnumResponse(NDRCALL):
2524    structure = (
2525       ('DiskInfoStruct', DISK_ENUM_CONTAINER),
2526       ('TotalEntries', DWORD),
2527       ('ResumeHandle', LPLONG),
2528       ('ErrorCode',ULONG),
2529    )
2530
2531# 3.1.4.20 NetrServerStatisticsGet (Opnum 24)
2532class NetrServerStatisticsGet(NDRCALL):
2533    opnum = 24
2534    structure = (
2535       ('ServerName', PSRVSVC_HANDLE),
2536       ('Service', LPWSTR),
2537       ('Level', DWORD),
2538       ('Options', DWORD),
2539    )
2540
2541class NetrServerStatisticsGetResponse(NDRCALL):
2542    structure = (
2543       ('InfoStruct', LPSTAT_SERVER_0),
2544       ('ErrorCode',ULONG),
2545    )
2546
2547# 3.1.4.21 NetrRemoteTOD (Opnum 28)
2548class NetrRemoteTOD(NDRCALL):
2549    opnum = 28
2550    structure = (
2551       ('ServerName', PSRVSVC_HANDLE),
2552    )
2553
2554class NetrRemoteTODResponse(NDRCALL):
2555    structure = (
2556       ('BufferPtr', LPTIME_OF_DAY_INFO),
2557       ('ErrorCode',ULONG),
2558    )
2559
2560# 3.1.4.22 NetrServerTransportAdd (Opnum 25)
2561class NetrServerTransportAdd(NDRCALL):
2562    opnum = 25
2563    structure = (
2564       ('ServerName', PSRVSVC_HANDLE),
2565       ('Level', DWORD),
2566       ('Buffer', SERVER_TRANSPORT_INFO_0),
2567    )
2568
2569class NetrServerTransportAddResponse(NDRCALL):
2570    structure = (
2571       ('ErrorCode',ULONG),
2572    )
2573
2574# 3.1.4.23 NetrServerTransportAddEx (Opnum 41)
2575class NetrServerTransportAddEx(NDRCALL):
2576    opnum = 41
2577    structure = (
2578       ('ServerName', PSRVSVC_HANDLE),
2579       ('Level', DWORD),
2580       ('Buffer', TRANSPORT_INFO),
2581    )
2582
2583class NetrServerTransportAddExResponse(NDRCALL):
2584    structure = (
2585       ('ErrorCode',ULONG),
2586    )
2587
2588# 3.1.4.24 NetrServerTransportEnum (Opnum 26)
2589class NetrServerTransportEnum(NDRCALL):
2590    opnum = 26
2591    structure = (
2592       ('ServerName', PSRVSVC_HANDLE),
2593       ('InfoStruct', SERVER_XPORT_ENUM_STRUCT),
2594       ('PreferedMaximumLength', DWORD),
2595       ('ResumeHandle', LPLONG),
2596    )
2597
2598class NetrServerTransportEnumResponse(NDRCALL):
2599    structure = (
2600       ('InfoStruct', SERVER_XPORT_ENUM_STRUCT),
2601       ('TotalEntries', DWORD),
2602       ('ResumeHandle', LPLONG),
2603       ('ErrorCode',ULONG),
2604    )
2605
2606# 3.1.4.25 NetrServerTransportDel (Opnum 27)
2607class NetrServerTransportDel(NDRCALL):
2608    opnum = 27
2609    structure = (
2610       ('ServerName', PSRVSVC_HANDLE),
2611       ('Level', DWORD),
2612       ('Buffer', SERVER_TRANSPORT_INFO_0),
2613    )
2614
2615class NetrServerTransportDelResponse(NDRCALL):
2616    structure = (
2617       ('ErrorCode',ULONG),
2618    )
2619
2620# 3.1.4.26 NetrServerTransportDelEx (Opnum 53)
2621class NetrServerTransportDelEx(NDRCALL):
2622    opnum = 53
2623    structure = (
2624       ('ServerName', PSRVSVC_HANDLE),
2625       ('Level', DWORD),
2626       ('Buffer', TRANSPORT_INFO),
2627    )
2628
2629class NetrServerTransportDelExResponse(NDRCALL):
2630    structure = (
2631       ('ErrorCode',ULONG),
2632    )
2633
2634# 3.1.4.27 NetrpGetFileSecurity (Opnum 39)
2635class NetrpGetFileSecurity(NDRCALL):
2636    opnum = 39
2637    structure = (
2638       ('ServerName', PSRVSVC_HANDLE),
2639       ('ShareName', LPWSTR),
2640       ('lpFileName', WSTR),
2641       ('RequestedInformation', SECURITY_INFORMATION),
2642    )
2643
2644class NetrpGetFileSecurityResponse(NDRCALL):
2645    structure = (
2646       ('SecurityDescriptor', PADT_SECURITY_DESCRIPTOR),
2647       ('ErrorCode',ULONG),
2648    )
2649
2650# 3.1.4.28 NetrpSetFileSecurity (Opnum 40)
2651class NetrpSetFileSecurity(NDRCALL):
2652    opnum = 40
2653    structure = (
2654       ('ServerName', PSRVSVC_HANDLE),
2655       ('ShareName', LPWSTR),
2656       ('lpFileName', WSTR),
2657       ('SecurityInformation', SECURITY_INFORMATION),
2658       ('SecurityDescriptor', ADT_SECURITY_DESCRIPTOR),
2659    )
2660
2661class NetrpSetFileSecurityResponse(NDRCALL):
2662    structure = (
2663       ('ErrorCode',ULONG),
2664    )
2665
2666# 3.1.4.29 NetprPathType (Opnum 30)
2667class NetprPathType(NDRCALL):
2668    opnum = 30
2669    structure = (
2670       ('ServerName', PSRVSVC_HANDLE),
2671       ('PathName', WSTR),
2672       ('Flags', DWORD),
2673    )
2674
2675class NetprPathTypeResponse(NDRCALL):
2676    structure = (
2677       ('PathType', DWORD),
2678       ('ErrorCode',ULONG),
2679    )
2680
2681# 3.1.4.30 NetprPathCanonicalize (Opnum 31)
2682class NetprPathCanonicalize(NDRCALL):
2683    opnum = 31
2684    structure = (
2685       ('ServerName', PSRVSVC_HANDLE),
2686       ('PathName', WSTR),
2687       ('OutbufLen', DWORD),
2688       ('Prefix', WSTR),
2689       ('PathType', DWORD),
2690       ('Flags', DWORD),
2691    )
2692
2693class NetprPathCanonicalizeResponse(NDRCALL):
2694    structure = (
2695       ('Outbuf', NDRUniConformantArray),
2696       ('PathType', DWORD),
2697       ('ErrorCode',ULONG),
2698    )
2699
2700# 3.1.4.31 NetprPathCompare (Opnum 32)
2701class NetprPathCompare(NDRCALL):
2702    opnum = 32
2703    structure = (
2704       ('ServerName', PSRVSVC_HANDLE),
2705       ('PathName1', WSTR),
2706       ('PathName2', WSTR),
2707       ('PathType', DWORD),
2708       ('Flags', DWORD),
2709    )
2710
2711class NetprPathCompareResponse(NDRCALL):
2712    structure = (
2713       ('ErrorCode',ULONG),
2714    )
2715
2716# 3.1.4.32 NetprNameValidate (Opnum 33)
2717class NetprNameValidate(NDRCALL):
2718    opnum = 33
2719    structure = (
2720       ('ServerName', PSRVSVC_HANDLE),
2721       ('Name', WSTR),
2722       ('NameType', DWORD),
2723       ('Flags', DWORD),
2724    )
2725
2726class NetprNameValidateResponse(NDRCALL):
2727    structure = (
2728       ('ErrorCode',ULONG),
2729    )
2730
2731# 3.1.4.33 NetprNameCanonicalize (Opnum 34)
2732class NetprNameCanonicalize(NDRCALL):
2733    opnum = 34
2734    structure = (
2735       ('ServerName', PSRVSVC_HANDLE),
2736       ('Name', WSTR),
2737       ('OutbufLen', DWORD),
2738       ('NameType', DWORD),
2739       ('Flags', DWORD),
2740    )
2741
2742class NetprNameCanonicalizeResponse(NDRCALL):
2743    structure = (
2744       ('Outbuf', NDRUniConformantArray),
2745       ('NameType', DWORD),
2746       ('ErrorCode',ULONG),
2747    )
2748
2749# 3.1.4.34 NetprNameCompare (Opnum 35)
2750class NetprNameCompare(NDRCALL):
2751    opnum = 35
2752    structure = (
2753       ('ServerName', PSRVSVC_HANDLE),
2754       ('Name1', WSTR),
2755       ('Name2', WSTR),
2756       ('NameType', DWORD),
2757       ('Flags', DWORD),
2758    )
2759
2760class NetprNameCompareResponse(NDRCALL):
2761    structure = (
2762       ('ErrorCode',ULONG),
2763    )
2764
2765# 3.1.4.35 NetrDfsGetVersion (Opnum 43)
2766class NetrDfsGetVersion(NDRCALL):
2767    opnum = 43
2768    structure = (
2769       ('ServerName', PSRVSVC_HANDLE),
2770    )
2771
2772class NetrDfsGetVersionResponse(NDRCALL):
2773    structure = (
2774       ('Version', DWORD),
2775       ('ErrorCode',ULONG),
2776    )
2777
2778# 3.1.4.36 NetrDfsCreateLocalPartition (Opnum 44)
2779class NetrDfsCreateLocalPartition(NDRCALL):
2780    opnum = 44
2781    structure = (
2782       ('ServerName', PSRVSVC_HANDLE),
2783       ('ShareName', WSTR),
2784       ('EntryUid', GUID),
2785       ('EntryPrefix', WSTR),
2786       ('ShortName', WSTR),
2787       ('RelationInfo', NET_DFS_ENTRY_ID_CONTAINER),
2788       ('Force', DWORD),
2789    )
2790
2791class NetrDfsCreateLocalPartitionResponse(NDRCALL):
2792    structure = (
2793       ('ErrorCode',ULONG),
2794    )
2795
2796# 3.1.4.37 NetrDfsDeleteLocalPartition (Opnum 45)
2797class NetrDfsDeleteLocalPartition(NDRCALL):
2798    opnum = 45
2799    structure = (
2800       ('ServerName', PSRVSVC_HANDLE),
2801       ('Uid', GUID),
2802       ('Prefix', WSTR),
2803    )
2804
2805class NetrDfsDeleteLocalPartitionResponse(NDRCALL):
2806    structure = (
2807       ('ErrorCode',ULONG),
2808    )
2809
2810# 3.1.4.38 NetrDfsSetLocalVolumeState (Opnum 46)
2811class NetrDfsSetLocalVolumeState(NDRCALL):
2812    opnum = 46
2813    structure = (
2814       ('ServerName', PSRVSVC_HANDLE),
2815       ('Uid', GUID),
2816       ('Prefix', WSTR),
2817       ('State', DWORD),
2818    )
2819
2820class NetrDfsSetLocalVolumeStateResponse(NDRCALL):
2821    structure = (
2822       ('ErrorCode',ULONG),
2823    )
2824
2825# 3.1.4.39 NetrDfsCreateExitPoint (Opnum 48)
2826class NetrDfsCreateExitPoint(NDRCALL):
2827    opnum = 48
2828    structure = (
2829       ('ServerName', PSRVSVC_HANDLE),
2830       ('Uid', GUID),
2831       ('Prefix', WSTR),
2832       ('Type', DWORD),
2833       ('ShortPrefixLen', DWORD),
2834    )
2835
2836class NetrDfsCreateExitPointResponse(NDRCALL):
2837    structure = (
2838       ('ShortPrefix',WCHAR_ARRAY),
2839       ('ErrorCode',ULONG),
2840    )
2841
2842# 3.1.4.40 NetrDfsModifyPrefix (Opnum 50)
2843class NetrDfsModifyPrefix(NDRCALL):
2844    opnum = 50
2845    structure = (
2846       ('ServerName', PSRVSVC_HANDLE),
2847       ('Uid', GUID),
2848       ('Prefix', WSTR),
2849    )
2850
2851class NetrDfsModifyPrefixResponse(NDRCALL):
2852    structure = (
2853       ('ErrorCode',ULONG),
2854    )
2855
2856# 3.1.4.41 NetrDfsDeleteExitPoint (Opnum 49)
2857class NetrDfsDeleteExitPoint(NDRCALL):
2858    opnum = 49
2859    structure = (
2860       ('ServerName', PSRVSVC_HANDLE),
2861       ('Uid', GUID),
2862       ('Prefix', WSTR),
2863       ('Type', DWORD),
2864    )
2865
2866class NetrDfsDeleteExitPointResponse(NDRCALL):
2867    structure = (
2868       ('ErrorCode',ULONG),
2869    )
2870
2871# 3.1.4.42 NetrDfsFixLocalVolume (Opnum 51)
2872class NetrDfsFixLocalVolume(NDRCALL):
2873    opnum = 51
2874    structure = (
2875       ('ServerName', PSRVSVC_HANDLE),
2876       ('VolumeName', WSTR),
2877       ('EntryType', DWORD),
2878       ('ServiceType', DWORD),
2879       ('StgId', WSTR),
2880       ('EntryUid', GUID),
2881       ('EntryPrefix', WSTR),
2882       ('RelationInfo', NET_DFS_ENTRY_ID_CONTAINER),
2883       ('CreateDisposition', DWORD),
2884    )
2885
2886class NetrDfsFixLocalVolumeResponse(NDRCALL):
2887    structure = (
2888       ('ErrorCode',ULONG),
2889    )
2890
2891# 3.1.4.43 NetrDfsManagerReportSiteInfo (Opnum 52)
2892class NetrDfsManagerReportSiteInfo(NDRCALL):
2893    opnum = 52
2894    structure = (
2895       ('ServerName', PSRVSVC_HANDLE),
2896       ('ppSiteInfo', LPDFS_SITELIST_INFO),
2897    )
2898
2899class NetrDfsManagerReportSiteInfoResponse(NDRCALL):
2900    structure = (
2901       ('ppSiteInfo', LPDFS_SITELIST_INFO),
2902       ('ErrorCode',ULONG),
2903    )
2904
2905# 3.1.4.44 NetrServerAliasAdd (Opnum 54)
2906class NetrServerAliasAdd(NDRCALL):
2907    opnum = 54
2908    structure = (
2909       ('ServerName', PSRVSVC_HANDLE),
2910       ('Level', DWORD),
2911       ('InfoStruct', SERVER_ALIAS_INFO),
2912    )
2913
2914class NetrServerAliasAddResponse(NDRCALL):
2915    structure = (
2916       ('ErrorCode',ULONG),
2917    )
2918
2919# 3.1.4.45 NetrServerAliasEnum (Opnum 55)
2920class NetrServerAliasEnum(NDRCALL):
2921    opnum = 55
2922    structure = (
2923       ('ServerName', PSRVSVC_HANDLE),
2924       ('InfoStruct', SERVER_ALIAS_ENUM_STRUCT),
2925       ('PreferedMaximumLength', DWORD),
2926       ('ResumeHandle', LPLONG),
2927    )
2928
2929class NetrServerAliasEnumResponse(NDRCALL):
2930    structure = (
2931       ('InfoStruct',SERVER_ALIAS_ENUM_STRUCT),
2932       ('TotalEntries',DWORD),
2933       ('ResumeHandle',LPLONG),
2934       ('ErrorCode',ULONG),
2935    )
2936
2937# 3.1.4.46 NetrServerAliasDel (Opnum 56)
2938class NetrServerAliasDel(NDRCALL):
2939    opnum = 56
2940    structure = (
2941       ('ServerName', PSRVSVC_HANDLE),
2942       ('Level', DWORD),
2943       ('InfoStruct', SERVER_ALIAS_INFO),
2944    )
2945
2946class NetrServerAliasDelResponse(NDRCALL):
2947    structure = (
2948       ('ErrorCode',ULONG),
2949    )
2950
2951# 3.1.4.47 NetrShareDelEx (Opnum 57)
2952class NetrShareDelEx(NDRCALL):
2953    opnum = 57
2954    structure = (
2955       ('ServerName', PSRVSVC_HANDLE),
2956       ('Level', DWORD),
2957       ('ShareInfo', SHARE_INFO),
2958    )
2959
2960class NetrShareDelExResponse(NDRCALL):
2961    structure = (
2962       ('ErrorCode',ULONG),
2963    )
2964
2965################################################################################
2966# OPNUMs and their corresponding structures
2967################################################################################
2968OPNUMS = {
2969 8 : (NetrConnectionEnum, NetrConnectionEnumResponse),
2970 9 : (NetrFileEnum, NetrFileEnumResponse),
297110 : (NetrFileGetInfo, NetrFileGetInfoResponse),
297211 : (NetrFileClose, NetrFileCloseResponse),
297312 : (NetrSessionEnum, NetrSessionEnumResponse),
297413 : (NetrSessionDel, NetrSessionDelResponse),
297514 : (NetrShareAdd, NetrShareAddResponse),
297615 : (NetrShareEnum, NetrShareEnumResponse),
297716 : (NetrShareGetInfo, NetrShareGetInfoResponse),
297817 : (NetrShareSetInfo, NetrShareSetInfoResponse),
297918 : (NetrShareDel, NetrShareDelResponse),
298019 : (NetrShareDelSticky, NetrShareDelStickyResponse),
298120 : (NetrShareCheck, NetrShareCheckResponse),
298221 : (NetrServerGetInfo, NetrServerGetInfoResponse),
298322 : (NetrServerSetInfo, NetrServerSetInfoResponse),
298423 : (NetrServerDiskEnum, NetrServerDiskEnumResponse),
298524 : (NetrServerStatisticsGet, NetrServerStatisticsGetResponse),
298625 : (NetrServerTransportAdd, NetrServerTransportAddResponse),
298726 : (NetrServerTransportEnum, NetrServerTransportEnumResponse),
298827 : (NetrServerTransportDel, NetrServerTransportDelResponse),
298928 : (NetrRemoteTOD, NetrRemoteTODResponse),
299030 : (NetprPathType, NetprPathTypeResponse),
299131 : (NetprPathCanonicalize, NetprPathCanonicalizeResponse),
299232 : (NetprPathCompare, NetprPathCompareResponse),
299333 : (NetprNameValidate, NetprNameValidateResponse),
299434 : (NetprNameCanonicalize, NetprNameCanonicalizeResponse),
299535 : (NetprNameCompare, NetprNameCompareResponse),
299636 : (NetrShareEnumSticky, NetrShareEnumStickyResponse),
299737 : (NetrShareDelStart, NetrShareDelStartResponse),
299838 : (NetrShareDelCommit, NetrShareDelCommitResponse),
299939 : (NetrpGetFileSecurity, NetrpGetFileSecurityResponse),
300040 : (NetrpSetFileSecurity, NetrpSetFileSecurityResponse),
300141 : (NetrServerTransportAddEx, NetrServerTransportAddExResponse),
300243 : (NetrDfsGetVersion, NetrDfsGetVersionResponse),
300344 : (NetrDfsCreateLocalPartition, NetrDfsCreateLocalPartitionResponse),
300445 : (NetrDfsDeleteLocalPartition, NetrDfsDeleteLocalPartitionResponse),
300546 : (NetrDfsSetLocalVolumeState, NetrDfsSetLocalVolumeStateResponse),
300648 : (NetrDfsCreateExitPoint, NetrDfsCreateExitPointResponse),
300749 : (NetrDfsDeleteExitPoint, NetrDfsDeleteExitPointResponse),
300850 : (NetrDfsModifyPrefix, NetrDfsModifyPrefixResponse),
300951 : (NetrDfsFixLocalVolume, NetrDfsFixLocalVolumeResponse),
301052 : (NetrDfsManagerReportSiteInfo, NetrDfsManagerReportSiteInfoResponse),
301153 : (NetrServerTransportDelEx, NetrServerTransportDelExResponse),
301254 : (NetrServerAliasAdd, NetrServerAliasAddResponse),
301355 : (NetrServerAliasEnum, NetrServerAliasEnumResponse),
301456 : (NetrServerAliasDel, NetrServerAliasDelResponse),
301557 : (NetrShareDelEx, NetrShareDelExResponse),
3016}
3017
3018################################################################################
3019# HELPER FUNCTIONS
3020################################################################################
3021def hNetrConnectionEnum(dce, qualifier, level, resumeHandle = 0, preferedMaximumLength = 0xffffffff):
3022    request = NetrConnectionEnum()
3023    request['ServerName'] = NULL
3024    request['Qualifier'] = qualifier
3025    request['InfoStruct']['Level'] = level
3026    request['InfoStruct']['ConnectInfo']['tag'] = level
3027    request['PreferedMaximumLength'] = preferedMaximumLength
3028    request['ResumeHandle'] = resumeHandle
3029    return dce.request(request)
3030
3031def hNetrFileEnum(dce, basePath, userName, level, resumeHandle = 0, preferedMaximumLength = 0xffffffff):
3032    request = NetrFileEnum()
3033    request['ServerName'] = NULL
3034    request['BasePath'] = basePath
3035    request['UserName'] = userName
3036    request['InfoStruct']['Level'] = level
3037    request['InfoStruct']['FileInfo']['tag'] = level
3038    request['PreferedMaximumLength'] = preferedMaximumLength
3039    request['ResumeHandle'] = resumeHandle
3040    return dce.request(request)
3041
3042def hNetrFileGetInfo(dce, fileId, level):
3043    request = NetrFileGetInfo()
3044    request['ServerName'] = NULL
3045    request['FileId'] = fileId
3046    request['Level'] = level
3047    return dce.request(request)
3048
3049def hNetrFileClose(dce, fileId):
3050    request = NetrFileClose()
3051    request['ServerName'] = NULL
3052    request['FileId'] = fileId
3053    return dce.request(request)
3054
3055def hNetrSessionEnum(dce, clientName, userName, level, resumeHandle = 0, preferedMaximumLength = 0xffffffff):
3056    request = NetrSessionEnum()
3057    request['ServerName'] = NULL
3058    request['ClientName'] = clientName
3059    request['UserName'] = userName
3060    request['InfoStruct']['Level'] = level
3061    request['InfoStruct']['SessionInfo']['tag'] = level
3062    request['InfoStruct']['SessionInfo']['Level%d'%level]['Buffer'] = NULL
3063    request['PreferedMaximumLength'] = preferedMaximumLength
3064    request['ResumeHandle'] = resumeHandle
3065
3066    return dce.request(request)
3067
3068def hNetrSessionDel(dce, clientName, userName):
3069    request = NetrSessionDel()
3070    request['ServerName'] = NULL
3071    request['ClientName'] = clientName
3072    request['UserName'] = userName
3073    return dce.request(request)
3074
3075def hNetrShareAdd(dce, level, infoStruct):
3076    request = NetrShareAdd()
3077    request['ServerName'] = NULL
3078    request['Level'] = level
3079    request['InfoStruct']['tag'] = level
3080    request['InfoStruct']['ShareInfo%d'%level] = infoStruct
3081    return dce.request(request)
3082
3083def hNetrShareDel(dce, netName):
3084    request = NetrShareDel()
3085    request['ServerName'] = NULL
3086    request['NetName'] = netName
3087    return dce.request(request)
3088
3089def hNetrShareEnum(dce, level, resumeHandle = 0, preferedMaximumLength = 0xffffffff):
3090    request = NetrShareEnum()
3091    request['ServerName'] = '\x00'
3092    request['PreferedMaximumLength'] = preferedMaximumLength
3093    request['ResumeHandle'] = resumeHandle
3094    request['InfoStruct']['Level'] = level
3095    request['InfoStruct']['ShareInfo']['tag'] = level
3096    request['InfoStruct']['ShareInfo']['Level%d'%level]['Buffer'] = NULL
3097
3098    return dce.request(request)
3099
3100def hNetrShareEnumSticky(dce, level, resumeHandle = 0, preferedMaximumLength = 0xffffffff):
3101    request = NetrShareEnumSticky()
3102    request['ServerName'] = NULL
3103    request['PreferedMaximumLength'] = preferedMaximumLength
3104    request['ResumeHandle'] = resumeHandle
3105    request['InfoStruct']['Level'] = level
3106    request['InfoStruct']['ShareInfo']['tag'] = level
3107    request['InfoStruct']['ShareInfo']['Level%d'%level]['Buffer'] = NULL
3108
3109    return dce.request(request)
3110
3111def hNetrShareGetInfo(dce, netName, level):
3112    request = NetrShareGetInfo()
3113    request['ServerName'] = NULL
3114    request['NetName'] = netName
3115    request['Level'] = level
3116    return dce.request(request)
3117
3118def hNetrShareSetInfo(dce, netName, level, shareInfo):
3119    request = NetrShareSetInfo()
3120    request['ServerName'] = NULL
3121    request['NetName'] = netName
3122    request['Level'] = level
3123    request['ShareInfo']['tag'] = level
3124    request['ShareInfo']['ShareInfo%d'%level] = shareInfo
3125
3126    return dce.request(request)
3127
3128def hNetrShareDelSticky(dce, netName):
3129    request = NetrShareDelSticky()
3130    request['ServerName'] = NULL
3131    request['NetName'] = netName
3132    return dce.request(request)
3133
3134# Sacala la h a estos 2, y tira todos los test cases juntos
3135def hNetrShareDelStart(dce, netName):
3136    request = NetrShareDelStart()
3137    request['ServerName'] = NULL
3138    request['NetName'] = netName
3139    return dce.request(request)
3140
3141def hNetrShareDelCommit(dce, contextHandle):
3142    request = NetrShareDelCommit()
3143    request['ContextHandle'] = contextHandle
3144    return dce.request(request)
3145
3146def hNetrShareCheck(dce, device):
3147    request = NetrShareCheck()
3148    request['ServerName'] = NULL
3149    request['Device'] = device
3150    return dce.request(request)
3151
3152def hNetrServerGetInfo(dce, level):
3153    request = NetrServerGetInfo()
3154    request['ServerName'] = NULL
3155    request['Level'] = level
3156    return dce.request(request)
3157
3158def hNetrServerDiskEnum(dce, level, resumeHandle = 0, preferedMaximumLength = 0xffffffff):
3159    request = NetrServerDiskEnum()
3160    request['ServerName'] = NULL
3161    request['PreferedMaximumLength'] = preferedMaximumLength
3162    request['ResumeHandle'] = resumeHandle
3163    request['Level'] = level
3164    request['DiskInfoStruct']['Buffer'] = NULL
3165    return dce.request(request)
3166
3167def hNetrServerStatisticsGet(dce, service, level, options):
3168    request = NetrServerStatisticsGet()
3169    request['ServerName'] = NULL
3170    request['Service'] = service
3171    request['Level'] = level
3172    request['Options'] = options
3173    return dce.request(request)
3174
3175def hNetrRemoteTOD(dce):
3176    request = NetrRemoteTOD()
3177    request['ServerName'] = NULL
3178    return dce.request(request)
3179
3180def hNetrServerTransportEnum(dce, level, resumeHandle = 0, preferedMaximumLength = 0xffffffff):
3181    request = NetrServerTransportEnum()
3182    request['ServerName'] = NULL
3183    request['PreferedMaximumLength'] = preferedMaximumLength
3184    request['ResumeHandle'] = resumeHandle
3185    request['InfoStruct']['Level'] = level
3186    request['InfoStruct']['XportInfo']['tag'] = level
3187    request['InfoStruct']['XportInfo']['Level%d' % level]['Buffer'] = NULL
3188    return dce.request(request)
3189
3190def hNetrpGetFileSecurity(dce, shareName, lpFileName, requestedInformation):
3191    request = NetrpGetFileSecurity()
3192    request['ServerName'] = NULL
3193    request['ShareName'] = shareName
3194    request['lpFileName'] = lpFileName
3195    request['RequestedInformation'] = requestedInformation
3196    retVal = dce.request(request)
3197    return ''.join(retVal['SecurityDescriptor']['Buffer'])
3198
3199def hNetrpSetFileSecurity(dce, shareName, lpFileName, securityInformation, securityDescriptor):
3200    request = NetrpSetFileSecurity()
3201    request['ServerName'] = NULL
3202    request['ShareName'] = shareName
3203    request['lpFileName'] = lpFileName
3204    request['SecurityInformation'] = securityInformation
3205    request['SecurityDescriptor']['Length'] = len(securityDescriptor)
3206    request['SecurityDescriptor']['Buffer'] = list(securityDescriptor)
3207    return dce.request(request)
3208
3209def hNetprPathType(dce, pathName, flags):
3210    request = NetprPathType()
3211    request['ServerName'] = NULL
3212    request['PathName'] = pathName
3213    request['Flags'] = flags
3214    return dce.request(request)
3215
3216def hNetprPathCanonicalize(dce, pathName, prefix, outbufLen=50, pathType=0, flags=0):
3217    request = NetprPathCanonicalize()
3218    request['ServerName'] = NULL
3219    request['PathName'] = pathName
3220    request['OutbufLen'] = outbufLen
3221    request['Prefix'] = prefix
3222    request['PathType'] = pathType
3223    request['Flags'] = flags
3224    return dce.request(request)
3225
3226def hNetprPathCompare(dce, pathName1, pathName2, pathType=0, flags=0):
3227    request = NetprPathCompare()
3228    request['ServerName'] = NULL
3229    request['PathName1'] = pathName1
3230    request['PathName2'] = pathName2
3231    request['PathType'] = pathType
3232    request['Flags'] = flags
3233    return dce.request(request)
3234
3235def hNetprNameValidate(dce, name, nameType, flags=0):
3236    request = NetprNameValidate()
3237    request['ServerName'] = NULL
3238    request['Name'] = name
3239    request['NameType'] = nameType
3240    request['Flags'] = flags
3241    return dce.request(request)
3242
3243def hNetprNameCanonicalize(dce, name, outbufLen=50, nameType=0, flags=0):
3244    request = NetprNameCanonicalize()
3245    request['ServerName'] = NULL
3246    request['Name'] = name
3247    request['OutbufLen'] = outbufLen
3248    request['NameType'] = nameType
3249    request['Flags'] = flags
3250    return dce.request(request)
3251
3252def hNetprNameCompare(dce, name1, name2, nameType=0, flags=0):
3253    request = NetprNameCompare()
3254    request['ServerName'] = NULL
3255    request['Name1'] = name1
3256    request['Name2'] = name2
3257    request['NameType'] = nameType
3258    request['Flags'] = flags
3259    return dce.request(request)
3260
3261def hNetrDfsGetVersion(dce):
3262    request = NetrDfsGetVersion()
3263    request['ServerName'] = NULL
3264    return dce.request(request)
3265
3266def hNetrServerAliasAdd(dce, level, aliasInfo):
3267    request = NetrServerAliasAdd()
3268    request['ServerName'] = NULL
3269    request['Level'] = level
3270    request['InfoStruct']['tag'] = level
3271    request['InfoStruct']['ServerAliasInfo%d'%level] = aliasInfo
3272    return dce.request(request)
3273
3274def hNetrServerAliasDel(dce, level, aliasInfo):
3275    request = NetrServerAliasDel()
3276    request['ServerName'] = NULL
3277    request['Level'] = level
3278    request['InfoStruct']['tag'] = level
3279    request['InfoStruct']['ServerAliasInfo%d'%level] = aliasInfo
3280    return dce.request(request)
3281
3282def hNetrServerAliasEnum(dce, level, resumeHandle = 0, preferedMaximumLength = 0xffffffff):
3283    request = NetrServerAliasEnum()
3284    request['ServerName'] = NULL
3285    request['InfoStruct']['Level'] = level
3286    request['InfoStruct']['ServerAliasInfo']['tag'] = level
3287    request['InfoStruct']['ServerAliasInfo']['Level%d' % level]['Buffer'] = NULL
3288    request['PreferedMaximumLength'] = preferedMaximumLength
3289    request['ResumeHandle'] = resumeHandle
3290    return dce.request(request)
3291
3292