gpt4 book ai didi

c# - 隐藏的注册表项/值

转载 作者:太空狗 更新时间:2023-10-29 21:59:10 26 4
gpt4 key购买 nike

看完this post所以我尝试编写一个小应用程序,我需要读取和写入隐藏的注册表项/值。
我检查了 Registry Manipulation using NT Native APIsCreating "Hidden" Registry Values链接。
第一个给了我一些工作,但它是用 C++ 编写的,而第二个是一个运行良好的 Delphi 项目。
我无法先转换,我可以尝试先转换,但我也需要找到一些代码来读取键/值。出于这个原因,我想知道是否有一些“准备好”并在 C# 中测试过的东西。
我也下载了Proces Hacker v1.11 源代码并使用它部分转换 Delphi 示例,如下所示,但隐藏的注册表项是可访问的(而在 Delphi 中则不是)并且没有 API 来写入值。

static void Main(string[] args)
{
string KeyNameBuffer = @"\Registry\User\S-1-5-21-3979903645-2167650815-2353538381-1001\SOFTWARE";
string NewKeyNameBuffer = "Systems Internals";
string HiddenKeyNameBuffer = "Can't touch me\0";
string HiddenValueNameBuffer = "Hidden Value";

// Apro la chiave di registro
IntPtr SoftwareKeyHandle = CreateKey(KeyNameBuffer, IntPtr.Zero);
if (SoftwareKeyHandle != IntPtr.Zero)
{
IntPtr SysKeyHandle = CreateKey(NewKeyNameBuffer, SoftwareKeyHandle);
if (SysKeyHandle != IntPtr.Zero)
{
// This key shouldn't be accessible, but it is
IntPtr HiddenKeyHandle = CreateKey(HiddenKeyNameBuffer, SysKeyHandle);
if (HiddenKeyHandle != IntPtr.Zero)
{
// I don't have APIs to write values
}
}
}
}

static IntPtr CreateKey(string keyName, IntPtr rootKey)
{
IntPtr res;
KeyCreationDisposition disp;
ObjectAttributes attributes = new ObjectAttributes(keyName,
ObjectFlags.CaseInsensitive,
new NativeHandle(rootKey));
NtStatus st = Win32.NtCreateKey(out res, KeyAccess.All,
ref attributes, 0,
IntPtr.Zero, RegOptions.NonVolatile, out disp);
return st == NtStatus.Success ? res : IntPtr.Zero;
}

最后:从 Vista 开始,如果您没有以管理员身份运行应用程序,则不能编写 \Registry\Machine 部分,因此在示例中我使用了我的用户注册表项。如果我需要存储每台机器的值,我们的 native API 是否有办法编写注册表的那部分?

最佳答案

如果你想在 HKLM 中使用它并且权限不允许你,那么你使用哪个 API 层都没有关系,Nt * 的 Reg * 函数 - 它不会让你这样做并出现拒绝访问错误.

关于c# - 隐藏的注册表项/值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8211052/

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