1
0
mirror of https://github.com/SoftEtherVPN/SoftEtherVPN.git synced 2025-09-23 19:59:21 +03:00

Cedar, Mayaqua: Set minimum Windows version to Vista

This commit is contained in:
Davide Beatrici
2021-04-03 02:25:19 +02:00
parent a79f91161f
commit 5cab279a8c
31 changed files with 773 additions and 4535 deletions

View File

@ -37,26 +37,8 @@ void Win32GetWinVer(RPC_WINVER *v)
v->IsWindows = true;
if (OS_IS_WINDOWS_NT(GetOsType()) == false)
if (true)
{
// Windows 9x
OSVERSIONINFO os;
Zero(&os, sizeof(os));
os.dwOSVersionInfoSize = sizeof(os);
GetVersionEx(&os);
v->Build = LOWORD(os.dwBuildNumber);
v->VerMajor = os.dwMajorVersion;
v->VerMinor = os.dwMinorVersion;
Format(v->Title, sizeof(v->Title), "%s %s",
GetOsInfo()->OsProductName,
GetOsInfo()->OsVersion);
Trim(v->Title);
}
else
{
// Windows NT 4.0 SP6 or later
OSVERSIONINFOEX os;
Zero(&os, sizeof(os));
os.dwOSVersionInfoSize = sizeof(os);
@ -93,31 +75,6 @@ void Win32GetWinVer(RPC_WINVER *v)
}
}
// Release the DHCP addresses of all virtual LAN cards
void Win32ReleaseAllDhcp9x(bool wait)
{
TOKEN_LIST *t;
UINT i;
t = MsEnumNetworkAdapters(VLAN_ADAPTER_NAME, VLAN_ADAPTER_NAME_OLD);
if (t == NULL)
{
return;
}
for (i = 0;i < t->NumTokens;i++)
{
char *name = t->Token[i];
UINT id = GetInstanceId(name);
if (id != 0)
{
Win32ReleaseDhcp9x(id, wait);
}
}
FreeToken(t);
}
// Routing table tracking main
void RouteTrackingMain(SESSION *s)
{
@ -311,7 +268,7 @@ void RouteTrackingMain(SESSION *s)
if (other_if_default_gateway_metric_min > e->Metric)
{
// Ignore the metric value of all PPP connection in the case of Windows Vista
if (MsIsVista() == false || e->PPPConnection == false)
if (e->PPPConnection == false)
{
other_if_default_gateway_metric_min = e->Metric;
}
@ -513,12 +470,9 @@ void RouteTrackingStart(SESSION *s)
if_id = GetInstanceId(v->InstanceName);
Debug("[InstanceId of %s] = 0x%x\n", v->InstanceName, if_id);
if (MsIsVista())
{
// The routing table by the virtual LAN card body should be
// excluded explicitly in Windows Vista
exclude_if_id = if_id;
}
// The routing table by the virtual LAN card body should be
// excluded explicitly in Windows Vista
exclude_if_id = if_id;
// Get the route to the server
e = GetBestRouteEntryEx(&s->ServerIP, exclude_if_id);
@ -532,10 +486,8 @@ void RouteTrackingStart(SESSION *s)
Debug("GetBestRouteEntry() Succeed. [Gateway: %s]\n", tmp);
// Add a route
if (MsIsVista())
{
e->Metric = e->OldIfMetric;
}
e->Metric = e->OldIfMetric;
if (AddRouteEntryEx(e, &already_exists) == false)
{
FreeRouteEntry(e);
@ -597,15 +549,12 @@ void RouteTrackingStart(SESSION *s)
else
{
// Add a route
if (MsIsVista())
{
dns->Metric = dns->OldIfMetric;
dns->Metric = dns->OldIfMetric;
if (AddRouteEntry(dns) == false)
{
FreeRouteEntry(dns);
dns = NULL;
}
if (AddRouteEntry(dns) == false)
{
FreeRouteEntry(dns);
dns = NULL;
}
}
}
@ -620,10 +569,7 @@ void RouteTrackingStart(SESSION *s)
if (route_to_real_server_global != NULL)
{
if (MsIsVista())
{
route_to_real_server_global->Metric = route_to_real_server_global->OldIfMetric;
}
route_to_real_server_global->Metric = route_to_real_server_global->OldIfMetric;
if (AddRouteEntry(route_to_real_server_global) == false)
{
@ -717,21 +663,6 @@ void RouteTrackingStop(SESSION *s, ROUTE_TRACKING *t)
Zero(&dns_ip, sizeof(dns_ip));
// Remove the default gateway added by the virtual LAN card
if (MsIsVista() == false)
{
if (t->DefaultGatewayByVLan != NULL)
{
Debug("Default Gateway by VLAN was deleted.\n");
DeleteRouteEntry(t->DefaultGatewayByVLan);
}
if (t->VistaOldDefaultGatewayByVLan != NULL)
{
FreeRouteEntry(t->VistaOldDefaultGatewayByVLan);
}
}
if (t->DefaultGatewayByVLan != NULL)
{
FreeRouteEntry(t->DefaultGatewayByVLan);
@ -748,12 +679,6 @@ void RouteTrackingStop(SESSION *s, ROUTE_TRACKING *t)
FreeRouteEntry(t->VistaDefaultGateway2);
}
if (MsIsNt() == false)
{
// Only in the case of Windows 9x, release the DHCP address of the virtual LAN card
Win32ReleaseDhcp9x(t->VLanInterfaceId, false);
}
// Clear the DNS cache
Win32FlushDnsCache();
@ -1130,11 +1055,8 @@ bool VLanPaInit(SESSION *s)
// Normalize the setting of interface metric of the default gateway
if (s->ClientModeAndUseVLan)
{
if (MsIsVista())
{
MsNormalizeInterfaceDefaultGatewaySettings(VLAN_ADAPTER_NAME_TAG, s->ClientOption->DeviceName);
MsNormalizeInterfaceDefaultGatewaySettings(VLAN_ADAPTER_NAME_TAG_OLD, s->ClientOption->DeviceName);
}
MsNormalizeInterfaceDefaultGatewaySettings(VLAN_ADAPTER_NAME_TAG, s->ClientOption->DeviceName);
MsNormalizeInterfaceDefaultGatewaySettings(VLAN_ADAPTER_NAME_TAG_OLD, s->ClientOption->DeviceName);
}
// Connect to the driver
@ -1288,33 +1210,19 @@ bool VLanPutPacketsToDriver(VLAN *v)
return false;
}
if (v->Win9xMode == false)
PROBE_STR("VLanPutPacketsToDriver: WriteFile");
if (WriteFile(v->Handle, v->PutBuffer, NEO_EXCHANGE_BUFFER_SIZE, &write_size,
NULL) == false)
{
// Windows NT
PROBE_STR("VLanPutPacketsToDriver: WriteFile");
if (WriteFile(v->Handle, v->PutBuffer, NEO_EXCHANGE_BUFFER_SIZE, &write_size,
NULL) == false)
{
v->Halt = true;
return false;
}
PROBE_STR("VLanPutPacketsToDriver: WriteFile Completed.");
if (write_size != NEO_EXCHANGE_BUFFER_SIZE)
{
v->Halt = true;
return false;
}
v->Halt = true;
return false;
}
else
PROBE_STR("VLanPutPacketsToDriver: WriteFile Completed.");
if (write_size != NEO_EXCHANGE_BUFFER_SIZE)
{
// Windows 9x
if (DeviceIoControl(v->Handle, NEO_IOCTL_PUT_PACKET, v->PutBuffer,
NEO_EXCHANGE_BUFFER_SIZE, NULL, 0, &write_size, NULL) == false)
{
v->Halt = true;
return false;
}
v->Halt = true;
return false;
}
return true;
@ -1334,26 +1242,12 @@ bool VLanGetPacketsFromDriver(VLAN *v)
return false;
}
if (v->Win9xMode == false)
PROBE_STR("VLanGetPacketsFromDriver: ReadFile");
if (ReadFile(v->Handle, v->GetBuffer, NEO_EXCHANGE_BUFFER_SIZE,
&read_size, NULL) == false)
{
// Windows NT
PROBE_STR("VLanGetPacketsFromDriver: ReadFile");
if (ReadFile(v->Handle, v->GetBuffer, NEO_EXCHANGE_BUFFER_SIZE,
&read_size, NULL) == false)
{
v->Halt = true;
return false;
}
}
else
{
// Windows 9x
if (DeviceIoControl(v->Handle, NEO_IOCTL_GET_PACKET, NULL, 0,
v->GetBuffer, NEO_EXCHANGE_BUFFER_SIZE, &read_size, NULL) == false)
{
v->Halt = true;
return false;
}
v->Halt = true;
return false;
}
if (read_size != NEO_EXCHANGE_BUFFER_SIZE)
@ -1423,23 +1317,14 @@ VLAN *NewVLan(char *instance_name, VLAN_PARAM *param)
v = ZeroMalloc(sizeof(VLAN));
if (OS_IS_WINDOWS_9X(GetOsInfo()->OsType))
{
v->Win9xMode = true;
}
// Initialize the name
Format(name_upper, sizeof(name_upper), "%s", instance_name);
StrUpper(name_upper);
v->InstanceName = CopyStr(name_upper);
Format(tmp, sizeof(tmp), NDIS_NEO_DEVICE_FILE_NAME, v->InstanceName);
v->DeviceNameWin32 = CopyStr(tmp);
if (v->Win9xMode == false)
{
Format(tmp, sizeof(tmp), NDIS_NEO_EVENT_NAME_WIN32, v->InstanceName);
v->EventNameWin32 = CopyStr(tmp);
}
Format(tmp, sizeof(tmp), NDIS_NEO_EVENT_NAME_WIN32, v->InstanceName);
v->EventNameWin32 = CopyStr(tmp);
// Connect to the device
h = CreateFile(v->DeviceNameWin32,
@ -1455,31 +1340,12 @@ VLAN *NewVLan(char *instance_name, VLAN_PARAM *param)
goto CLEANUP;
}
if (v->Win9xMode == false)
// Connect to the event
e = OpenEvent(SYNCHRONIZE, FALSE, v->EventNameWin32);
if (e == INVALID_HANDLE_VALUE)
{
// Connect to the event
e = OpenEvent(SYNCHRONIZE, FALSE, v->EventNameWin32);
if (e == INVALID_HANDLE_VALUE)
{
// Connection failure
goto CLEANUP;
}
}
else
{
OPENVXDHANDLE OpenVxDHandle;
DWORD vxd_handle;
UINT bytes_returned;
OpenVxDHandle = (OPENVXDHANDLE)GetProcAddress(GetModuleHandle("KERNEL32"),
"OpenVxDHandle");
// Deliver to the driver by creating an event
e = CreateEvent(NULL, FALSE, FALSE, NULL);
vxd_handle = (DWORD)OpenVxDHandle(e);
DeviceIoControl(h, NEO_IOCTL_SET_EVENT, &vxd_handle, sizeof(DWORD),
NULL, 0, &bytes_returned, NULL);
// Connection failure
goto CLEANUP;
}
v->Event = e;