注册表的操作1314错误原因权限问题
注册表的操作
1.注册表的作用
注册表是windows系统的数据库,保存了系统、用户、程序的信息,通过修改注册表可以对系统进行设置,可以获取程序信息、用户信息等,可以修改环境变量,可以设置程序开机自启动,修改主页,取消运行、重启、关机、注销按钮等。只要你知道注册表中对应键和键值的功能了解,就可以通过修改键值来重新对系统进行设置或修改。修改注册表是直接对系统的核心数据库进行修改,具有很强大的功能,不能乱用,如果注册表受到了破坏,轻则使windows的启动过程出现异常,重则可能会导致整个windows系统的完全瘫痪。因此正确地认识、使用,特别是及时备份以及有问题恢复注册表对windows用户来说就显得非常重要。
2.注册表的结构
注册表的组织方式跟文件目录比较相似,主要分为根键、子键和键值项三部分,与文件目录对应的话就是根目录、子目录和文件。
2.1根键
注册表由五个根键构成,每个根键保存的信息如下所示。
(1)HKEY_CLASSES_ROOT
保存着所有的文件和打开程序对应关系。
(2)HKEY_CURRENT_CONFIG
保存着对硬件的配置,包括了系统中现有的所有配置文件的细节。
(3)HKEY_USERS
保存用户和目前登陆用户的信息。
(4)HKEY_LOCAL_MACHINE
包括网络和硬件上所有的软件设置。
(5)HKEY_CURRENT_USER
任何在HKEY_CURRENT_USER里的改动也都会立即HKEY_USERS改动。所有当前的操作改变只是针对当前用户而改变,并不影响其他用户。
2.2子键
可以有多个子键和键值项,就像一个目录中可以有多个子目录和多个文件一样。
2.3键值项
可以理解为文件,它由三部分组成,分别为:名称、类型、数据。
键值类型又分为多种主要包括如下:
REG_BINARY 二进制数据
REG_DWORD 32位双字节数据
REG_SZ 以0结尾的字符串
REG_DWORD_BIG_ENDIAN 高位排在底位的双字
REG_EXPAND_SZ 扩展字符串,可以加入变量如%PATH%
REG_LINK UNICODE 符号链接
REG_RESOURCE_LIST 设备驱动程序资源列表
REG_MULTI_SZ 多字符串
注册表数据项的数据类型有8种,但最常用的主要是前3种。
知道注册表的键和键值的功能就可以通过修改注册表来设置系统参数,或者获取信息。
3.对注册表的操作
注册表键的操作包括打开、关闭、新建、删除、导入、导出、获取信息、枚举键和键值等,注册表对键值的操作有设置值、获取值、添加、删除。
下面对键和键值的操作做了封装,将注册表的操作统一成一种风格,主要包括根键hRootKey、子键路径strKeyPath包括子键名称,如果strKeyPath为空,则hRootKey表示打开的子键,函数是对子键或子健的键值进行操作。可以很方便的实现键和键值的增删改查。
4.遇到的问题
在调用函数RegSaveKeyEx 和RegRestoreKey返回1314错误码,系统函数
//先设置权限
int lResult=-1;
HANDLE hToken = NULL;
if( !OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken) ) //打开进程操作令牌
{
return -1;
}
size_t sizelen = sizeof(TOKEN_PRIVILEGES) + 2*sizeof(LUID_AND_ATTRIBUTES);
TOKEN_PRIVILEGES* tkp=(TOKEN_PRIVILEGES*)malloc(sizelen);
memset(tkp,0,sizelen);
if(!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&(tkp->Privileges[0].Luid))||\
!LookupPrivilegeValue(NULL,SE_BACKUP_NAME,&(tkp->Privileges[1].Luid))||\
!LookupPrivilegeValue(NULL,SE_RESTORE_NAME,&(tkp->Privileges[2].Luid))) //获取权值参数
{
CloseHandle(hToken);
free(tkp);
return -1;
}
tkp->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
tkp->Privileges[1].Attributes = SE_PRIVILEGE_ENABLED;
tkp->Privileges[2].Attributes = SE_PRIVILEGE_ENABLED;
tkp->PrivilegeCount=3;
if(!AdjustTokenPrivileges(hToken, FALSE, tkp, sizelen, NULL, NULL)) //设置令牌权值参数
{
CloseHandle(hToken);
free(tkp);
return -1;
}
自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix