1# SPDX-License-Identifier: GPL-2.0-only
2# This file is part of Scapy RPC
3# See https://scapy.net/ for more information
4# Copyright (C) Gabriel Potter
5
6# ms-wkst.idl compiled on 06/07/2025
7# This file is a stripped version ! Use scapy-rpc for the full.
8"""
9RPC definitions for the following interfaces:
10- wkssvc (v1.0): 6BFFD098-A112-3610-9833-46C3F87E345A
11This file is auto-generated by midl-to-scapy, do not modify.
12"""
13
14from enum import IntEnum
15import uuid
16
17from scapy.fields import StrFixedLenField
18from scapy.layers.dcerpc import (
19 NDRPacket,
20 DceRpcOp,
21 NDRConfPacketListField,
22 NDRConfVarStrLenField,
23 NDRConfVarStrLenFieldUtf16,
24 NDRConfVarStrNullField,
25 NDRConfVarStrNullFieldUtf16,
26 NDRFullEmbPointerField,
27 NDRFullPointerField,
28 NDRInt3264EnumField,
29 NDRIntField,
30 NDRPacketField,
31 NDRShortField,
32 NDRSignedIntField,
33 NDRUnionField,
34 register_dcerpc_interface,
35)
36
37
38class LPWKSTA_INFO_100(NDRPacket):
39 ALIGNMENT = (4, 8)
40 fields_desc = [
41 NDRIntField("wki100_platform_id", 0),
42 NDRFullEmbPointerField(NDRConfVarStrNullFieldUtf16("wki100_computername", "")),
43 NDRFullEmbPointerField(NDRConfVarStrNullFieldUtf16("wki100_langroup", "")),
44 NDRIntField("wki100_ver_major", 0),
45 NDRIntField("wki100_ver_minor", 0),
46 ]
47
48
49class LPWKSTA_INFO_101(NDRPacket):
50 ALIGNMENT = (4, 8)
51 fields_desc = [
52 NDRIntField("wki101_platform_id", 0),
53 NDRFullEmbPointerField(NDRConfVarStrNullFieldUtf16("wki101_computername", "")),
54 NDRFullEmbPointerField(NDRConfVarStrNullFieldUtf16("wki101_langroup", "")),
55 NDRIntField("wki101_ver_major", 0),
56 NDRIntField("wki101_ver_minor", 0),
57 NDRFullEmbPointerField(NDRConfVarStrNullFieldUtf16("wki101_lanroot", "")),
58 ]
59
60
61class LPWKSTA_INFO_102(NDRPacket):
62 ALIGNMENT = (4, 8)
63 fields_desc = [
64 NDRIntField("wki102_platform_id", 0),
65 NDRFullEmbPointerField(NDRConfVarStrNullFieldUtf16("wki102_computername", "")),
66 NDRFullEmbPointerField(NDRConfVarStrNullFieldUtf16("wki102_langroup", "")),
67 NDRIntField("wki102_ver_major", 0),
68 NDRIntField("wki102_ver_minor", 0),
69 NDRFullEmbPointerField(NDRConfVarStrNullFieldUtf16("wki102_lanroot", "")),
70 NDRIntField("wki102_logged_on_users", 0),
71 ]
72
73
74class LPWKSTA_INFO_502(NDRPacket):
75 ALIGNMENT = (4, 4)
76 fields_desc = [
77 NDRIntField("wki502_char_wait", 0),
78 NDRIntField("wki502_collection_time", 0),
79 NDRIntField("wki502_maximum_collection_count", 0),
80 NDRIntField("wki502_keep_conn", 0),
81 NDRIntField("wki502_max_cmds", 0),
82 NDRIntField("wki502_sess_timeout", 0),
83 NDRIntField("wki502_siz_char_buf", 0),
84 NDRIntField("wki502_max_threads", 0),
85 NDRIntField("wki502_lock_quota", 0),
86 NDRIntField("wki502_lock_increment", 0),
87 NDRIntField("wki502_lock_maximum", 0),
88 NDRIntField("wki502_pipe_increment", 0),
89 NDRIntField("wki502_pipe_maximum", 0),
90 NDRIntField("wki502_cache_file_timeout", 0),
91 NDRIntField("wki502_dormant_file_limit", 0),
92 NDRIntField("wki502_read_ahead_throughput", 0),
93 NDRIntField("wki502_num_mailslot_buffers", 0),
94 NDRIntField("wki502_num_srv_announce_buffers", 0),
95 NDRIntField("wki502_max_illegal_datagram_events", 0),
96 NDRIntField("wki502_illegal_datagram_event_reset_frequency", 0),
97 NDRSignedIntField("wki502_log_election_packets", 0),
98 NDRSignedIntField("wki502_use_opportunistic_locking", 0),
99 NDRSignedIntField("wki502_use_unlock_behind", 0),
100 NDRSignedIntField("wki502_use_close_behind", 0),
101 NDRSignedIntField("wki502_buf_named_pipes", 0),
102 NDRSignedIntField("wki502_use_lock_read_unlock", 0),
103 NDRSignedIntField("wki502_utilize_nt_caching", 0),
104 NDRSignedIntField("wki502_use_raw_read", 0),
105 NDRSignedIntField("wki502_use_raw_write", 0),
106 NDRSignedIntField("wki502_use_write_raw_data", 0),
107 NDRSignedIntField("wki502_use_encryption", 0),
108 NDRSignedIntField("wki502_buf_files_deny_write", 0),
109 NDRSignedIntField("wki502_buf_read_only_files", 0),
110 NDRSignedIntField("wki502_force_core_create_mode", 0),
111 NDRSignedIntField("wki502_use_512_byte_max_transfer", 0),
112 ]
113
114
115class LPWKSTA_INFO_1013(NDRPacket):
116 ALIGNMENT = (4, 4)
117 fields_desc = [NDRIntField("wki1013_keep_conn", 0)]
118
119
120class LPWKSTA_INFO_1018(NDRPacket):
121 ALIGNMENT = (4, 4)
122 fields_desc = [NDRIntField("wki1018_sess_timeout", 0)]
123
124
125class LPWKSTA_INFO_1046(NDRPacket):
126 ALIGNMENT = (4, 4)
127 fields_desc = [NDRIntField("wki1046_dormant_file_limit", 0)]
128
129
130class NetrWkstaGetInfo_Request(NDRPacket):
131 fields_desc = [
132 NDRFullPointerField(NDRConfVarStrNullFieldUtf16("ServerName", "")),
133 NDRIntField("Level", 0),
134 ]
135
136
137class NetrWkstaGetInfo_Response(NDRPacket):
138 fields_desc = [
139 NDRUnionField(
140 [
141 (
142 NDRFullPointerField(
143 NDRPacketField(
144 "WkstaInfo", LPWKSTA_INFO_100(), LPWKSTA_INFO_100
145 )
146 ),
147 (
148 (lambda pkt: getattr(pkt, "Level", None) == 100),
149 (lambda _, val: val.tag == 100),
150 ),
151 ),
152 (
153 NDRFullPointerField(
154 NDRPacketField(
155 "WkstaInfo", LPWKSTA_INFO_101(), LPWKSTA_INFO_101
156 )
157 ),
158 (
159 (lambda pkt: getattr(pkt, "Level", None) == 101),
160 (lambda _, val: val.tag == 101),
161 ),
162 ),
163 (
164 NDRFullPointerField(
165 NDRPacketField(
166 "WkstaInfo", LPWKSTA_INFO_102(), LPWKSTA_INFO_102
167 )
168 ),
169 (
170 (lambda pkt: getattr(pkt, "Level", None) == 102),
171 (lambda _, val: val.tag == 102),
172 ),
173 ),
174 (
175 NDRFullPointerField(
176 NDRPacketField(
177 "WkstaInfo", LPWKSTA_INFO_502(), LPWKSTA_INFO_502
178 )
179 ),
180 (
181 (lambda pkt: getattr(pkt, "Level", None) == 502),
182 (lambda _, val: val.tag == 502),
183 ),
184 ),
185 (
186 NDRFullPointerField(
187 NDRPacketField(
188 "WkstaInfo", LPWKSTA_INFO_1013(), LPWKSTA_INFO_1013
189 )
190 ),
191 (
192 (lambda pkt: getattr(pkt, "Level", None) == 1013),
193 (lambda _, val: val.tag == 1013),
194 ),
195 ),
196 (
197 NDRFullPointerField(
198 NDRPacketField(
199 "WkstaInfo", LPWKSTA_INFO_1018(), LPWKSTA_INFO_1018
200 )
201 ),
202 (
203 (lambda pkt: getattr(pkt, "Level", None) == 1018),
204 (lambda _, val: val.tag == 1018),
205 ),
206 ),
207 (
208 NDRFullPointerField(
209 NDRPacketField(
210 "WkstaInfo", LPWKSTA_INFO_1046(), LPWKSTA_INFO_1046
211 )
212 ),
213 (
214 (lambda pkt: getattr(pkt, "Level", None) == 1046),
215 (lambda _, val: val.tag == 1046),
216 ),
217 ),
218 ],
219 StrFixedLenField("WkstaInfo", "", length=0),
220 align=(4, 8),
221 switch_fmt=("L", "L"),
222 ),
223 NDRIntField("status", 0),
224 ]
225
226
227class NET_COMPUTER_NAME_TYPE(IntEnum):
228 NetPrimaryComputerName = 0
229 NetAlternateComputerNames = 1
230 NetAllComputerNames = 2
231 NetComputerNameTypeMax = 3
232
233
234class PUNICODE_STRING(NDRPacket):
235 ALIGNMENT = (4, 8)
236 fields_desc = [
237 NDRShortField("Length", None, size_of="Buffer", adjust=lambda _, x: (x * 2)),
238 NDRShortField(
239 "MaximumLength", None, size_of="Buffer", adjust=lambda _, x: (x * 2)
240 ),
241 NDRFullEmbPointerField(
242 NDRConfVarStrLenFieldUtf16(
243 "Buffer",
244 "",
245 size_is=lambda pkt: (pkt.MaximumLength // 2),
246 length_is=lambda pkt: (pkt.Length // 2),
247 )
248 ),
249 ]
250
251
252class PNET_COMPUTER_NAME_ARRAY(NDRPacket):
253 ALIGNMENT = (4, 8)
254 fields_desc = [
255 NDRIntField("EntryCount", None, size_of="ComputerNames"),
256 NDRFullEmbPointerField(
257 NDRConfPacketListField(
258 "ComputerNames",
259 [PUNICODE_STRING()],
260 PUNICODE_STRING,
261 size_is=lambda pkt: pkt.EntryCount,
262 )
263 ),
264 ]
265
266
267class NetrEnumerateComputerNames_Request(NDRPacket):
268 fields_desc = [
269 NDRFullPointerField(NDRConfVarStrNullFieldUtf16("ServerName", "")),
270 NDRInt3264EnumField("NameType", 0, NET_COMPUTER_NAME_TYPE),
271 NDRIntField("Reserved", 0),
272 ]
273
274
275class NetrEnumerateComputerNames_Response(NDRPacket):
276 fields_desc = [
277 NDRFullPointerField(
278 NDRPacketField(
279 "ComputerNames", PNET_COMPUTER_NAME_ARRAY(), PNET_COMPUTER_NAME_ARRAY
280 )
281 ),
282 NDRIntField("status", 0),
283 ]
284
285
286WKSSVC_OPNUMS = {
287 0: DceRpcOp(NetrWkstaGetInfo_Request, NetrWkstaGetInfo_Response),
288 # 3: Opnum3NotUsedOnWire,
289 # 4: Opnum4NotUsedOnWire,
290 # 12: Opnum12NotUsedOnWire,
291 # 14: Opnum14NotUsedOnWire,
292 # 15: Opnum15NotUsedOnWire,
293 # 16: Opnum16NotUsedOnWire,
294 # 17: Opnum17NotUsedOnWire,
295 # 18: Opnum18NotUsedOnWire,
296 # 19: Opnum19NotUsedOnWire,
297 # 21: Opnum21NotUsedOnWire,
298 30: DceRpcOp(
299 NetrEnumerateComputerNames_Request, NetrEnumerateComputerNames_Response
300 ),
301}
302register_dcerpc_interface(
303 name="wkssvc",
304 uuid=uuid.UUID("6BFFD098-A112-3610-9833-46C3F87E345A"),
305 version="1.0",
306 opnums=WKSSVC_OPNUMS,
307)