-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathifdef.py
More file actions
376 lines (317 loc) · 12.4 KB
/
Copy pathifdef.py
File metadata and controls
376 lines (317 loc) · 12.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
from . import cpreproc
from .minwindef import *
from .winnt import UCHAR
from .com.guid import GUID, PGUID
if cpreproc.pragma_once("_IFDEF_"):
#
# Get definitions for IFTYPE and IF_ACCESS_TYPE.
#
from .ipifcons import *
#
# Define compartment ID type:
#
NET_IF_COMPARTMENT_ID = UINT32
PNET_IF_COMPARTMENT_ID = PUINT32
#
# Define NetworkGUID type:
#
NET_IF_NETWORK_GUID = GUID
PNET_IF_NETWORK_GUID = PGUID
NET_IF_COMPARTMENT_ID_UNSPECIFIED = 0
NET_IF_COMPARTMENT_ID_PRIMARY = 1
NET_IF_OPER_STATUS = INT
if True: # ifOperStatus
NET_IF_OPER_STATUS_UP = 1
NET_IF_OPER_STATUS_DOWN = 2
NET_IF_OPER_STATUS_TESTING = 3
NET_IF_OPER_STATUS_UNKNOWN = 4
NET_IF_OPER_STATUS_DORMANT = 5
NET_IF_OPER_STATUS_NOT_PRESENT = 6
NET_IF_OPER_STATUS_LOWER_LAYER_DOWN = 7
PNET_IF_OPER_STATUS = POINTER(NET_IF_OPER_STATUS)
NET_IF_OBJECT_ID = ULONG32
PNET_IF_OBJECT_ID = PULONG32
NET_IF_ADMIN_STATUS = INT
if True: # ifAdminStatus
NET_IF_ADMIN_STATUS_UP = 1
NET_IF_ADMIN_STATUS_DOWN = 2
NET_IF_ADMIN_STATUS_TESTING = 3
PNET_IF_ADMIN_STATUS = POINTER(NET_IF_ADMIN_STATUS)
#
# Flags to extend operational status
#
NET_IF_OPER_STATUS_DOWN_NOT_AUTHENTICATED = 0x00000001
NET_IF_OPER_STATUS_DOWN_NOT_MEDIA_CONNECTED =0x00000002
NET_IF_OPER_STATUS_DORMANT_PAUSED = 0x00000004
NET_IF_OPER_STATUS_DORMANT_LOW_POWER = 0x00000008
NET_IF_COMPARTMENT_SCOPE = UINT32
PNET_IF_COMPARTMENT_SCOPE = PUINT32
NET_IF_COMPARTMENT_SCOPE_UNSPECIFIED = 0
NET_IF_COMPARTMENT_SCOPE_ALL = NET_IF_COMPARTMENT_SCOPE(-1).value
NET_IF_OID_IF_ALIAS = 0x00000001 # identifies the ifAlias string for an interface
NET_IF_OID_COMPARTMENT_ID = 0x00000002 # identifies the compartment ID for an interface.
NET_IF_OID_NETWORK_GUID = 0x00000003 # identifies the NetworkGuid for an interface.
NET_IF_OID_IF_ENTRY = 0x00000004 # identifies statistics for an interface.
#
# Define macros for an "unspecified" NetworkGUID value to be used in structures
# that haven't had the NET_LUID field filled in yet.
#
NET_SET_UNSPECIFIED_NETWORK_GUID = lambda _pNetworkGuid: _pNetworkGuid
NET_IS_UNSPECIFIED_NETWORK_GUID = lambda _NetworkGuidValue: _NetworkGuidValue
#
# To prevent collisions between user-assigned and system-assigned site-ids,
# we partition the site-id space into two:
# 1. User-Assigned: NET_SITEID_UNSPECIFIED < SiteId < NET_SITEID_MAXUSER
# 2. System-Assigned: NET_SITEID_MAXUSER < SiteId < NET_SITEID_MAXSYSTEM
#
# Note: A network's SiteId doesn't really need to be settable.
# 1. The network profile manager creates a network per network profile.
# 2. NDIS/IF assigns a unique SiteId to each network.
#
NET_SITEID_UNSPECIFIED = (0)
NET_SITEID_MAXUSER = (0x07ffffff)
NET_SITEID_MAXSYSTEM = (0x0fffffff)
assert NET_SITEID_MAXUSER < NET_SITEID_MAXSYSTEM
NET_IF_RCV_ADDRESS_TYPE = INT
if True: # ifRcvAddressType
NET_IF_RCV_ADDRESS_TYPE_OTHER = 1
NET_IF_RCV_ADDRESS_TYPE_VOLATILE = 2
NET_IF_RCV_ADDRESS_TYPE_NON_VOLATILE = 3
PNET_IF_RCV_ADDRESS_TYPE = POINTER(NET_IF_RCV_ADDRESS_TYPE)
class NET_IF_RCV_ADDRESS_LH(CStructure):
_fields_ = [
("ifRcvAddressType", NET_IF_RCV_ADDRESS_TYPE),
("ifRcvAddressLength", USHORT),
("ifRcvAddressOffset", USHORT) # from beginning of this struct
]
PNET_IF_RCV_ADDRESS_LH = POINTER(NET_IF_RCV_ADDRESS_LH)
class NET_IF_ALIAS_LH(CStructure):
_fields_ = [
("ifAliasLength", USHORT), # in bytes, of ifAlias string
("ifAliasOffset", USHORT) # in bytes, from beginning of this struct
]
PNET_IF_ALIAS_LH = POINTER(NET_IF_ALIAS_LH)
class NET_LUID_LH(Union):
class _INFO(CStructure):
_fields_ = [
("Reserved", ULONG64, 24),
("NetLuidIndex", ULONG64, 24),
("IfType", ULONG64, 16) # equal to IANA IF type
]
_fields_ = [
("Value", ULONG64),
("Info", _INFO)
]
NET_IF_RCV_ADDRESS = NET_IF_RCV_ADDRESS_LH
PNET_IF_RCV_ADDRESS = POINTER(NET_IF_RCV_ADDRESS)
#
# Need to make this visible on all platforms (for the purpose of IF_LUID).
#
NET_LUID = NET_LUID_LH
PNET_LUID = POINTER(NET_LUID_LH)
#
# IF_LUID
#
# Define the locally unique datalink interface identifier type.
# This type is persistable.
#
IF_LUID = NET_LUID
PIF_LUID = PNET_LUID
NET_IFINDEX = ULONG # Interface Index (ifIndex)
PNET_IFINDEX = PULONG
NET_IFTYPE = UINT16 # Interface Type (IANA ifType)
PNET_IFTYPE = PUINT16
NET_IFINDEX_UNSPECIFIED = (0) # Not a valid ifIndex
NET_IFLUID_UNSPECIFIED = (0) # Not a valid if Luid
if cpreproc.pragma_once("__IF_INDEX_DEFINED__"):
#
# IF_INDEX
#
# Define the interface index type.
# This type is not persistable.
# This must be unsigned (not an enum) to replace previous uses of
# an index that used a DWORD type.
#
IF_INDEX = NET_IFINDEX
PIF_INDEX = PNET_IFINDEX
NET_IF_CONNECTION_TYPE = INT
if True:
NET_IF_CONNECTION_DEDICATED = 1
NET_IF_CONNECTION_PASSIVE = 2
NET_IF_CONNECTION_DEMAND = 3
NET_IF_CONNECTION_MAXIMUM = 4
PNET_IF_CONNECTION_TYPE = POINTER(NET_IF_CONNECTION_TYPE)
#
# Types of tunnels (sub-type of IF_TYPE when IF_TYPE is IF_TYPE_TUNNEL).
# See http:#www.iana.org/assignments/ianaiftype-mib.
#
TUNNEL_TYPE = INT
if True:
TUNNEL_TYPE_NONE = 0
TUNNEL_TYPE_OTHER = 1
TUNNEL_TYPE_DIRECT = 2
TUNNEL_TYPE_6TO4 = 11
TUNNEL_TYPE_ISATAP = 13
TUNNEL_TYPE_TEREDO = 14
TUNNEL_TYPE_IPHTTPS = 15
PTUNNEL_TYPE = POINTER(TUNNEL_TYPE)
IFI_UNSPECIFIED = NET_IFINDEX_UNSPECIFIED
#
# Definitions for NET_IF_INFORMATION.Flags
#
NIIF_HARDWARE_INTERFACE = 0x00000001 # Set iff hardware
NIIF_FILTER_INTERFACE = 0x00000002
NIIF_NDIS_RESERVED1 = 0x00000004
NIIF_NDIS_RESERVED2 = 0x00000008
NIIF_NDIS_RESERVED3 = 0x00000010
NIIF_NDIS_WDM_INTERFACE = 0x00000020
NIIF_NDIS_ENDPOINT_INTERFACE = 0x00000040
NIIF_NDIS_ISCSI_INTERFACE = 0x00000080
NIIF_NDIS_RESERVED4 = 0x00000100
NIIF_WAN_TUNNEL_TYPE_UNKNOWN = ULONG(-1).value
#
# Define datalink interface access types.
#
NET_IF_ACCESS_TYPE = INT
if True:
NET_IF_ACCESS_LOOPBACK = 1
NET_IF_ACCESS_BROADCAST = 2
NET_IF_ACCESS_POINT_TO_POINT = 3
NET_IF_ACCESS_POINT_TO_MULTI_POINT = 4
NET_IF_ACCESS_MAXIMUM = 5
PNET_IF_ACCESS_TYPE = POINTER(NET_IF_ACCESS_TYPE)
#
# Define datalink interface direction types.
#
NET_IF_DIRECTION_TYPE = INT
if True:
NET_IF_DIRECTION_SENDRECEIVE = 0
NET_IF_DIRECTION_SENDONLY = 1
NET_IF_DIRECTION_RECEIVEONLY = 2
NET_IF_DIRECTION_MAXIMUM = 3
PNET_IF_DIRECTION_TYPE = POINTER(NET_IF_DIRECTION_TYPE)
NET_IF_MEDIA_CONNECT_STATE = INT
if True:
MediaConnectStateUnknown = 0
MediaConnectStateConnected = 1
MediaConnectStateDisconnected = 2
PNET_IF_MEDIA_CONNECT_STATE = POINTER(NET_IF_MEDIA_CONNECT_STATE)
NET_IF_LINK_SPEED_UNKNOWN = ULONG64(-1).value
#
# Defines the duplex state of media
#
NET_IF_MEDIA_DUPLEX_STATE = INT
if True:
MediaDuplexStateUnknown = 0
MediaDuplexStateHalf = 1
MediaDuplexStateFull = 2
PNET_IF_MEDIA_DUPLEX_STATE = POINTER(NET_IF_MEDIA_DUPLEX_STATE)
# Special values for fields in NET_PHYSICAL_LOCATION
NIIF_BUS_NUMBER_UNKNOWN = ULONG(-1).value
NIIF_SLOT_NUMBER_UNKNOWN = ULONG(-1).value
NIIF_FUNCTION_NUMBER_UNKNOWN = ULONG(-1).value
class NET_PHYSICAL_LOCATION_LH(CStructure):
_fields_ = [
("BusNumber", ULONG), # Physical location
("SlotNumber", ULONG), # ... for hardware
("FunctionNumber", ULONG) # ... devices.
]
PNET_PHYSICAL_LOCATION_LH = POINTER(NET_PHYSICAL_LOCATION_LH)
#
# maximum string size in -wchar- units
#
IF_MAX_STRING_SIZE = 256
class IF_COUNTED_STRING_LH(CStructure):
_fields_ = [
("Length", USHORT), # in -Bytes-
("String", WCHAR * (IF_MAX_STRING_SIZE + 1))
]
PIF_COUNTED_STRING_LH = POINTER(IF_COUNTED_STRING_LH)
IF_MAX_PHYS_ADDRESS_LENGTH = 32
class IF_PHYSICAL_ADDRESS_LH(CStructure):
_fields_ = [
("Length", USHORT),
("Address", UCHAR * IF_MAX_PHYS_ADDRESS_LENGTH)
]
PIF_PHYSICAL_ADDRESS_LH = POINTER(IF_PHYSICAL_ADDRESS_LH)
NET_PHYSICAL_LOCATION = NET_PHYSICAL_LOCATION_LH
PNET_PHYSICAL_LOCATION = PNET_PHYSICAL_LOCATION_LH
IF_COUNTED_STRING = IF_COUNTED_STRING_LH
PIF_COUNTED_STRING = PIF_COUNTED_STRING_LH
IF_PHYSICAL_ADDRESS = IF_PHYSICAL_ADDRESS_LH
PIF_PHYSICAL_ADDRESS = PIF_PHYSICAL_ADDRESS_LH
#
# IF_ADMINISTRATIVE_STATE
#
# Datalink Interface Administrative State.
# Indicates whether the interface has been administratively enabled.
#
IF_ADMINISTRATIVE_STATE = INT
if True:
IF_ADMINISTRATIVE_DISABLED = 0
IF_ADMINISTRATIVE_ENABLED = 1
IF_ADMINISTRATIVE_DEMANDDIAL = 2
PIF_ADMINISTRATIVE_STATE = POINTER(IF_ADMINISTRATIVE_STATE)
#
# Note: Interface is Operational iff
# ((MediaSense is Connected) and (AdministrativeState is Enabled))
# or
# ((MediaSense is Connected) and (AdministrativeState is OnDemand))
#
# !Operational iff
# ((MediaSense != Connected) or (AdministrativeState is Disabled))
#
#
# OperStatus values from RFC 2863
#
IF_OPER_STATUS = INT
if True:
IfOperStatusUp = 1
IfOperStatusDown = 2
IfOperStatusTesting = 3
IfOperStatusUnknown = 4
IfOperStatusDormant = 5
IfOperStatusNotPresent = 6
IfOperStatusLowerLayerDown = 7
class NDIS_INTERFACE_INFORMATION(CStructure):
_fields_ = [
#
# rod fields
#
("ifOperStatus", NET_IF_OPER_STATUS),
("ifOperStatusFlags", ULONG),
("MediaConnectState", NET_IF_MEDIA_CONNECT_STATE),
("MediaDuplexState", NET_IF_MEDIA_DUPLEX_STATE),
("ifMtu", ULONG),
("ifPromiscuousMode", BOOLEAN),
("ifDeviceWakeUpEnable", BOOLEAN),
("XmitLinkSpeed", ULONG64),
("RcvLinkSpeed", ULONG64),
("ifLastChange", ULONG64),
("ifCounterDiscontinuityTime", ULONG64),
("ifInUnknownProtos", ULONG64),
#
# OID_GEN_STATISTICS
#
("ifInDiscards", ULONG64), # OID_GEN_RCV_DISCARDS = OID_GEN_RCV_ERROR + OID_GEN_RCV_NO_BUFFER
("ifInErrors", ULONG64), # OID_GEN_RCV_ERROR
("ifHCInOctets", ULONG64), # OID_GEN_BYTES_RCV = OID_GEN_DIRECTED_BYTES_RCV + OID_GEN_MULTICAST_BYTES_RCV + OID_GEN_BROADCAST_BYTES_RCV
("ifHCInUcastPkts", ULONG64), # OID_GEN_DIRECTED_FRAMES_RCV
("ifHCInMulticastPkts", ULONG64), # OID_GEN_MULTICAST_FRAMES_RCV
("ifHCInBroadcastPkts", ULONG64), # OID_GEN_BROADCAST_FRAMES_RCV
("ifHCOutOctets", ULONG64), # OID_GEN_BYTES_XMIT = OID_GEN_DIRECTED_BYTES_XMIT + OID_GEN_MULTICAST_BYTES_XMIT + OID_GEN_BROADCAST_BYTES_XMIT
("ifHCOutUcastPkts", ULONG64), # OID_GEN_DIRECTED_FRAMES_XMIT
("ifHCOutMulticastPkts", ULONG64), # OID_GEN_MULTICAST_FRAMES_XMIT
("ifHCOutBroadcastPkts", ULONG64), # OID_GEN_BROADCAST_FRAMES_XMIT
("ifOutErrors", ULONG64), # OID_GEN_XMIT_ERROR
("ifOutDiscards", ULONG64), # OID_GEN_XMIT_DISCARDS
("ifHCInUcastOctets", ULONG64), # OID_GEN_DIRECTED_BYTES_RCV
("ifHCInMulticastOctets", ULONG64), # OID_GEN_MULTICAST_BYTES_RCV
("ifHCInBroadcastOctets", ULONG64), # OID_GEN_BROADCAST_BYTES_RCV
("ifHCOutUcastOctets", ULONG64), # OID_GEN_DIRECTED_BYTES_XMIT
("ifHCOutMulticastOctets", ULONG64), # OID_GEN_MULTICAST_BYTES_XMIT
("ifHCOutBroadcastOctets", ULONG64), # OID_GEN_BROADCAST_BYTES_XMIT
("CompartmentId", NET_IF_COMPARTMENT_ID),
("SupportedStatistics", ULONG)
]
PNDIS_INTERFACE_INFORMATION = POINTER(NDIS_INTERFACE_INFORMATION)