Hardware ID Extractor

The Hardware ID Extractor is a library for programmers. It offers functions that extract data about your computer’s hardware (CPU, HDD, RAM, main board, video BIOS), including unique hardware identification numbers. The data is extracted via low level functions DIRECTLY from computer’s hardware. This means that the data cannot be faked!

The DLL is ideal for creating highly reliable protections schemes for your application. Source code, compiled DLL and demo application are available.

Key features

  • Easily obtains unique computer fingerprint based on unique hardware serial numbers
  • Helps you to build protections systems (for example trial software) and banning systems (gaming)
  • Support .NET, Win32 and Microsoft VBA programming languages
  • Supports all Microsoft operating systems, from Windows 95 to Windows Vista and Window 7
  • It has no dependencies on other system components/libraries
  • No installation required
  • Free upgrades for life

Extracted information

Hard disk

  •  Hard drive ID (unique hardware serial number written in drive’s IDE electronic chip)
  •  Partition ID (volume serial number)

CPU

  •  CPU ID (unique hardware ID)
  • CPU vendor
  • CPU current running speed
  • CPU theoretic speed (CPU rated speed)

Physical memory

  • Memory Load ( Total memory used in percentage (%) )
  • Total Physical ( Total physical memory in bytes )
  • Avail Physical ( Physical memory left in bytes )
  • Total PageFile ( Total page file in bytes )
  • Available PageFile( Page file left in bytes )
  • Total Virtual( Total virtual memory in bytes )
  • Available Virtual ( Virtual memory left in bytes )

BIOS

  • BiosDate
  • BiosVersion
  • BiosProductID
  • BiosVideo

Programming languages supported

The DLL provided was compiled using the standard calling convention (StdCall). Therefore, it is compatible with all modern programming languages such as C Builder, Visual C (basically all strains of C/C++), Visual Basic, Liberty Basic, Visual Fox Pro, Delphi, Lazarus, Free Pascal, PowerBuilder, Clarion, Visual Studio (C#, VB). The DLL also supports Microsoft VBA powered languages such as Word, PowerPoint 2000, 2003, 2007, Excel, Access or other scripted languages. Click here to see how to call the DLL from your language.

Demo program

This program is 100% freeware. It requires no installation. To uninstall it, just delete it from your computer.

Download now

hardware ID extractor delphi source code

Functions exported by HardwareIDExtractorC.DLL

{ DLL Management }

procedure ReleaseMemory (P: PAnsiChar); stdcall; { It is CRITICAL to call ReleaseMemory after each call to a function that returns a string. Details in the archive. }
function GetDllVersion: Real; stdcall;        { Returns the version of this DLL }

{ CPU }
function CPUFamily : PAnsiChar; stdcall; { Get cpu identifier from the windows registry }
function GetCPUVendor : PAnsiChar; stdcall; { GetCPUVendor function }
function GetCPUSpeed : Double; stdcall; { The higher the delay, the accurate the result. Default= 200ms }
function IsIntel64BitCPU : Boolean; stdcall; { Detects IA64 processors }
function GetCpuTheoreticSpeed: Integer; stdcall; { Get cpu speed (in MHz) }
function IsCPUIDAvailable : Boolean; stdcall;
function GetCPUID (CoreMask: Word): PAnsiChar; stdcall; { Get the ID of the specified physical core }
function GetCpuIdNow : PAnsiChar; stdcall; { Get the ID of the first available core }
function GetCPUCount : Integer; stdcall; { The number of LOGICAL processors in the current group }

{ RAM }
function SystemMemStatus (CONST OSMemType : Byte): Cardinal; stdcall; { in Bytes. Limited by the capacity of the OS (32bits OSs will report max 2 or 3 GB). See constants defined above }
function SystemMemStatus_KB (CONST OSMemType : Byte): PAnsiChar; stdcall;
function SystemMemStatus_MB (CONST OSMemType : Byte): PAnsiChar; stdcall;

{ PROCESS RAM }
function ProcessMemStatus (CONST ProcMemType: Byte= 1): Cardinal; stdcall; { Returns data about the memory used of the current process }
function ProcessPeakMem : PAnsiChar; stdcall; { Shows the highest amount of memory this program ever occupied }
function ProcessCurrentMem: PAnsiChar; stdcall;

{ VIRTUAL RAM }
function GetPageSize : Cardinal; stdcall; { The page size and the granularity of page protection and commitment. This is the page size used by the VirtualAlloc function. }
function GetMemGranularity: Integer; stdcall; { Granularity with which virtual memory is allocated (in KB) }

{ RAM – Advanced stuff }
function GetLowAddr : Cardinal; stdcall; { Lowest RAM memory address accessible to applications (this is the RAM address, not virtual memory address) }
function GetHiAddr : Cardinal; stdcall; { Lowest RAM memory address accessible to applications }
function TrimWorkingSet; stdcall; { Minimizes the amount to RAM used by application by swapping the unused pages back to disk }

{ HDD }
function GetPartitionID (Partition : PAnsiChar): PAnsiChar; stdcall; { Get the ID of the specified patition. Example of parameter: ‘C:’ }
function GetIDESerialNumber(DriveNumber: Byte ): PAnsiChar; stdcall; { DriveNr starts from 0 (for the first drive) }

{ BIOS (NEW!) }
function BiosDate : PAnsiChar; stdcall;
function BiosVersion : PAnsiChar; stdcall; { Could be something like: TOSQCI – 6040000 Ver 1.00PARTTBL. TOS is from Toshiba, Q is comming from product series (Qosmio) }
function BiosProductID: PAnsiChar; stdcall; { Manufacturer product (laptop, PC) ID – Could be something like: Toshiba_PQX33U-01G00H }
function BiosVideo : PAnsiChar; stdcall;

{ UTILS }
function GenerateHardwareReport: PAnsiChar; { Before calling this I need to enter a valid key into CubicHardID: }
function FormatBytes (CONST Size: Int64; CONST Decimals: Integer): PAnsiChar; stdcall; { Format bytes to KB, MB, GB, TB }
function BinToInt (Value: PAnsiChar): Integer; stdcall; {Utility. Convers a string representing a binary value ‘110101010’ to integer }
function IntToBin (CONST Value, Digits: integer): PAnsiChar; stdcall; {Utility. Convers an integer to its binary representation such as ‘110101010’ }
function CoreNumber2CoreMask(CoreNo: integer): integer; stdcall; {Utility function that can be used as ‘CPUMask’ parameter for ‘GetCPUID’ }

Source code

You can purchase the DLL here and the source code here.

More demo code here.

Scroll to Top