aboutsummaryrefslogtreecommitdiffstats
path: root/wintun.c
diff options
context:
space:
mode:
authorSimon Rozman <simon@rozman.si>2019-04-03 03:01:28 +0200
committerSimon Rozman <simon@rozman.si>2019-04-03 03:37:24 +0200
commit58900a48418f73ff26b996ae12fdb9f9072095c1 (patch)
treeda675be84350e4f0c0ba9e213720edbba50edaaf /wintun.c
parentChange TunOidSet/TunOidQuery() parameters (diff)
downloadwintun-58900a48418f73ff26b996ae12fdb9f9072095c1.tar.xz
wintun-58900a48418f73ff26b996ae12fdb9f9072095c1.zip
Implement dynamic NDIS 6.30 detection
Signed-off-by: Simon Rozman <simon@rozman.si>
Diffstat (limited to 'wintun.c')
-rw-r--r--wintun.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/wintun.c b/wintun.c
index a2cf44a..0b3f41a 100644
--- a/wintun.c
+++ b/wintun.c
@@ -3,9 +3,8 @@
* Copyright (C) 2018-2019 WireGuard LLC. All Rights Reserved.
*/
-#define NDIS_MINIPORT_DRIVER
-#define NDIS620_MINIPORT
-#define NDIS_SUPPORT_NDIS620 1
+#define NDIS_MINIPORT_DRIVER 1
+#define NDIS630_MINIPORT 1
#define NDIS_WDM 1
#include <stdio.h>
@@ -85,6 +84,7 @@ typedef struct _TUN_CTX {
NDIS_HANDLE NBLPool;
} TUN_CTX;
+static UINT NdisVersion;
static NDIS_HANDLE NdisMiniportDriverHandle = NULL;
#if REG_DWORD == REG_DWORD_BIG_ENDIAN
@@ -988,8 +988,8 @@ static NDIS_STATUS TunInitializeEx(NDIS_HANDLE MiniportAdapterHandle, NDIS_HANDL
NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES attr = {
.Header = {
.Type = NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES,
- .Revision = NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_1,
- .Size = NDIS_SIZEOF_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_1
+ .Revision = NdisVersion < NDIS_RUNTIME_VERSION_630 ? NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_1 : NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_2,
+ .Size = NdisVersion < NDIS_RUNTIME_VERSION_630 ? NDIS_SIZEOF_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_1 : NDIS_SIZEOF_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_2
},
.AttributeFlags = NDIS_MINIPORT_ATTRIBUTES_NO_HALT_ON_SUSPEND,
.InterfaceType = NdisInterfaceInternal,
@@ -1392,6 +1392,12 @@ DRIVER_INITIALIZE DriverEntry;
_Use_decl_annotations_
NTSTATUS DriverEntry(DRIVER_OBJECT *DriverObject, UNICODE_STRING *RegistryPath)
{
+ NdisVersion = NdisGetVersion();
+ if (NdisVersion < NDIS_RUNTIME_VERSION_620)
+ return NDIS_STATUS_UNSUPPORTED_REVISION;
+ if (NdisVersion > NDIS_RUNTIME_VERSION_630)
+ NdisVersion = NDIS_RUNTIME_VERSION_630;
+
NDIS_MINIPORT_DRIVER_CHARACTERISTICS miniport = {
.Header = {
.Type = NDIS_OBJECT_TYPE_MINIPORT_DRIVER_CHARACTERISTICS,