Skip to content

MagmaMCNet/LibSerials

Repository files navigation

LibSerials

C++20 Windows static library for gathering hardware serial numbers and system information from SMBIOS, WMI, CPUID, and DXGI.

Supported Information

  • BIOS (Vendor, Version, Date)
  • System (Manufacturer, Product, Version, Serial, SKU, Family, UUID)
  • Baseboard (Manufacturer, Product, Serial)
  • Chassis (Manufacturer, Version, Serial)
  • CPU (Product, Serial, Socket, Family, Manufacturer, Version, Clock, Cores, Threads)
  • GPU (Name)
  • MAC Addresses (List, Main with virtual adapter filtering)
  • HDD Serial Numbers
  • TPM (Vendor, Spec Version, Firmware Version)
  • Cache, System Slots, Memory Arrays, Battery
  • HWID Generation & Validation

Example Serials Using The Built in Debug UI

image

Quick Start

#include "LibSerials/LibSerials.hpp"

int main() {
    LibSerials::InitializeSerials();

    std::cout << "Baseboard: " << LibSerials::Baseboard_Serial() << std::endl;
    std::cout << "CPU:       " << LibSerials::CPU_Product() << std::endl;
    std::cout << "UUID:      " << LibSerials::System_UUID() << std::endl;
    std::cout << "HWID:      " << LibSerials::System_HWID() << std::endl;

    LibSerials::FreeSerials();
}

HWID System

The HWID is generated from 4 hardware components, each hashed with FNV-1a (64-bit folded to 32-bit) producing an 8 character hex segment:

XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX
baseboard   uuid      cpu      hdd

Validation

System_ValidateHWID compares a saved HWID against the current hardware. Each component has a configurable penalty weight. If the total penalty for changed components stays within the threshold (default 40), validation passes.

Component Default Weight
Baseboard 20
SMBIOS (UUID) 50
CPU 30
HDD 40
std::string hwid = LibSerials::System_HWID();
// ... save hwid somewhere ...

// Later, validate:
if (LibSerials::System_ValidateHWID(saved_hwid)) {
    // Hardware matches (within tolerance)
}

// Adjust weights:
LibSerials::Component_SetPercentage(Component::HDD, 20);

API Reference

All functions return std::string or std::vector<std::string>. Call InitializeSerials() before use and FreeSerials() to clean up.

Lifecycle

Function Description
InitializeSerials() Parses SMBIOS tables (thread-safe, call once)
FreeSerials() Frees all parsed data and SMBIOS buffer

BIOS

Function Description
BIOS_Vendor() BIOS vendor name
BIOS_Version() BIOS version string
BIOS_Date() BIOS release date

System

Function Description
System_Manufacturer() System manufacturer
System_Product() System product name
System_Version() System version
System_Serial() System serial number
System_SKU() System SKU identifier
System_Family() System family
System_UUID() System UUID
System_HWID() Generated hardware ID string
System_ValidateHWID(saved) Validate HWID against current hardware

Baseboard

Function Description
Baseboard_Manufacturer() Baseboard manufacturer
Baseboard_Product() Baseboard product name
Baseboard_Serial() Baseboard serial (via WMI)

Chassis

Function Description
Chassis_Manufacturer() Chassis manufacturer
Chassis_Version() Chassis version
Chassis_Serial() Chassis serial number

CPU

Function Description
CPU_Product() CPU product name (via CPUID)
CPU_Serial() CPU serial number (via CPUID)
CPU_Socket() Socket designation
CPU_Family() Processor family
CPU_Manufacturer() CPU manufacturer
CPU_Version() CPU version string
CPU_ClockSpeed() Current speed in MHz
CPU_MaxSpeed() Max speed in MHz
CPU_Cores() Core count
CPU_Threads() Thread count

GPU

Function Description
GPU_Name() Primary GPU name (via DXGI)

MAC Address

Function Description
MACAddress_List() All MAC addresses
MACAddress_Main() Primary non-virtual MAC address

HDD

Function Description
HDD_Serials() Serial numbers for all physical drives

TPM

Function Description
TPM_Present() Whether a TPM device was found
TPM_Vendor() TPM vendor ID
TPM_SpecVersion() TPM spec version
TPM_FirmwareVersion() TPM firmware version

Cache / Slots / Memory / Battery

Function Description
Cache_Count() Number of cache entries
Cache_Designation(i) Cache designation string
Slot_Count() Number of system slots
Slot_Designation(i) Slot designation string
Slot_Type(i) Slot type
MemoryArray_Count() Number of memory arrays
MemoryArray_MaxCapacity(i) Max capacity
MemoryArray_DeviceCount(i) Device count
Battery_Count() Number of batteries
Battery_Location(i) Battery location
Battery_Manufacturer(i) Battery manufacturer

Component Percentages

Function Description
Component_GetPercentage(item) Get penalty weight for a component
Component_SetPercentage(item, value) Set penalty weight for a component

Building

The project builds as a static library (.lib) for Debug, Release, and Library configurations. The ExeRelease|x64 configuration builds a console application with the built-in debug UI.

Requires: Visual Studio 2022+ with C++20 support, Windows SDK 10.0.

Contribution

Feel free to contribute by submitting pull requests, reporting issues, or suggesting new features.

About

Small C++ Library For Gathering Serial Information About the System

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages