2

そして、私の問題を確認するために時間を割いていただきありがとうございます。

ネイティブの NtCreateKey API を使用して、HKCU 内にキーを作成しようとしています。

API がどのように機能するかを理解するのに役立つソースがありますが、HKCU で機能させることができないようです。HKLM のみです...これは可能ですか?

私がすでに持っているソースコード:

const
   KeyNameBuffer: AnsiString = '\Registry\Machine\SOFTWARE'; //Assuming I need to change this.....
   NewKeyNameBuffer: AnsiString = 'Parent Key To Create';
   HiddenKeyNameBuffer: AnsiString = 'Main Key To Create';
   HiddenValueNameBuffer: AnsiString = 'Value Key To Create';

 procedure TForm1.btnDemoClick(Sender: TObject);
 var
    KeyName, ValueName: UNICODE_STRING;
    SoftwareKeyHandle, SysKeyHandle, HiddenKeyHandle: THandle;
    Status: ULONG;
    ObjectAttributes: OBJECT_ATTRIBUTES;
    Disposition: ULONG;
    Buffer: array of WideChar;
 begin

    //
    // Open the Software key
    //
   SetLength(Buffer, Length(KeyNameBuffer));
   MultiByteToWideChar(CP_UTF8, 0, @KeyNameBuffer[1], Length(KeyNameBuffer),
       PWideChar(Buffer), Length(Buffer));
   KeyName.Buffer := @Buffer[0];
    KeyName.Length := Length(KeyNameBuffer) * SizeOf(WideChar);
    InitializeObjectAttributes(ObjectAttributes, @KeyName, OBJ_CASE_INSENSITIVE,
       0, nil);
    Status := NtCreateKey(SoftwareKeyHandle, KEY_ALL_ACCESS, ObjectAttributes, 0,
       nil, REG_OPTION_NON_VOLATILE, Disposition);
    if not NT_SUCCESS(Status) then
      raise Exception.Create('Error: Couldn''t open HKLM\Software');
 end;

私の型定義と API 宣言はすべてそのコードの上に作成されていますが、必ずしもすべてを投稿する必要があるとは思えません。

Delphi 7 IDE を使用しています。

この問題を解決するための助けをいただければ幸いです。

ありがとう。

4

1 に答える 1

5

私はあなたがこれを使うべきだと信じていますRegCreateKeyEx

ただし、質問に対する答えは、HKCU の適切なキー名は次のとおりです。

\Registry\User\<Users_SID>

当然、現在のユーザーの SID を提供する必要があります。これは、Win32 API が で提供する多くのサービスの 1 つですRegCreateKeyEx

于 2012-09-12T08:17:32.040 に答える