Create or Modify Registry Value - Delphi

DarkCoderSc personal avatar
DarkCoderSc

Jean-Pierre LESUEUR

// ...

procedure SetRegistryValue(const AHive : HKEY; const AKeyPath, AValueName : String; const AValueType : DWORD;
  const pData : Pointer; const ADataSize : UInt64);
begin
  var AKeyHandle : HKEY;
  var AResult := RegOpenKeyExW(AHive, PWideChar(AKeyPath), 0, KEY_SET_VALUE, AKeyHandle);
  if AResult <> ERROR_SUCCESS then
    raise EWindowsException.Create('RegOpenKeyW', AResult);
  try
    AResult := RegSetValueExW(
      AKeyHandle,
      PWideChar(AValueName),
      0,
      AValueType,
      pData,
      ADataSize
    );
    if AResult <> ERROR_SUCCESS then
      raise EWindowsException.Create('RegSetValueExW', AResult);
  finally
    RegCloseKey(AKeyHandle);
  end;
end;

// ...

begin
  try
    var ATargetHive := HKEY_CURRENT_USER;
    var ATargetKey := 'Software';

    var ADword : DWORD := 2801;
    SetRegistryValue(ATargetHive, ATargetKey, 'My DWORD', REG_DWORD, @ADword, SizeOf(DWORD));

    var AQword : UInt64 := 1403201414032014;
    SetRegistryValue(ATargetHive, ATargetKey, 'My QWORD', REG_QWORD, @AQword, SizeOf(UInt64));

    var AString := 'Hello, World';
    SetRegistryValue(ATargetHive, ATargetKey, 'My String', REG_SZ, PWideChar(AString), Length(AString) * SizeOf(WideChar));

    var pData := nil;
    var ADataSize := High(Byte) +1;
    try
      GetMem(pData, ADataSize);
      for var I := 0 to ADataSize -1 do
        PByte(NativeUInt(pData) + I)^ := I;
      ///

      SetRegistryValue(ATargetHive, ATargetKey, 'My Binary', REG_BINARY, pData, ADataSize);
    finally
      FreeMem(pData, ADataSize);
    end;
  except
    on e : Exception do
      WriteLn(e.Message);
  end;

// ...

Creating and researching code snippets takes time and effort. You’re welcome to share them through your own platforms, but please don’t forget to credit the original author, here: Jean-Pierre LESUEUR.

no AI logo


Depends On


Created

December 2, 2025

Last Revised

December 2, 2025