Пытаюсь изменить значение реестра типа reg_binary
type
TBuffer = array[0..11] of byte;
const InputData:TBuffer=($07,$00,$00,$00,$6F,$2B,$15,$00,$40,$AB,$D3,$01);
var
Reg: TRegistry;
InputBuffer: TBuffer;
begin
InputBuffer := InputData;
Reg := TRegistry.Create();
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('....', True) then
begin
Reg.WriteBinaryData('Health',InputBuffer, SizeOf(InputBuffer));//пробовал и InputBuffer[0]
Reg.CloseKey;
end;
finally
Reg.Free;
end;
Пробовал и так :
var
Data: array of Byte;
....
SetLength(Data, 12);
Data[0] := $07;
Data[1] := $00;
Data[2] := $00;
Data[3] := $00;
Data[4] := $6F;
Data[5] := $2B;
Data[6] := $15;
Data[7] := $00;
Data[8] := $40;
Data[9] := $AB;
Data[10] := $D3;
Data[11] := $01;
Reg := TRegistry.Create(KEY_SET_VALUE);
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('....', True) then
begin
Reg.WriteBinaryData('Health',Data, 12); //пробовал и Data[0]
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;
Но изменений никаких нет, написал подобное на c#
RegistryKey currentUserKey = Registry.LocalMachine;
RegistryKey helloKey = currentUserKey.OpenSubKey(@"...", true);
helloKey.SetValue("Health", new byte[] { 07, 00, 00, 00, 0x6F, 0x2B, 15, 00, 40, 0xAB, 0xD3, 01, });
helloKey.Close();
и значение изменилось. Где я в delphi ошибся ?
п.с от админа запускаю
Ответ
В 64-х битной Windows для 32-х битных приложений есть т.н. виртуализация, из-за которой эти приложения видят свою, 32-х битную версию реестра (Alternate Registry View).
Для того, чтобы 32-х битное приложение смогло увидеть системную 64-х битную версию реестра, надо использовать флаг KEY_WOW64_64KEY (0x0100)
KEY_WOW64_64KEY Indicates that an application on 64-bit Windows should
operate on the 64-bit registry view. This flag is ignored by
32-bit Windows.
This flag must be combined using the OR operator with the other flags in this table that either query or access registry values.
То есть, нужно делать так:
Reg := TRegistry.Create(KEY_WRITE OR KEY_WOW64_64KEY);
try
...
finally
...
end;
Комментариев нет:
Отправить комментарий