Add RegSetKeyValueW as fallback to NtSetValueKey

Also:
- Update copyright year
- Strip PDB Path information from builds
This commit is contained in:
bmortgat
2026-02-09 10:48:32 +01:00
parent d05143ef95
commit 07bd6545c7
16 changed files with 41 additions and 23 deletions
+4 -1
View File
@@ -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
+1 -1
View File
@@ -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.
+13 -1
View File
@@ -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
+1 -1
View File
@@ -1,4 +1,4 @@
// (C) Stormshield 2025
// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
+1 -1
View File
@@ -1,4 +1,4 @@
// (C) Stormshield 2025
// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
+1 -1
View File
@@ -1,4 +1,4 @@
// (C) Stormshield 2025
// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
+1 -1
View File
@@ -1,4 +1,4 @@
// (C) Stormshield 2025
// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
+1 -1
View File
@@ -1,4 +1,4 @@
// (C) Stormshield 2025
// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
+5 -5
View File
@@ -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"
+1 -2
View File
@@ -80,6 +80,7 @@
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalOptions>/PDBALTPATH:Hiveswarming.pdb %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
@@ -87,8 +88,6 @@
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
<Link>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
<ClCompile>
+1 -1
View File
@@ -1,4 +1,4 @@
// (C) Stormshield 2025
// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
+7 -3
View File
@@ -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<ULONG>(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<ULONG>(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;
}
}
}
+1 -1
View File
@@ -1,4 +1,4 @@
// (C) Stormshield 2025
// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
+1 -1
View File
@@ -1,4 +1,4 @@
// (C) Stormshield 2025
// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
+1 -1
View File
@@ -1,4 +1,4 @@
// (C) Stormshield 2025
// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details
+1 -1
View File
@@ -1,4 +1,4 @@
// (C) Stormshield 2025
// (C) Stormshield 2026
// Licensed under the Apache license, version 2.0
// See LICENSE.txt for details