diff options
author | Simon Rozman <simon@rozman.si> | 2019-04-03 03:01:28 +0200 |
---|---|---|
committer | Simon Rozman <simon@rozman.si> | 2019-04-03 03:37:24 +0200 |
commit | 58900a48418f73ff26b996ae12fdb9f9072095c1 (patch) | |
tree | da675be84350e4f0c0ba9e213720edbba50edaaf /wintun.c | |
parent | Change TunOidSet/TunOidQuery() parameters (diff) | |
download | wintun-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.c | 16 |
1 files changed, 11 insertions, 5 deletions
@@ -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, |