gpt4 book ai didi

delphi - 为什么我无法从 Delphi 2010 程序中打开 'HKLM\\SYSTEM\CurrentControlSet\Enum'?

转载 作者:行者123 更新时间:2023-12-03 05:32:07 32 4
gpt4 key购买 nike

我正在尝试编写一个实用程序来自动设置 PC 以使用 FTDI 串行>USB 转换器测试设备的过程。这需要查找已安装的设备信息并写入上述配置单元。我已经实现了特权提升并签署了程序,但它不允许我打开 key 。我可以打开父项,但不能打开“Enum”键或其子项。

procedure TForm4.Button1Click(Sender: TObject);
var
aReg: TRegistry;
sl: TStringList;
begin
aReg := TRegistry.Create;
try
aReg.RootKey := HKEY_LOCAL_MACHINE;
if aReg.OpenKey('\SYSTEM\CurrentControlSet\Enum', false) then // \Enum\USB\VID_0403&PID_6001', false) then
begin
sl := TStringList.Create;
try
aReg.GetKeyNames(sl);
Memo1.Lines.Assign(sl);
Memo1.Lines.Add(IntToStr(sl.Count) + ' keys found.');
finally
sl.Free;
end;
end else
Memo1.Lines.Add('Could not open key');
finally
aReg.Free;
end;
end;

最佳答案

默认情况下,“管理员”没有对 Enum 键的完全访问权限。因此,当您想要使用 KEY_ALL_ACCESS 访问权限打开 key 时,权限提升将无济于事。

TRegisty 默认情况下在其操作中使用 KEY_ALL_ACCESS,除非您在其构造函数或 Access 属性中指定不同的访问权限。

当您打开 key 来读取其内容时,您可以:

  • 使用重载构造函数并指定 KEY_READ 作为您所需的访问权限。

  • 在打开 key 之前,使用Access属性设置所需的KEY_READ访问权限。

  • 使用OpenKeyReadOnly()而不是OpenKey()

但请注意 MSDN 上的这条注释:

HKLM\SYSTEM\CurrentControlSet\Enum Registry Tree

The Enum tree is reserved for use by operating system components, and its layout is subject to change. Drivers and user-mode Device Installation Components must use system-supplied functions, such as IoGetDeviceProperty and SetupDiGetDeviceRegistryProperty, to extract information from this tree. Drivers and Windows applications must not access the Enum tree directly. You can view the Enum tree directly by using Registry Editor when you debug drivers.

您应该考虑使用文档中提到的替代 API。

关于delphi - 为什么我无法从 Delphi 2010 程序中打开 'HKLM\\SYSTEM\CurrentControlSet\Enum'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37891415/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com