@@ -31,7 +31,6 @@ NTSTATUS NetworkAdapterCreateHandle(
31
31
_In_ PPH_STRING InterfaceGuid
32
32
)
33
33
{
34
- // NOTE: Do not cache this handle. The user will be unable to enable, disable or change adapter configuration.
35
34
return PhCreateFileWin32 (
36
35
DeviceHandle ,
37
36
PhaConcatStrings (2 , L"\\\\.\\" , InterfaceGuid -> Buffer )-> Buffer ,
@@ -56,7 +55,6 @@ BOOLEAN NetworkAdapterQuerySupported(
56
55
BOOLEAN adapterLinkSpeedSupported = FALSE;
57
56
PNDIS_OID ndisObjectIdentifiers ;
58
57
59
- // https://msdn.microsoft.com/en-us/library/ff569642.aspx
60
58
opcode = OID_GEN_SUPPORTED_LIST ;
61
59
62
60
// TODO: 4096 objects might be too small...
@@ -69,7 +67,7 @@ BOOLEAN NetworkAdapterQuerySupported(
69
67
NULL ,
70
68
NULL ,
71
69
& isb ,
72
- IOCTL_NDIS_QUERY_GLOBAL_STATS , // https://msdn.microsoft.com/en-us/library/windows/hardware/ff548975.aspx
70
+ IOCTL_NDIS_QUERY_GLOBAL_STATS ,
73
71
& opcode ,
74
72
sizeof (NDIS_OID ),
75
73
ndisObjectIdentifiers ,
@@ -124,7 +122,6 @@ BOOLEAN NetworkAdapterQueryNdisVersion(
124
122
IO_STATUS_BLOCK isb ;
125
123
ULONG versionResult = 0 ;
126
124
127
- // https://msdn.microsoft.com/en-us/library/ff569582.aspx
128
125
opcode = OID_GEN_DRIVER_VERSION ; // OID_GEN_VENDOR_DRIVER_VERSION
129
126
130
127
if (NT_SUCCESS (NtDeviceIoControlFile (
@@ -165,7 +162,6 @@ PPH_STRING NetworkAdapterQueryName(
165
162
IO_STATUS_BLOCK isb ;
166
163
WCHAR adapterName [NDIS_IF_MAX_STRING_SIZE + 1 ] = L"" ;
167
164
168
- // https://msdn.microsoft.com/en-us/library/ff569584.aspx
169
165
opcode = OID_GEN_FRIENDLY_NAME ;
170
166
171
167
if (NT_SUCCESS (NtDeviceIoControlFile (
@@ -225,15 +221,14 @@ NTSTATUS NetworkAdapterQueryStatistics(
225
221
IO_STATUS_BLOCK isb ;
226
222
NDIS_STATISTICS_INFO result ;
227
223
228
- // https://msdn.microsoft.com/en-us/library/ff569640.aspx
229
224
opcode = OID_GEN_STATISTICS ;
230
225
231
226
memset (& result , 0 , sizeof (NDIS_STATISTICS_INFO ));
232
227
result .Header .Type = NDIS_OBJECT_TYPE_DEFAULT ;
233
228
result .Header .Revision = NDIS_STATISTICS_INFO_REVISION_1 ;
234
229
result .Header .Size = NDIS_SIZEOF_STATISTICS_INFO_REVISION_1 ;
235
230
236
- status = NtDeviceIoControlFile (
231
+ if ( NT_SUCCESS ( status = NtDeviceIoControlFile (
237
232
DeviceHandle ,
238
233
NULL ,
239
234
NULL ,
@@ -244,9 +239,10 @@ NTSTATUS NetworkAdapterQueryStatistics(
244
239
sizeof (NDIS_OID ),
245
240
& result ,
246
241
sizeof (result )
247
- );
248
-
249
- * Info = result ;
242
+ )))
243
+ {
244
+ * Info = result ;
245
+ }
250
246
251
247
return status ;
252
248
}
@@ -261,15 +257,14 @@ NTSTATUS NetworkAdapterQueryLinkState(
261
257
IO_STATUS_BLOCK isb ;
262
258
NDIS_LINK_STATE result ;
263
259
264
- // https://msdn.microsoft.com/en-us/library/ff569595.aspx
265
260
opcode = OID_GEN_LINK_STATE ; // OID_GEN_MEDIA_CONNECT_STATUS;
266
261
267
262
memset (& result , 0 , sizeof (NDIS_LINK_STATE ));
268
263
result .Header .Type = NDIS_OBJECT_TYPE_DEFAULT ;
269
264
result .Header .Revision = NDIS_LINK_STATE_REVISION_1 ;
270
265
result .Header .Size = NDIS_SIZEOF_LINK_STATE_REVISION_1 ;
271
266
272
- status = NtDeviceIoControlFile (
267
+ if ( NT_SUCCESS ( status = NtDeviceIoControlFile (
273
268
DeviceHandle ,
274
269
NULL ,
275
270
NULL ,
@@ -280,9 +275,10 @@ NTSTATUS NetworkAdapterQueryLinkState(
280
275
sizeof (NDIS_OID ),
281
276
& result ,
282
277
sizeof (result )
283
- );
284
-
285
- * State = result ;
278
+ )))
279
+ {
280
+ * State = result ;
281
+ }
286
282
287
283
return status ;
288
284
}
@@ -294,10 +290,12 @@ BOOLEAN NetworkAdapterQueryMediaType(
294
290
{
295
291
NDIS_OID opcode ;
296
292
IO_STATUS_BLOCK isb ;
297
- NDIS_PHYSICAL_MEDIUM adapterMediaType = NdisPhysicalMediumUnspecified ;
293
+ NDIS_MEDIUM adapterType ;
294
+ NDIS_PHYSICAL_MEDIUM adapterMediaType ;
298
295
299
- // https://msdn.microsoft.com/en-us/library/ff569622.aspx
300
296
opcode = OID_GEN_PHYSICAL_MEDIUM_EX ;
297
+ adapterMediaType = NdisPhysicalMediumUnspecified ;
298
+ memset (& isb , 0 , sizeof (IO_STATUS_BLOCK ));
301
299
302
300
if (NT_SUCCESS (NtDeviceIoControlFile (
303
301
DeviceHandle ,
@@ -313,12 +311,9 @@ BOOLEAN NetworkAdapterQueryMediaType(
313
311
)))
314
312
{
315
313
* Medium = adapterMediaType ;
316
- }
317
-
318
- if (adapterMediaType != NdisPhysicalMediumUnspecified )
319
314
return TRUE;
315
+ }
320
316
321
- // https://msdn.microsoft.com/en-us/library/ff569621.aspx
322
317
opcode = OID_GEN_PHYSICAL_MEDIUM ;
323
318
adapterMediaType = NdisPhysicalMediumUnspecified ;
324
319
memset (& isb , 0 , sizeof (IO_STATUS_BLOCK ));
@@ -337,13 +332,47 @@ BOOLEAN NetworkAdapterQueryMediaType(
337
332
)))
338
333
{
339
334
* Medium = adapterMediaType ;
335
+ return TRUE;
340
336
}
341
337
342
- if (adapterMediaType != NdisPhysicalMediumUnspecified )
343
- return TRUE;
338
+ opcode = OID_GEN_MEDIA_SUPPORTED ; // OID_GEN_MEDIA_IN_USE
339
+ adapterType = NdisMediumMax ;
340
+ memset (& isb , 0 , sizeof (IO_STATUS_BLOCK ));
341
+
342
+ if (NT_SUCCESS (NtDeviceIoControlFile (
343
+ DeviceHandle ,
344
+ NULL ,
345
+ NULL ,
346
+ NULL ,
347
+ & isb ,
348
+ IOCTL_NDIS_QUERY_GLOBAL_STATS ,
349
+ & opcode ,
350
+ sizeof (NDIS_OID ),
351
+ & adapterType ,
352
+ sizeof (adapterType )
353
+ )))
354
+ {
355
+ switch (adapterType )
356
+ {
357
+ case NdisMedium802_3 :
358
+ * Medium = NdisPhysicalMedium802_3 ;
359
+ break ;
360
+ case NdisMedium802_5 :
361
+ * Medium = NdisPhysicalMedium802_5 ;
362
+ break ;
363
+ case NdisMediumWirelessWan :
364
+ * Medium = NdisPhysicalMediumWirelessLan ;
365
+ break ;
366
+ case NdisMediumWiMAX :
367
+ * Medium = NdisPhysicalMediumWiMax ;
368
+ break ;
369
+ default :
370
+ * Medium = NdisPhysicalMediumOther ;
371
+ break ;
372
+ }
344
373
345
- //NDIS_MEDIUM adapterMediaType = NdisMediumMax ;
346
- //opcode = OID_GEN_MEDIA_IN_USE;
374
+ return TRUE ;
375
+ }
347
376
348
377
return FALSE;
349
378
}
@@ -358,7 +387,6 @@ NTSTATUS NetworkAdapterQueryLinkSpeed(
358
387
IO_STATUS_BLOCK isb ;
359
388
NDIS_LINK_SPEED result ;
360
389
361
- // https://msdn.microsoft.com/en-us/library/ff569593.aspx
362
390
opcode = OID_GEN_LINK_SPEED ;
363
391
364
392
memset (& result , 0 , sizeof (NDIS_LINK_SPEED ));
@@ -437,6 +465,59 @@ BOOLEAN QueryInterfaceRow(
437
465
return result ;
438
466
}
439
467
468
+
469
+ PWSTR MediumTypeToString (
470
+ _In_ NDIS_PHYSICAL_MEDIUM MediumType
471
+ )
472
+ {
473
+ switch (MediumType )
474
+ {
475
+ case NdisPhysicalMediumWirelessLan :
476
+ return L"Wireless LAN" ;
477
+ case NdisPhysicalMediumCableModem :
478
+ return L"Cable Modem" ;
479
+ case NdisPhysicalMediumPhoneLine :
480
+ return L"Phone Line" ;
481
+ case NdisPhysicalMediumPowerLine :
482
+ return L"Power Line" ;
483
+ case NdisPhysicalMediumDSL : // includes ADSL and UADSL (G.Lite)
484
+ return L"DSL" ;
485
+ case NdisPhysicalMediumFibreChannel :
486
+ return L"Fibre" ;
487
+ case NdisPhysicalMedium1394 :
488
+ return L"1394" ;
489
+ case NdisPhysicalMediumWirelessWan :
490
+ return L"Wireless WAN" ;
491
+ case NdisPhysicalMediumNative802_11 :
492
+ return L"Native802_11" ;
493
+ case NdisPhysicalMediumBluetooth :
494
+ return L"Bluetooth" ;
495
+ case NdisPhysicalMediumInfiniband :
496
+ return L"Infiniband" ;
497
+ case NdisPhysicalMediumWiMax :
498
+ return L"WiMax" ;
499
+ case NdisPhysicalMediumUWB :
500
+ return L"UWB" ;
501
+ case NdisPhysicalMedium802_3 :
502
+ return L"Ethernet" ;
503
+ case NdisPhysicalMedium802_5 :
504
+ return L"802_5" ;
505
+ case NdisPhysicalMediumIrda :
506
+ return L"Infrared" ;
507
+ case NdisPhysicalMediumWiredWAN :
508
+ return L"Wired WAN" ;
509
+ case NdisPhysicalMediumWiredCoWan :
510
+ return L"Wired CoWan" ;
511
+ case NdisPhysicalMediumOther :
512
+ return L"Other" ;
513
+ case NdisPhysicalMediumNative802_15_4 :
514
+ return L"Native802_15_" ;
515
+ }
516
+
517
+ return L"N/A" ;
518
+ }
519
+
520
+
440
521
//BOOLEAN NetworkAdapterQueryInternet(
441
522
// _Inout_ PDV_NETADAPTER_SYSINFO_CONTEXT Context,
442
523
// _In_ PPH_STRING IpAddress
0 commit comments