首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

RegOpenKeyEx出错

RegOpenKeyEx是Windows操作系统中的一个函数,用于打开注册表中的一个指定的键。当调用RegOpenKeyEx函数时,可能会出现错误。

错误代码可以通过函数的返回值来获取,常见的错误代码有以下几种:

  1. ERROR_FILE_NOT_FOUND(2):指定的注册表键不存在。
  2. ERROR_ACCESS_DENIED(5):没有足够的权限来打开指定的注册表键。
  3. ERROR_INVALID_HANDLE(6):无效的注册表句柄。
  4. ERROR_INVALID_PARAMETER(87):提供的参数无效。
  5. ERROR_KEY_DELETED(1018):指定的注册表键已被删除。

为了解决RegOpenKeyEx出错的问题,可以采取以下几个步骤:

  1. 检查注册表键是否存在:可以使用RegQueryInfoKey函数来检查指定的注册表键是否存在。如果键不存在,可以尝试创建该键。
  2. 检查权限:确保当前用户具有足够的权限来打开指定的注册表键。可以使用RegEdit或者其他注册表编辑工具来查看和修改注册表键的权限。
  3. 检查参数:确保提供给RegOpenKeyEx函数的参数是有效的。比如,检查传递的注册表根键是否正确,检查传递的键名是否正确。
  4. 错误处理:根据具体的错误代码进行相应的错误处理。比如,如果是权限问题,可以尝试使用管理员权限运行程序;如果是键已被删除,可以尝试重新创建该键。

腾讯云提供了一系列的云计算产品,包括云服务器、云数据库、云存储等。这些产品可以帮助用户快速搭建和管理云计算环境。具体的产品介绍和相关链接可以在腾讯云官网上找到。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何用 C 注册 windows 服务程序 (分析 Java Service Wrapper 代码)

如何用 C 注册 windows 服务程序 (分析 Java Service Wrapper 代码) 前提:          从http://wrapper.tanukisoftware.org 下载 Java Service Wrapper 的源代码.     因为 Java Service Wrapper 同时提供windows 和 linux 上的实现,所以源文件夹里的代码都是分两份的.     在windows下的实现注册 windows 服务的代码在wrapper_win.c 文件中.     看了其中的代码后你会对作者的专业精神有深刻的体会,在wrapper_win.c文件中的历史变动说明就有300多行,详细描述了每次改动的变化.具体实现的方法中也都有详细的说明,所以看这样的代码基本上不费力气的.     如果非要说看代码是享受,  Java Service Wrapper  的源代码算一个.    下面我们看看它是如何实现注册一个exe文件为windows服务的.     wrapper_win.c中的入口main 函数定义如下:     void _CRTAPI1 main(int argc, char **argv)      //注意main定义的修饰_CRTAPI1     根据argv的输入参数分别执行,注册,取消,开始,停止windows服务的操作:     代码如下:    if(!_stricmp(argv[1],"-i") || !_stricmp(argv[1],"/i")) {           result = wrapperInstall(argc, argv);                              //注册服务    } else if(!_stricmp(argv[1],"-r") || !_stricmp(argv[1],"/r")) {           result = wrapperRemove();                                         //取消注册    } else if(!_stricmp(argv[1],"-t") || !_stricmp(argv[1],"/t")) {           result = wrapperStartService();                                   //启动服务    } else if(!_stricmp(argv[1],"-p") || !_stricmp(argv[1],"/p")) {            result = wrapperStopService(TRUE);                         //停止服务    }

02

创建SvcHost.exe调用的服务原理与实践

