RegOpenKeyEx 返回错误 161

Posted

技术标签:

【中文标题】RegOpenKeyEx 返回错误 161【英文标题】:RegOpenKeyEx returns error 161 【发布时间】:2017-03-26 00:06:45 【问题描述】:

我很难重命名我的注册表的一个键。我不知道,但一直在更改名称,所以我试图使用一个程序来自动完成。代码如下:

using Microsoft.Win32;
using Microsoft.Win32.SafeHandles;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication7

    class Program
    
        private static readonly IntPtr HKEY_LOCAL_MACHINE = new IntPtr(-2147483646);
        [DllImport("advapi32")]
        public static extern int RegRenameKey(SafeRegistryHandle hKey, [MarshalAs(UnmanagedType.LPWStr)] string oldname,
        [MarshalAs(UnmanagedType.LPWStr)] string newname);
        [DllImport("Advapi32.dll", EntryPoint = "RegOpenKeyExW", CharSet = CharSet.Unicode)]
        public static extern int RegOpenKeyEx(IntPtr hKey, [In] string lpSubKey, int ulOptions, int samDesired, out IntPtr phkResult);

        static void Main(string[] args)
         //mhmmm si, todo esta bien , bueno ire a ver lo que iba oka  ver
            ///Estas intentando renombrar una clave de registro una la crpeta que la contiene...
            IntPtr result;

            SafeRegistryHandle hKey = null;//no es necesario, esta funcuonando, si no, no me hubiere retorando un int
            hKey = new SafeRegistryHandle(HKEY_LOCAL_MACHINE,true);
            int resul = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "\\SOFTWARE\\Company", 0,0,out result);
            Console.WriteLine(resul);
            int rosul = RegRenameKey(hKey, "SOFTWARE\\Company\\", "SOFTWARE\\Editado\\");
            Console.WriteLine(rosul);
            Console.ReadLine(); //Ok a ver dejamever unos ejemplos de advapi, los tienes ahi? mierdaaa no tiees ideas de los peos que se acaba de tirar mi perro

        

    

问题是当我打开钥匙时:

int resul = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "\\SOFTWARE\\Company", 0,0,out result);

由于某种原因,我没有很好地打开钥匙。错误返回我:

我的 regedit 规则没有重命名:

我参考的文章:

http://blogs.microsoft.co.il/pavely/2015/09/29/regrenamekey-hidden-registry-api/

我希望有人能帮上忙……它只适用于我的电脑。

【问题讨论】:

请注意,如果您使用的是 64 位操作系统,您的屏幕截图将显示 64 位注册表配置单元,而不是 32 位。 .NET 通常会根据您的应用程序位数重定向您的访问,但在这种情况下,由于您正在访问 Win32 API,因此您可能需要传递 KEY_WOW64_32KEYKEY_WOW64_64KEY 标志。 【参考方案1】:

错误 87 为 ERROR_BAD_PARAMETER,表示您传递给函数的一个或多个参数不正确。

错误 161 是 ERROR_BAD_PATHNAME,这表明您传递给函数的路径不正确。

我认为这两个错误都是由于您在路径中使用了前导或尾随斜杠而引起的。因此,您将拥有SOFTWARE\\Company,而不是例如\\SOFTWARE\\Company。尝试以下更改,看看是否有效。

删除了前导斜杠:

int resul = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Company", 0,0,out result);

删除尾随斜杠:

int rosul = RegRenameKey(hKey, "SOFTWARE\\Company", "SOFTWARE\\Editado");

参考文献

System Error Codes (0-499)

【讨论】:

以上是关于RegOpenKeyEx 返回错误 161的主要内容,如果未能解决你的问题,请参考以下文章

SOFTWARE\Microsoft\Windows NT\CurrentVersion\SecEdit\Reg 值的 RegOpenKeyEx 返回错误代码 2

regopenkeyex 在 Windows 8.1 上返回 2

尝试更改 ActivePowerScheme:RegOpenKeyEx 失败,错误 0

检查数组是不是包含在 rego 中的另一个中

开放策略代理 (OPA) Rego - 在运行时访问输入对象嵌套字段

Rego 规则中的参数 [Open Policy Agent]