diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 203a4e0..2922408 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,4 +1,7 @@
-Version 1.5 -
+Version 1.6 - 2026-02-09
+ * Add fallback method when NtSetValueKey fails
+
+Version 1.5 - 2025-04-14
* Add support for .pol files
* Extend .reg file format for readability of REG_MULTI_SZ,
REG_EXPAND_SZ and REG_QWORD values
diff --git a/LICENSE.txt b/LICENSE.txt
index ffa6692..f51c1fe 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,4 +1,4 @@
- Copyright 2025 Stormshield
+ Copyright 2026 Stormshield
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/README.txt b/README.txt
index 8c3c910..c128634 100644
--- a/README.txt
+++ b/README.txt
@@ -1,4 +1,4 @@
-(C) 2025 Stormshield
+(C) 2026 Stormshield
HiveSwarming - Conversions between registry hive and registry export formats
without a need for special privileges.
@@ -74,3 +74,15 @@ A. This is a consequence of the internals of registry hives. We try to delete
Q. Do you accept pull requests?
A. They are welcome and will be reviewed.
+
+GET IT
+------
+
+Hiveswarming is a standalone executable. You can just download it from the
+Github release pages. The executable should be digitally signed.
+
+As of August 2025, Hiveswarming v1.5 has been made available on WinGet by a
+third-party user contribution (@upintheairsheep).
+You can install this specific version with:
+ winget install Hiveswarming --exact --id HiveSwarming --version 1.5.0.0
+
diff --git a/src/CommonFunctions.cpp b/src/CommonFunctions.cpp
index b214de5..f2805d9 100644
--- a/src/CommonFunctions.cpp
+++ b/src/CommonFunctions.cpp
@@ -1,4 +1,4 @@
-// (C) Stormshield 2025
+// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
diff --git a/src/CommonFunctions.h b/src/CommonFunctions.h
index 9adc9f1..aec455f 100644
--- a/src/CommonFunctions.h
+++ b/src/CommonFunctions.h
@@ -1,4 +1,4 @@
-// (C) Stormshield 2025
+// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
diff --git a/src/Constants.h b/src/Constants.h
index ed1b2d0..1273ba2 100644
--- a/src/Constants.h
+++ b/src/Constants.h
@@ -1,4 +1,4 @@
-// (C) Stormshield 2025
+// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
diff --git a/src/Conversions.h b/src/Conversions.h
index 02a885a..ac491cd 100644
--- a/src/Conversions.h
+++ b/src/Conversions.h
@@ -1,4 +1,4 @@
-// (C) Stormshield 2025
+// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
diff --git a/src/HiveSwarming.cpp b/src/HiveSwarming.cpp
index 71fe7b3..2f3267d 100644
--- a/src/HiveSwarming.cpp
+++ b/src/HiveSwarming.cpp
@@ -1,4 +1,4 @@
-// (C) Stormshield 2025
+// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
diff --git a/src/HiveSwarming.rc b/src/HiveSwarming.rc
index 08b28f9..a91dfae 100644
--- a/src/HiveSwarming.rc
+++ b/src/HiveSwarming.rc
@@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,5,0,0
- PRODUCTVERSION 1,5,0,0
+ FILEVERSION 1,6,0,0
+ PRODUCTVERSION 1,6,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -43,12 +43,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Stormshield SAS"
VALUE "FileDescription", "Conversions between Registry export format and Registry hive"
- VALUE "FileVersion", "1.5.0.0"
+ VALUE "FileVersion", "1.6.0.0"
VALUE "InternalName", "HiveSwarming.exe"
- VALUE "LegalCopyright", "Copyright (C) 2025 Stormshield SAS"
+ VALUE "LegalCopyright", "Copyright (C) 2026 Stormshield SAS"
VALUE "OriginalFilename", "HiveSwarming.exe"
VALUE "ProductName", "HiveSwarming"
- VALUE "ProductVersion", "1.5.0.0"
+ VALUE "ProductVersion", "1.6.0.0"
END
END
BLOCK "VarFileInfo"
diff --git a/src/HiveSwarming.vcxproj b/src/HiveSwarming.vcxproj
index 441d2e5..122deda 100644
--- a/src/HiveSwarming.vcxproj
+++ b/src/HiveSwarming.vcxproj
@@ -80,6 +80,7 @@
Consoletrue
+ /PDBALTPATH:Hiveswarming.pdb %(AdditionalOptions)
@@ -87,8 +88,6 @@
_DEBUG;%(PreprocessorDefinitions)MultiThreadedDebug
-
-
diff --git a/src/HiveToInternal.cpp b/src/HiveToInternal.cpp
index f92d99b..1e88f92 100644
--- a/src/HiveToInternal.cpp
+++ b/src/HiveToInternal.cpp
@@ -1,4 +1,4 @@
-// (C) Stormshield 2025
+// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
diff --git a/src/InternalToHive.cpp b/src/InternalToHive.cpp
index a8fcb1e..f8e5ae2 100644
--- a/src/InternalToHive.cpp
+++ b/src/InternalToHive.cpp
@@ -1,4 +1,4 @@
-// (C) Stormshield 2025
+// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
@@ -107,8 +107,12 @@ _Must_inspect_result_ static HRESULT InternalToHkey
NTSTATUS Status = NtSetValueKey(KeyHandle, &ValueName, 0ul, Value.Type, (PVOID)Value.BinaryValue.data(), static_cast(Value.BinaryValue.size()));
if (NT_SUCCESS(Status) == FALSE)
{
- ReportError(Status, L"Could not set value " + Value.Name + L" of key " + RegKey.Name + L" with NtSetValueKey, trying fallback");
- goto Cleanup;
+ Result = RegSetKeyValueW(KeyHandle, nullptr, Value.Name.c_str(), Value.Type, (PVOID)Value.BinaryValue.data(), static_cast(Value.BinaryValue.size()));
+ if (FAILED(Result)) {
+ ReportError(HRESULT_FROM_NT(Status), L"Could not set value " + Value.Name + L" of key " + RegKey.Name + L" with NtSetValueKey.");
+ ReportError(Result, L"Could not set value " + Value.Name + L" of key " + RegKey.Name + L" with RegSetKeyValueW as fallback.");
+ goto Cleanup;
+ }
}
}
diff --git a/src/InternalToPolfile.cpp b/src/InternalToPolfile.cpp
index bad0e5c..8a8c680 100644
--- a/src/InternalToPolfile.cpp
+++ b/src/InternalToPolfile.cpp
@@ -1,4 +1,4 @@
-// (C) Stormshield 2025
+// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
diff --git a/src/InternalToRegfile.cpp b/src/InternalToRegfile.cpp
index 3beb052..d505c20 100644
--- a/src/InternalToRegfile.cpp
+++ b/src/InternalToRegfile.cpp
@@ -1,4 +1,4 @@
-// (C) Stormshield 2025
+// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
diff --git a/src/PolfileToInternal.cpp b/src/PolfileToInternal.cpp
index 8af46cc..96d2bed 100644
--- a/src/PolfileToInternal.cpp
+++ b/src/PolfileToInternal.cpp
@@ -1,4 +1,4 @@
-// (C) Stormshield 2025
+// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
diff --git a/src/RegfileToInternal.cpp b/src/RegfileToInternal.cpp
index fa495fb..a50e38a 100644
--- a/src/RegfileToInternal.cpp
+++ b/src/RegfileToInternal.cpp
@@ -1,4 +1,4 @@
-// (C) Stormshield 2025
+// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details