1. 多个服务共享一个Svchost.exe进程利与弊 windows 系统服务分为独立进程和共享进程两种,在windows NT时只有服务器管理器SCM(Services.exe)有多个共享服务,随着系统内置服务的增加,在windows 2000中ms又把很多服务做成共享方式,由svchost.exe启动。windows 2000一般有2个svchost进程,一个是RPCSS(Remote Procedure Call)服务进程,另外一个则是由很多服务共享的一个svchost.exe。而在windows XP中,则一般有4个以上的svchost.exe服务进程,windows 2003 server中则更多,可以看出把更多的系统内置服务以共享进程方式由svchost启动是ms的一个趋势。这样做在一定程度上减少了系统资源的消耗,不过也带来一定的不稳定因素,因为任何一个共享进程的服务因为错误退出进程就会导致整个进程中的所有服务都退出。另外就是有一点安全隐患,首先要介绍一下svchost.exe的实现机制。 2. Svchost原理 Svchost本身只是作为服务宿主,并不实现任何服务功能,需要Svchost启动的服务以动态链接库形式实现,在安装这些服务时,把服务的可执行程序指向svchost,启动这些服务时由svchost调用相应服务的动态链接库来启动服务。 那么svchost如何知道某一服务是由哪个动态链接库负责呢?这不是由服务的可执行程序路径中的参数部分提供的,而是服务在注册表中的参数设置的,注册表中服务下边有一个Parameters子键其中的ServiceDll表明该服务由哪个动态链接库负责。并且所有这些服务动态链接库都必须要导出一个ServiceMain()函数,用来处理服务任务。 例如rpcss(Remote Procedure Call)在注册表中的位置是 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/RpcSs,它的参数子键Parameters里有这样一项: "ServiceDll"=REG_EXPAND_SZ:"%SystemRoot%/system32/rpcss.dll" 当启动rpcss服务时,svchost就会调用rpcss.dll,并且执行其ServiceMain()函数执行具体服务。 既然这些服务是使用共享进程方式由svchost启动的,为什么系统中会有多个svchost进程呢?ms把这些服务分为几组,同组服务共享一个svchost进程,不同组服务使用多个svchost进程,组的区别是由服务的可执行程序后边的参数决定的。 例如rpcss在注册表中 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/RpcSs 有这样一项: "ImagePath"=REG_EXPAND_SZ:"%SystemRoot%/system32/svchost -k rpcss" 因此rpcss就属于rpcss组,这在服务管理控制台也可以看到。 svchost的所有组和组内的所有服务都在注册表的如下位置: HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Svchost,例如windows 2000共有4组rpcss、netsvcs、wugroup、BITSgroup,其中最多的就是netsvcs=REG_MULTI_SZ:EventSystem.Ias.Iprip.Irmon.Netman.Nwsapagent.Rasauto.Rasman.Remoteaccess.SENS.Sharedaccess.Tapisrv.Ntmssvc.wzcsvc.. 在启动一个svchost.exe负责的服务时,服务管理器如果遇到可执行程序内容ImagePath已经存在于服务管理器的映象库中,就不在启动第2个进程svchost,而是直接启动服务。这样就实现了多个服务共享一个svchost进程。 3. Svchost代码 现在我们基本清楚svchost的原理了,但是要自己写一个DLL形式的服务,由svchost来启动,仅有上边的信息还有些问题不是很清楚。比如我们在导出的ServiceMain()函数中接收的参数是ANSI还是Unicode?我们是否需要调用RegisterServiceCtrlHandler和StartServiceCtrlDispatcher来注册服务控制及调度函数? 这些问题要通过查看svchost代码获得。下边的代码是windows 2000+ serv

04

C语言编写简易病毒[通俗易懂]

本次实验设计的是一个基于C语言的恶意代码,其执行流程如下: 1、 在病毒第一次执行时,即检测到注册表的任务管理器没有被禁用,则病毒依次执行以下功能: 创建开机启动项,在系统目录路径下面复制文件,将其作为自启动路径; 禁用任务管理器; 禁用注册表编辑器; 联网获取图片并修改桌面背景(重启生效); 修改注册表屏蔽用户键盘输入为1(重启生效); 删除驱动器盘符,使桌面以及开始菜单快捷方式失效; 在桌面恶意增殖,生成名字随机的自身拷贝文件; 电脑强制关机; 2、计算机重新启动之后由于任务管理器已经被禁用,所以只在桌面恶意增殖,同时桌面背景更换并且键盘输入失效。 1.增殖模块 为了实现恶意代码的自我增殖,使用windows系统自带的API函数SHGetSpecialFolderPath,获取当前用户的桌面路径;使用GetModuleFileName函数,获取当前执行程序的路径,最后通过使用Copyfile函数,完成自我增殖。 增殖模块相关代码如图2.1所示。

03

window32api_win32api与硬件设备

作者:浪子花梦,一个有趣的程序员 ~ . Win32API 相关文章如下: Win32利用CreateEvent 实现简单的 —— 线程同步 Win32消息处理机制与窗口制作 Win32远程线程注入 .dll 文件 Win32删除目录下的所有文件 —— 递归遍历 (一)Win32服务程序编写 —— 使用SC命令创建与删除 (二)Win32服务程序编写 —— 使用命令行参数创建与删除 Win32使用快照、psapi.dll、wtsapi32.dll、ntdll.dll 四种方式实现 —— 枚举进程 (一)Win32进程通信 —— 自定义消息实现 (二)Win32进程通信 —— 内存映射文件 (三)Win32进程通信 —— 数据复制消息 (四)Win32进程通信 —— 剪贴板的使用 (五)Win32进程通信 —— 匿名管道 (六)Win32进程通信 —— 邮槽的使用

01
领券