私は、FTDIシリアル> USBコンバータを使用してデバイスをテストするためにPCを設定するプロセスを自動化するユーティリティを作成しようとしています。これには、インストールされたデバイス情報を検索し、上記のハイブに書き込む必要があります。特権の昇格を実装してプログラムに署名しましたが、鍵を開くことができません。私は親を開くことはできますが、 "列挙型"キーを開くことはできません。Delphi 2010プログラムから 'HKLM \ SYSTEM CurrentControlSet 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;
デフォルトでは、「システム」にフルコントロールアクセス権しかありません。 「管理者」ではそうではありません。 regeditプログラムを使用すると、キーのアクセス許可を表示できます。理由[ここ](https://msdn.microsoft.com/en-us/library/windows/hardware/ff546173(v=vs.85).aspx)を読むことができます。 'OpenKeyReadOnly'を使用して情報を読むことはできますが、リンクに記載されているAPIを使用する方がよいでしょう。 –
エラーがないかどうかをテストし、それらを提供することをお勧めします。TRegistry.Create(KEY_READ); – FredS
@FredS:OpenKey()の代わりに 'OpenKeyReadOnly()'を使う方が良いでしょう。 –