Signed-off-by: Owen Smith <owen.smith@xxxxxxxxx>
---
src/xenvif/driver.c | 113 +-----
src/xenvif/driver.h | 10 -
src/xenvif/pdo.c | 151 +-------
src/xenvif/registry.c | 72 +++-
src/xenvif/registry.h | 9 +-
src/xenvif/settings.c | 694 -----------------------------------
src/xenvif/settings.h | 54 ---
vs2019/xenvif/xenvif.vcxproj | 1 -
vs2022/xenvif/xenvif.vcxproj | 1 -
9 files changed, 87 insertions(+), 1018 deletions(-)
delete mode 100644 src/xenvif/settings.c
delete mode 100644 src/xenvif/settings.h
diff --git a/src/xenvif/driver.c b/src/xenvif/driver.c
index 3345607..2ac793d 100644
--- a/src/xenvif/driver.c
+++ b/src/xenvif/driver.c
@@ -120,54 +120,6 @@ DriverGetParametersKey(
return __DriverGetParametersKey();
}
-static FORCEINLINE VOID
-__DriverSetAddressesKey(
- IN HANDLE Key
- )
-{
- Driver.AddressesKey = Key;
-}
-
-static FORCEINLINE HANDLE
-__DriverGetAddressesKey(
- VOID
- )
-{
- return Driver.AddressesKey;
-}
-
-HANDLE
-DriverGetAddressesKey(
- VOID
- )
-{
- return __DriverGetAddressesKey();
-}
-
-static FORCEINLINE VOID
-__DriverSetSettingsKey(
- IN HANDLE Key
- )
-{
- Driver.SettingsKey = Key;
-}
-
-static FORCEINLINE HANDLE
-__DriverGetSettingsKey(
- VOID
- )
-{
- return Driver.SettingsKey;
-}
-
-HANDLE
-DriverGetSettingsKey(
- VOID
- )
-{
- return __DriverGetSettingsKey();
-}
-
#define MAXNAMELEN 256
static FORCEINLINE VOID
@@ -265,8 +217,6 @@ DriverUnload(
IN PDRIVER_OBJECT DriverObject
)
{
- HANDLE SettingsKey;
- HANDLE AddressesKey;
HANDLE ParametersKey;
ASSERT3P(DriverObject, ==, __DriverGetDriverObject());
@@ -275,16 +225,6 @@ DriverUnload(
Driver.NeedReboot = FALSE;
- SettingsKey = __DriverGetSettingsKey();
- __DriverSetSettingsKey(NULL);
-
- RegistryCloseKey(SettingsKey);
-
- AddressesKey = __DriverGetAddressesKey();
- __DriverSetAddressesKey(NULL);
-
- RegistryCloseKey(AddressesKey);
-
ParametersKey = __DriverGetParametersKey();
__DriverSetParametersKey(NULL);
@@ -401,10 +341,7 @@ DriverEntry(
IN PUNICODE_STRING RegistryPath
)
{
- HANDLE ServiceKey;
HANDLE ParametersKey;
- HANDLE AddressesKey;
- HANDLE SettingsKey;
ULONG Index;
NTSTATUS status;
@@ -428,43 +365,16 @@ DriverEntry(
MONTH,
YEAR);
- status = RegistryInitialize(RegistryPath);
+ status = RegistryInitialize(DriverObject, RegistryPath);
if (!NT_SUCCESS(status))
goto fail1;
- status = RegistryOpenServiceKey(KEY_ALL_ACCESS, &ServiceKey);
+ status = RegistryOpenParametersKey(KEY_READ, &ParametersKey);
if (!NT_SUCCESS(status))
goto fail2;
- status = RegistryOpenSubKey(ServiceKey,
- "Parameters",
- KEY_READ,
- &ParametersKey);
- if (!NT_SUCCESS(status))
- goto fail3;
-
__DriverSetParametersKey(ParametersKey);
- status = RegistryCreateSubKey(ServiceKey,
- "Addresses",
- REG_OPTION_VOLATILE,
- &AddressesKey);
- if (!NT_SUCCESS(status))
- goto fail4;
-
- __DriverSetAddressesKey(AddressesKey);
-
- status = RegistryCreateSubKey(ServiceKey,
- "Settings",
- REG_OPTION_NON_VOLATILE,
- &SettingsKey);
- if (!NT_SUCCESS(status))
- goto fail5;
-
- __DriverSetSettingsKey(SettingsKey);
-
- RegistryCloseKey(ServiceKey);
-
DriverObject->DriverExtension->AddDevice = AddDevice;
for (Index = 0; Index <= IRP_MJ_MAXIMUM_FUNCTION; Index++) {
@@ -477,25 +387,6 @@ DriverEntry(
return STATUS_SUCCESS;
-fail5:
- Error("fail5\n");
-
- __DriverSetAddressesKey(NULL);
-
- RegistryCloseKey(AddressesKey);
-
-fail4:
- Error("fail4\n");
-
- __DriverSetParametersKey(NULL);
-
- RegistryCloseKey(ParametersKey);
-
-fail3:
- Error("fail3\n");
-
- RegistryCloseKey(ServiceKey);
-
fail2:
Error("fail2\n");
diff --git a/src/xenvif/driver.h b/src/xenvif/driver.h
index b5b9a3d..a9b47d4 100644
--- a/src/xenvif/driver.h
+++ b/src/xenvif/driver.h
@@ -48,16 +48,6 @@ DriverGetParametersKey(
VOID
);
-extern HANDLE
-DriverGetAddressesKey(
- VOID
- );
-
-extern HANDLE
-DriverGetSettingsKey(
- VOID
- );
-
extern VOID
DriverRequestReboot(
VOID
diff --git a/src/xenvif/pdo.c b/src/xenvif/pdo.c
index 8ec9814..51cbd97 100644
--- a/src/xenvif/pdo.c
+++ b/src/xenvif/pdo.c
@@ -54,7 +54,6 @@
#include "registry.h"
#include "thread.h"
#include "link.h"
-#include "settings.h"
#include "dbg_print.h"
#include "assert.h"
#include "util.h"
@@ -727,30 +726,16 @@ __PdoSetPermanentAddress(
IN PCHAR Buffer
)
{
- ANSI_STRING Ansi[2];
NTSTATUS status;
status = __PdoParseAddress(Buffer, &Pdo->PermanentAddress);
if (!NT_SUCCESS(status))
goto fail1;
- RtlZeroMemory(Ansi, sizeof (ANSI_STRING) * 2);
- RtlInitAnsiString(&Ansi[0], Buffer);
-
- status = RegistryUpdateSzValue(DriverGetAddressesKey(),
- __PdoGetName(Pdo),
- REG_SZ,
- Ansi);
- if (!NT_SUCCESS(status))
- goto fail2;
-
- Info("%s: %Z\n", __PdoGetName(Pdo), &Ansi[0]);
+ Info("%s: %s\n", __PdoGetName(Pdo), Buffer);
return STATUS_SUCCESS;
-fail2:
- Error("fail2\n");
-
fail1:
Error("fail1 (%08x)\n", status);
@@ -778,68 +763,9 @@ __PdoClearPermanentAddress(
IN PXENVIF_PDO Pdo
)
{
- (VOID) RegistryDeleteValue(DriverGetAddressesKey(),
- __PdoGetName(Pdo));
-
RtlZeroMemory(&Pdo->PermanentAddress, sizeof (ETHERNET_ADDRESS));
}
-static NTSTATUS
-PdoSetFriendlyName(
- IN PXENVIF_PDO Pdo,
- IN HANDLE SoftwareKey,
- IN HANDLE HardwareKey
- )
-{
- PANSI_STRING DriverDesc;
- CHAR Buffer[MAXNAMELEN];
- ANSI_STRING Ansi[2];
- NTSTATUS status;
-
- status = RegistryQuerySzValue(SoftwareKey,
- "DriverDesc",
- NULL,
- &DriverDesc);
- if (!NT_SUCCESS(status))
- goto fail1;
-
- status = RtlStringCbPrintfA(Buffer,
- MAXNAMELEN,
- "%Z #%s",
- &DriverDesc[0],
- __PdoGetName(Pdo)
- );
- if (!NT_SUCCESS(status))
- goto fail2;
-
- RtlZeroMemory(Ansi, sizeof (ANSI_STRING) * 2);
- RtlInitAnsiString(&Ansi[0], Buffer);
-
- status = RegistryUpdateSzValue(HardwareKey,
- "FriendlyName",
- REG_SZ,
- Ansi);
- if (!NT_SUCCESS(status))
- goto fail3;
-
- Info("%s: %Z\n", __PdoGetName(Pdo), &Ansi[0]);
-
- RegistryFreeSzValue(DriverDesc);
-
- return STATUS_SUCCESS;
-
-fail3:
- Error("fail3\n");
-
-fail2:
- Error("fail2\n");
-
-fail1:
- Error("fail1 (%08x)\n", status);
-
- return status;
-}
-
static FORCEINLINE NTSTATUS
__PdoSetCurrentAddress(
IN PXENVIF_PDO Pdo,
@@ -1276,15 +1202,13 @@ PdoUnplugRequested(
static FORCEINLINE NTSTATUS
PdoParseMibTable(
- IN PXENVIF_PDO Pdo,
- IN HANDLE SoftwareKey
+ IN PXENVIF_PDO Pdo
)
{
NTSTATUS (*__GetIfTable2)(PMIB_IF_TABLE2 *);
VOID (*__FreeMibTable)(PVOID);
PMIB_IF_TABLE2 Table;
ULONG Index;
- GUID Guid;
NTSTATUS status;
status = LinkGetRoutineAddress("netio.sys",
@@ -1330,56 +1254,10 @@ PdoParseMibTable(
if (Row->OperStatus != IfOperStatusUp)
continue;
- (VOID) SettingsSave(__PdoGetName(Pdo),
- Row->Alias,
- Row->Description,
- &Row->InterfaceGuid,
- &Row->InterfaceLuid);
-
status = STATUS_PNP_REBOOT_REQUIRED;
goto fail4;
}
- //
- // If there is a stack bound then restore any settings that
- // may have been saved from an aliasing device.
- //
- status = PdoGetInterfaceGuid(Pdo, SoftwareKey, &Guid);
- if (NT_SUCCESS(status)) {
- NET_LUID Luid;
- PWCHAR Alias;
- PWCHAR Description;
-
- RtlZeroMemory(&Luid, sizeof(NET_LUID));
- Alias = NULL;
- Description = NULL;
-
- status = PdoGetInterfaceLuid(Pdo, SoftwareKey, &Luid);
- if (NT_SUCCESS(status)) {
- for (Index = 0; Index < Table->NumEntries; Index++) {
- PMIB_IF_ROW2 Row = &Table->Table[Index];
-
- Trace("%s: CHECKING %ws (%ws)\n",
- __PdoGetName(Pdo),
- Row->Alias,
- Row->Description);
-
- if (Row->InterfaceLuid.Value != Luid.Value)
- continue;
-
- Alias = Row->Alias;
- Description = Row->Description;
- break;
- }
- }
-
- (VOID) SettingsRestore(__PdoGetName(Pdo),
- Alias,
- Description,
- &Guid,
- &Luid);
- }
-
__FreeMibTable(Table);
return STATUS_SUCCESS;
@@ -1408,7 +1286,6 @@ PdoStartDevice(
)
{
HANDLE SoftwareKey;
- HANDLE HardwareKey;
NTSTATUS status;
status = STATUS_UNSUCCESSFUL;
@@ -1421,21 +1298,11 @@ PdoStartDevice(
if (!NT_SUCCESS(status))
goto fail2;
- status = RegistryOpenHardwareKey(__PdoGetDeviceObject(Pdo),
- KEY_ALL_ACCESS,
- &HardwareKey);
- if (!NT_SUCCESS(status))
- goto fail3;
-
- (VOID) PdoSetFriendlyName(Pdo,
- SoftwareKey,
- HardwareKey);
-
status = __PdoSetCurrentAddress(Pdo, SoftwareKey);
if (!NT_SUCCESS(status))
- goto fail4;
+ goto fail3;
- status = PdoParseMibTable(Pdo, SoftwareKey);
+ status = PdoParseMibTable(Pdo);
if (status == STATUS_PNP_REBOOT_REQUIRED || !PdoUnplugRequested(Pdo)) {
PdoUnplugRequest(Pdo, TRUE); // fix unplug reference count
DriverRequestReboot();
@@ -1445,7 +1312,7 @@ PdoStartDevice(
status = PdoD3ToD0(Pdo);
if (!NT_SUCCESS(status))
- goto fail5;
+ goto fail4;
PdoUnplugRequest(Pdo, TRUE);
@@ -1454,20 +1321,14 @@ PdoStartDevice(
Irp->IoStatus.Status = STATUS_SUCCESS;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
- RegistryCloseKey(HardwareKey);
RegistryCloseKey(SoftwareKey);
return STATUS_SUCCESS;
-fail5:
- Error("fail5\n");
-
- RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
-
fail4:
Error("fail4\n");
- RegistryCloseKey(HardwareKey);
+ RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
fail3:
Error("fail3\n");
diff --git a/src/xenvif/registry.c b/src/xenvif/registry.c
index 8f84818..792ce03 100644
--- a/src/xenvif/registry.c
+++ b/src/xenvif/registry.c
@@ -38,8 +38,13 @@
#define REGISTRY_TAG 'GERX'
+static PDRIVER_OBJECT RegistryDriverObject;
static UNICODE_STRING RegistryPath;
+typedef NTSTATUS(*IOOPENDRIVERREGISTRYKEY)(PDRIVER_OBJECT, DRIVER_REGKEY_TYPE, ACCESS_MASK, ULONG, PHANDLE);
+
+static IOOPENDRIVERREGISTRYKEY __IoOpenDriverRegistryKey;
+
static FORCEINLINE PVOID
__RegistryAllocate(
IN ULONG Length
@@ -58,9 +63,12 @@ __RegistryFree(
NTSTATUS
RegistryInitialize(
- IN PUNICODE_STRING Path
+ IN PDRIVER_OBJECT DriverObject,
+ IN PUNICODE_STRING Path
)
{
+ UNICODE_STRING Unicode;
+ PVOID Func;
NTSTATUS status;
ASSERT3P(RegistryPath.Buffer, ==, NULL);
@@ -69,6 +77,16 @@ RegistryInitialize(
if (!NT_SUCCESS(status))
goto fail1;
+ ASSERT3P(RegistryDriverObject, ==, NULL);
+ RegistryDriverObject = DriverObject;
+
+ ASSERT3P(__IoOpenDriverRegistryKey, ==, NULL);
+ RtlInitUnicodeString(&Unicode, L"IoOpenDriverRegistryKey");
+
+ Func = MmGetSystemRoutineAddress(&Unicode);
+ if (Func != NULL)
+ __IoOpenDriverRegistryKey = (IOOPENDRIVERREGISTRYKEY)Func;
+
return STATUS_SUCCESS;
fail1:
@@ -82,6 +100,10 @@ RegistryTeardown(
VOID
)
{
+ __IoOpenDriverRegistryKey = NULL;
+
+ RegistryDriverObject = NULL;
+
RtlFreeUnicodeString(&RegistryPath);
RegistryPath.Buffer = NULL;
RegistryPath.MaximumLength = RegistryPath.Length = 0;
@@ -266,6 +288,54 @@ RegistryCreateServiceKey(
return RegistryCreateKey(NULL, &RegistryPath, REG_OPTION_NON_VOLATILE,
Key);
}
+NTSTATUS
+RegistryOpenParametersKey(
+ IN ACCESS_MASK DesiredAccess,
+ OUT PHANDLE Key
+ )
+{
+ HANDLE ServiceKey;
+ NTSTATUS status;
+
+ if (__IoOpenDriverRegistryKey != NULL) {
+ status = __IoOpenDriverRegistryKey(RegistryDriverObject,
+ DriverRegKeyParameters,
+ DesiredAccess,
+ 0,
+ Key);
+ if (!NT_SUCCESS(status))
+ goto fail1;
+
+ goto done;
+ }
+
+ status = RegistryOpenKey(NULL, &RegistryPath, DesiredAccess, &ServiceKey);
+ if (!NT_SUCCESS(status))
+ goto fail2;
+
+ status = RegistryOpenSubKey(ServiceKey, "Parameters", DesiredAccess, Key);
+ if (!NT_SUCCESS(status))
+ goto fail3;
+
+ RegistryCloseKey(ServiceKey);
+
+done:
+ return STATUS_SUCCESS;
+
+fail3:
+ Error("fail3\n");
+
+ RegistryCloseKey(ServiceKey);
+
+fail2:
+ Error("fail2\n");
+
+fail1:
+ Error("fail1 %08x\n", status);
+
+ return status;
+}
+
NTSTATUS
RegistryOpenSoftwareKey(
IN PDEVICE_OBJECT DeviceObject,
diff --git a/src/xenvif/registry.h b/src/xenvif/registry.h
index c656806..60c50e8 100644
--- a/src/xenvif/registry.h
+++ b/src/xenvif/registry.h
@@ -37,7 +37,8 @@
extern NTSTATUS
RegistryInitialize(
- IN PUNICODE_STRING Path
+ IN PDRIVER_OBJECT DriverObject,
+ IN PUNICODE_STRING Path
);
extern VOID
@@ -72,6 +73,12 @@ RegistryCreateServiceKey(
OUT PHANDLE Key
);
+extern NTSTATUS
+RegistryOpenParametersKey(
+ IN ACCESS_MASK DesiredAccess,
+ OUT PHANDLE Key
+ );
+
extern NTSTATUS
RegistryOpenSoftwareKey(
IN PDEVICE_OBJECT DeviceObject,
diff --git a/src/xenvif/settings.c b/src/xenvif/settings.c
deleted file mode 100644
index 4dd4ec4..0000000
--- a/src/xenvif/settings.c
+++ /dev/null
@@ -1,694 +0,0 @@
-/* Copyright (c) Xen Project.
- * Copyright (c) Cloud Software Group, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <ntddk.h>
-#include <ntstrsafe.h>
-
-#include "registry.h"
-#include "driver.h"
-#include "dbg_print.h"
-#include "assert.h"
-#include "util.h"
-
-#define SETTINGS_TAG 'TTES'
-
-#define INTERFACES_PATH(_Name) \
- "\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services\\" ## #_Name ##
"\\Parameters\\Interfaces\\"
-
-#define IPV6_PATH \
-
"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\Nsi\\{eb004a01-9b1a-11d4-9123-0050047759bc}\\10"
-
-#define IPV4_PATH \
-
"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\Nsi\\{eb004a00-9b1a-11d4-9123-0050047759bc}\\10"
-
-#define NETLUID_STRING_LENGTH 16
-
-typedef struct _SETTINGS_COPY_IP_ADDRESS_PARAMETERS {
- CHAR SrcPrefix[NETLUID_STRING_LENGTH + 1];
- CHAR DstPrefix[NETLUID_STRING_LENGTH + 1];
-} SETTINGS_COPY_IP_ADDRESS_PARAMETERS, *PSETTINGS_COPY_IP_ADDRESS_PARAMETERS;
-
-static FORCEINLINE PVOID
-__SettingsAllocate(
- IN ULONG Length
- )
-{
- return __AllocatePoolWithTag(NonPagedPool, Length, SETTINGS_TAG);
-}
-
-static FORCEINLINE VOID
-__SettingsFree(
- IN PVOID Buffer
- )
-{
- __FreePoolWithTag(Buffer, SETTINGS_TAG);
-}
-
-static FORCEINLINE NTSTATUS
-__GuidToString(
- IN LPGUID Guid,
- OUT PANSI_STRING Ansi
- )
-{
- NTSTATUS status;
- UNICODE_STRING Unicode;
-
- status = RtlStringFromGUID(Guid, &Unicode);
- if (!NT_SUCCESS(status))
- goto fail1;
-
- status = RtlUnicodeStringToAnsiString(Ansi, &Unicode, TRUE);
- if (!NT_SUCCESS(status))
- goto fail2;
-
- RtlFreeUnicodeString(&Unicode);
-
- return STATUS_SUCCESS;
-
-fail2:
- Error("fail2\n");
-
- RtlFreeUnicodeString(&Unicode);
-
-fail1:
- Error("fail1 (%08x)\n", status);
-
- return status;
-}
-
-static NTSTATUS
-SettingsCopyIpAddressesValue(
- IN PVOID Context,
- IN HANDLE Key,
- IN PANSI_STRING ValueName,
- IN ULONG Type
- )
-{
- PSETTINGS_COPY_IP_ADDRESS_PARAMETERS Parameters = Context;
- PVOID Value;
- ULONG ValueLength;
- NTSTATUS status;
-
- UNREFERENCED_PARAMETER(Type);
-
- if (_strnicmp(ValueName->Buffer,
- Parameters->SrcPrefix,
- NETLUID_STRING_LENGTH) != 0)
- goto done;
-
- Trace(" -> %Z\n", ValueName);
-
- status = RegistryQueryBinaryValue(Key,
- ValueName->Buffer,
- &Value,
- &ValueLength);
- if (!NT_SUCCESS(status))
- goto fail1;
-
- status = RegistryDeleteValue(Key,
- ValueName->Buffer);
- if (!NT_SUCCESS(status))
- goto fail2;
-
- ASSERT(NETLUID_STRING_LENGTH < ValueName->Length);
- memcpy(ValueName->Buffer, Parameters->DstPrefix, NETLUID_STRING_LENGTH);
-
- Trace(" <- %Z\n", ValueName);
-
- status = RegistryUpdateBinaryValue(Key,
- ValueName->Buffer,
- Value,
- ValueLength);
- if (!NT_SUCCESS(status))
- goto fail3;
-
- if (ValueLength != 0)
- RegistryFreeBinaryValue(Value);
-
-done:
- return STATUS_SUCCESS;
-
-fail3:
- Error("fail3\n");
-
-fail2:
- Error("fail2\n");
-
- if (ValueLength != 0)
- RegistryFreeBinaryValue(Value);
-
-fail1:
- Error("fail1 (%08x)\n", status);
-
- return status;
-}
-
-static NTSTATUS
-SettingsCopyIpAddresses(
- IN ULONG Version,
- IN PNET_LUID OldLuid,
- IN PNET_LUID NewLuid
- )
-{
- SETTINGS_COPY_IP_ADDRESS_PARAMETERS Parameters;
- HANDLE Key;
- NTSTATUS status;
-
- status = RtlStringCbPrintfA(Parameters.SrcPrefix,
- sizeof(Parameters.SrcPrefix),
- "%016llx",
- _byteswap_uint64(OldLuid->Value));
- if (!NT_SUCCESS(status))
- goto fail1;
-
- status = RtlStringCbPrintfA(Parameters.DstPrefix,
- sizeof(Parameters.DstPrefix),
- "%016llx",
- _byteswap_uint64(NewLuid->Value));
- if (!NT_SUCCESS(status))
- goto fail2;
-
- status = RegistryOpenSubKey(NULL,
- (Version == 4) ? IPV4_PATH : IPV6_PATH,
- KEY_ALL_ACCESS,
- &Key);
- if (!NT_SUCCESS(status))
- goto fail3;
-
- Info("IPv%u: %s -> %s\n",
- Version,
- Parameters.SrcPrefix,
- Parameters.DstPrefix);
-
- status = RegistryEnumerateValues(Key,
- SettingsCopyIpAddressesValue,
- &Parameters);
- if (!NT_SUCCESS(status))
- goto fail4;
-
- RegistryCloseKey(Key);
-
- return STATUS_SUCCESS;
-
-fail4:
- Error("fail4\n");
-
- RegistryCloseKey(Key);
-
-fail3:
- Error("fail3\n");
-
-fail2:
- Error("fail2\n");
-
-fail1:
- Error("fail1 (%08x)\n", status);
-
- return status;
-}
-
-static NTSTATUS
-SettingsCopyInterfaceValue(
- IN PVOID Context,
- IN HANDLE SourceKey,
- IN PANSI_STRING ValueName,
- IN ULONG Type
- )
-{
- HANDLE DestinationKey = Context;
- NTSTATUS status;
-
- Trace(" - %Z\n", ValueName);
-
- switch (Type) {
- case REG_DWORD: {
- ULONG Value;
-
- status = RegistryQueryDwordValue(SourceKey,
- ValueName->Buffer,
- &Value);
- if (NT_SUCCESS(status))
- (VOID) RegistryUpdateDwordValue(DestinationKey,
- ValueName->Buffer,
- Value);
-
- break;
- }
- case REG_SZ:
- case REG_MULTI_SZ: {
- PANSI_STRING Value;
-
- status = RegistryQuerySzValue(SourceKey,
- ValueName->Buffer,
- NULL,
- &Value);
- if (NT_SUCCESS(status)) {
- (VOID) RegistryUpdateSzValue(DestinationKey,
- ValueName->Buffer,
- Type,
- Value);
- RegistryFreeSzValue(Value);
- }
-
- break;
- }
- case REG_BINARY: {
- PVOID Value;
- ULONG Length;
-
- status = RegistryQueryBinaryValue(SourceKey,
- ValueName->Buffer,
- &Value,
- &Length);
- if (NT_SUCCESS(status)) {
- (VOID) RegistryUpdateBinaryValue(DestinationKey,
- ValueName->Buffer,
- Value,
- Length);
- if (Length != 0)
- RegistryFreeBinaryValue(Value);
- }
-
- break;
- }
- default:
- ASSERT(FALSE);
- }
-
- return STATUS_SUCCESS;
-}
-
-static NTSTATUS
-SettingsCopyInterface(
- IN PCHAR InterfacePath,
- IN PCHAR InterfacePrefix,
- IN PANSI_STRING OldGuid,
- IN PANSI_STRING NewGuid
- )
-{
- HANDLE OldKey;
- HANDLE NewKey;
- PCHAR OldKeyName;
- PCHAR NewKeyName;
- ULONG OldKeyLength;
- ULONG NewKeyLength;
- NTSTATUS status;
-
- OldKeyLength = (ULONG)(strlen(InterfacePath) +
- strlen(InterfacePrefix) +
- OldGuid->Length +
- 1) * sizeof(CHAR);
- NewKeyLength = (ULONG)(strlen(InterfacePath) +
- strlen(InterfacePrefix) +
- NewGuid->Length +
- 1) * sizeof(CHAR);
-
- status = STATUS_NO_MEMORY;
- OldKeyName = __SettingsAllocate(OldKeyLength);
- if (OldKeyName == NULL)
- goto fail1;
-
- NewKeyName = __SettingsAllocate(NewKeyLength);
- if (NewKeyName == NULL)
- goto fail2;
-
- status = RtlStringCbPrintfA(OldKeyName,
- OldKeyLength,
- "%s%s%Z",
- InterfacePath,
- InterfacePrefix,
- OldGuid);
- if (!NT_SUCCESS(status))
- goto fail3;
-
- status = RtlStringCbPrintfA(NewKeyName,
- NewKeyLength,
- "%s%s%Z",
- InterfacePath,
- InterfacePrefix,
- NewGuid);
- if (!NT_SUCCESS(status))
- goto fail4;
-
- status = RegistryOpenSubKey(NULL,
- OldKeyName,
- KEY_READ,
- &OldKey);
- if (!NT_SUCCESS(status))
- goto fail5;
-
- status = RegistryCreateSubKey(NULL,
- NewKeyName,
- REG_OPTION_NON_VOLATILE,
- &NewKey);
- if (!NT_SUCCESS(status))
- goto fail6;
-
- status = RegistryEnumerateValues(OldKey,
- SettingsCopyInterfaceValue,
- NewKey);
- if (!NT_SUCCESS(status))
- goto fail7;
-
- RegistryCloseKey(NewKey);
- RegistryCloseKey(OldKey);
- __SettingsFree(NewKeyName);
- __SettingsFree(OldKeyName);
-
- return STATUS_SUCCESS;
-
-fail7:
- Error("fail7\n");
-
- RegistryCloseKey(NewKey);
-
-fail6:
- Error("fail6\n");
-
- RegistryCloseKey(OldKey);
-
-fail5:
- Error("fail5\n");
-
-fail4:
- Error("fail4\n");
-
-fail3:
- Error("fail3\n");
-
- __SettingsFree(NewKeyName);
-
-fail2:
- Error("fail2\n");
-
- __SettingsFree(OldKeyName);
-
-fail1:
- Error("fail1 (%08x)\n", status);
-
- return status;
-}
-
-static NTSTATUS
-SettingsStoreCurrent(
- IN HANDLE SubKey,
- IN PANSI_STRING Guid,
- IN PNET_LUID Luid
- )
-{
-
- NTSTATUS status;
-
- status = RegistryUpdateSzValue(SubKey,
- "NetCfgInstanceId",
- REG_SZ,
- Guid);
- if (!NT_SUCCESS(status))
- goto fail1;
-
- status = RegistryUpdateBinaryValue(SubKey,
- "NetLuid",
- Luid,
- sizeof(NET_LUID));
- if (!NT_SUCCESS(status))
- goto fail2;
-
- (VOID) RegistryDeleteValue(SubKey,
- "HasSettings");
-
- return STATUS_SUCCESS;
-
-fail2:
- Error("fail2\n");
-
-fail1:
- Error("fail1 (%08x)\n", status);
-
- return status;
-}
-
-static NTSTATUS
-SettingsCopy(
- IN PCHAR SubKeyName,
- IN PANSI_STRING OldGuid,
- IN PNET_LUID OldLuid,
- IN PANSI_STRING NewGuid,
- IN PNET_LUID NewLuid
- )
-{
- HANDLE SettingsKey;
- HANDLE SubKey;
- NTSTATUS status;
-
- Trace("====>\n");
- Info("VIF/%s: FROM %Z\n", SubKeyName, OldGuid);
- Info("VIF/%s: TO %Z\n", SubKeyName, NewGuid);
-
- (VOID) SettingsCopyInterface(INTERFACES_PATH(NetBT),
- "Tcpip_",
- OldGuid,
- NewGuid);
-
- (VOID) SettingsCopyInterface(INTERFACES_PATH(Tcpip),
- "",
- OldGuid,
- NewGuid);
-
- (VOID) SettingsCopyInterface(INTERFACES_PATH(Tcpip6),
- "",
- OldGuid,
- NewGuid);
-
- (VOID) SettingsCopyIpAddresses(4,
- OldLuid,
- NewLuid);
-
- (VOID) SettingsCopyIpAddresses(6,
- OldLuid,
- NewLuid);
-
- SettingsKey = DriverGetSettingsKey();
-
- status = RegistryCreateSubKey(SettingsKey,
- SubKeyName,
- REG_OPTION_NON_VOLATILE,
- &SubKey);
- if (!NT_SUCCESS(status))
- goto fail1;
-
- status = SettingsStoreCurrent(SubKey,
- NewGuid,
- NewLuid);
- if (!NT_SUCCESS(status))
- goto fail2;
-
- RegistryCloseKey(SubKey);
-
- Trace("<====\n");
-
- return STATUS_SUCCESS;
-
-fail2:
- Error("fail2\n");
-
- RegistryCloseKey(SubKey);
-
-fail1:
- Error("fail1 (%08x)\n", status);
-
- return status;
-}
-
-NTSTATUS
-SettingsSave(
- IN PCHAR SubKeyName,
- IN PWCHAR Alias,
- IN PWCHAR Description,
- IN LPGUID InterfaceGuid,
- IN PNET_LUID InterfaceLuid
- )
-{
- HANDLE SettingsKey;
- HANDLE SubKey;
- ANSI_STRING Ansi;
- ULONG HasSettings;
- NTSTATUS status;
-
- Info("FROM %ws (%ws)\n", Alias, Description);
-
- status = __GuidToString(InterfaceGuid, &Ansi);
- if (!NT_SUCCESS(status))
- goto fail1;
-
- SettingsKey = DriverGetSettingsKey();
-
- status = RegistryCreateSubKey(SettingsKey,
- SubKeyName,
- REG_OPTION_NON_VOLATILE,
- &SubKey);
- if (!NT_SUCCESS(status))
- goto fail2;
-
- HasSettings = 0;
- status = RegistryQueryDwordValue(SubKey,
- "HasSettings",
- &HasSettings);
- if (!NT_SUCCESS(status))
- HasSettings = 0;
- if (HasSettings != 0)
- goto done;
-
- Info("FROM %Z\n", Ansi);
- Info("FROM %016llx\n", InterfaceLuid->Value);
-
- status = SettingsStoreCurrent(SubKey,
- &Ansi,
- InterfaceLuid);
- if (!NT_SUCCESS(status))
- goto fail3;
-
- RtlFreeAnsiString(&Ansi);
-
-done:
- RegistryCloseKey(SubKey);
-
- return STATUS_SUCCESS;
-
-fail3:
- Error("fail3\n");
-
- RegistryCloseKey(SubKey);
-
-fail2:
- Error("fail2\n");
-
- RtlFreeAnsiString(&Ansi);
-
-fail1:
- Error("fail1 (%08x)\n", status);
-
- return status;
-}
-
-NTSTATUS
-SettingsRestore(
- IN PCHAR SubKeyName,
- IN PWCHAR Alias,
- IN PWCHAR Description,
- IN LPGUID InterfaceGuid,
- IN PNET_LUID InterfaceLuid
- )
-{
- HANDLE SettingsKey;
- HANDLE SubKey;
- ANSI_STRING Ansi;
- PANSI_STRING NetCfgInstanceId;
- PNET_LUID NetLuid;
- ULONG NetLuidLength;
- NTSTATUS status;
-
- SettingsKey = DriverGetSettingsKey();
-
- status = RegistryOpenSubKey(SettingsKey,
- SubKeyName,
- KEY_READ,
- &SubKey);
- if (!NT_SUCCESS(status))
- goto fail1;
-
- status = RegistryQuerySzValue(SubKey,
- "NetCfgInstanceId",
- NULL,
- &NetCfgInstanceId);
- if (!NT_SUCCESS(status))
- goto fail2;
-
- NetLuidLength = 0;
- status = RegistryQueryBinaryValue(SubKey,
- "NetLuid",
- &NetLuid,
- &NetLuidLength);
- if (!NT_SUCCESS(status))
- goto fail3;
-
- status = __GuidToString(InterfaceGuid, &Ansi);
- if (!NT_SUCCESS(status))
- goto fail4;
-
- if (RtlCompareString(NetCfgInstanceId, &Ansi, TRUE) != 0) {
- Info("TO %ws (%ws)\n", Alias, Description);
- Info("TO %Z\n", Ansi);
- Info("TO %016llx\n", InterfaceLuid->Value);
-
- SettingsCopy(SubKeyName,
- NetCfgInstanceId,
- NetLuid,
- &Ansi,
- InterfaceLuid);
- } else {
- Info("%s: SettingsCopy not required for %ws\n",
- SubKeyName,
- Description);
- }
-
- RtlFreeAnsiString(&Ansi);
-
- if (NetLuidLength != 0)
- RegistryFreeBinaryValue(NetLuid);
-
- RegistryFreeSzValue(NetCfgInstanceId);
-
- RegistryCloseKey(SubKey);
-
- return STATUS_SUCCESS;
-
-fail4:
- Error("fail4\n");
-
- if (NetLuidLength != 0)
- RegistryFreeBinaryValue(NetLuid);
-
-fail3:
- Error("fail3\n");
-
- RegistryFreeSzValue(NetCfgInstanceId);
-
-fail2:
- Error("fail2\n");
-
- RegistryCloseKey(SubKey);
-
-fail1:
- Error("fail1 (%08x)\n", status);
-
- return status;
-}
diff --git a/src/xenvif/settings.h b/src/xenvif/settings.h
deleted file mode 100644
index 3f964bb..0000000
--- a/src/xenvif/settings.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (c) Xen Project.
- * Copyright (c) Cloud Software Group, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _XENVIF_SETTINGS_H
-#define _XENVIF_SETTINGS_H
-
-extern NTSTATUS
-SettingsSave(
- IN PCHAR SubKeyName,
- IN PWCHAR Alias,
- IN PWCHAR Description,
- IN LPGUID InterfaceGuid,
- IN PNET_LUID InterfaceLuid
- );
-
-extern NTSTATUS
-SettingsRestore(
- IN PCHAR SubKeyName,
- IN PWCHAR Alias,
- IN PWCHAR Description,
- IN LPGUID InterfaceGuid,
- IN PNET_LUID InterfaceLuid
- );
-
-#endif // _XENVIF_SETTINGS_H
diff --git a/vs2019/xenvif/xenvif.vcxproj b/vs2019/xenvif/xenvif.vcxproj
index 0412426..3e48cf7 100644
--- a/vs2019/xenvif/xenvif.vcxproj
+++ b/vs2019/xenvif/xenvif.vcxproj
@@ -82,7 +82,6 @@
<ClCompile Include="../../src/xenvif/pdo.c" />
<ClCompile Include="../../src/xenvif/receiver.c" />
<ClCompile Include="../../src/xenvif/registry.c" />
- <ClCompile Include="../../src/xenvif/settings.c" />
<ClCompile Include="../../src/xenvif/thread.c" />
<ClCompile Include="../../src/xenvif/transmitter.c" />
<ClCompile Include="../../src/xenvif/controller.c" />
diff --git a/vs2022/xenvif/xenvif.vcxproj b/vs2022/xenvif/xenvif.vcxproj
index be84232..af9fe96 100644
--- a/vs2022/xenvif/xenvif.vcxproj
+++ b/vs2022/xenvif/xenvif.vcxproj
@@ -74,7 +74,6 @@
<ClCompile Include="../../src/xenvif/pdo.c" />
<ClCompile Include="../../src/xenvif/receiver.c" />
<ClCompile Include="../../src/xenvif/registry.c" />
- <ClCompile Include="../../src/xenvif/settings.c" />
<ClCompile Include="../../src/xenvif/thread.c" />
<ClCompile Include="../../src/xenvif/transmitter.c" />
<ClCompile Include="../../src/xenvif/controller.c" />