Hola.
Por si fuera de utilidad, hice un ejemplo simple que guarda cifrado el numero de serie lógico del disco en el registro y luego lo recupera:
Código Delphi
[-]
...
uses Registry;
procedure WriteRegKey(const ARootKey: HKEY; const AKey, Valor, NSer: string);
begin
with TRegistry.Create(KEY_WRITE) do
try
RootKey := ARootKey;
if not OpenKey(AKey, True) then
raise Exception.Create('Error escribiendo el registro')
else
begin
WriteString(Valor, NSer);
CloseKey;
end
finally
Free
end
end;
function ReadRegKey(const ARootKey: HKEY; const AKey, Valor: string): string;
begin
with TRegistry.Create do
try
RootKey := ARootKey;
if not OpenKey(AKey, False) then
raise Exception.Create('Error leyendo el registro')
else
begin
ReadString(Result);
CloseKey
end
finally
Free
end
end;
function HDSerial(const lpRootPathName: PChar): string;
var
lpMaximumComponentLength: DWORD;
lpFileSystemFlags: DWORD;
lpVolumeSerialNumber: DWORD;
lpVolumeNameBuffer: array[0..MAX_PATH] of Char;
begin
GetVolumeInformation(PChar(lpRootPathName),
@lpVolumeNameBuffer,
SizeOf(lpVolumeNameBuffer),
@lpVolumeSerialNumber,
lpMaximumComponentLength,
lpFileSystemFlags, nil, 0);
Result := IntToHex(HiWord(lpVolumeSerialNumber),4) +
IntToHex(LoWord(lpVolumeSerialNumber),4);
end;
procedure Cifrar(var Valor: string);
var
i: integer;
begin
for i:= 1 to Length(Valor) do
Valor[i]:= Chr(((Ord(Valor[i]) xor 172)xor 15));
end;
procedure TForm1.Button1Click(Sender: TObject);
const
VALOR_KEY = '\Software\Microsoft\Windows\CurrentVersion';
var
NSer: string;
begin
NSer:= HDSerial('C:\'); Label1.Caption:='Serial Original: ' + NSer; Cifrar(NSer); WriteRegKey(HKEY_LOCAL_MACHINE,VALOR_KEY,'NombreConfuso',NSer);
NSer:= ReadRegKey(HKEY_LOCAL_MACHINE,VALOR_KEY,'NombreConfuso');
Label2.Caption:='Serial Cifrado: ' + NSer; Cifrar(NSer); Label3.Caption:= 'Serial Restaurado: '+Nser;end;
Como es sólo un ejemplo la rutina de cifrado no es ninguna maravilla
, pero se puede cambiar por la que sea.
Espero que sirva como base para mejorarlo a gusto
Un saludo.