`
isiqi
  • 浏览: 16072304 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

有关注册表API函数

阅读更多
注册表的操作,API为我们提供了大约25个函数。他提供了对注册表的读取,写入,删除,以及打开注册表及键值时所有函数,并且可以达到对注册表的备份,连接和对远端注册表进行查看等等。注册表对整个系统十分重要,你在进行操作时,一定要先考虑清楚。这些函数有:
RegCloseKeyRegConnectRegistry RegCreateKey RegCreateKeyEx RegDeleteKey RegDeleteVale
RegEnumKey RegFlushKey RegGetKeySecurity(此函数,98不适用) RegLoadKey
RegNotifyChangeKeyValue(98不适用) RegOpenKey RegOpenKeyEx RegQueryInfoKey RegQueryValue
RegQueryValueEx RegReplaceKey RegRestoreKey(98不适用)RegSaveKey RegSetKeySecurity(98不适用) RegSetValue RegSetValueEx RegUnLoadKey
我们对经常使用的几个函数进行介绍。
1·RegClose()
原形:LONG RegCloseKey(
HKEY hKey // 释放已经打开的注册表句柄
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:关闭指定的主册表键,释放句柄。当对一个或多个键或值操作完成以后,需要关闭其键来进行保存操作结果。关闭一个键后,句柄变为非法,以使其不可再次被使用。为系统重新使用而释放句柄。
例子
BOOL bRet = TRUE;
if( m_hKey == NULL )
return( FALSE );
bRet = ( ::RegCloseKey( m_hKey ) == ERROR_SUCCESS );
m_hKey = NULL;
return( bRet );

2·RegCreateKeyEx()和RegCreateKey()
原形:LONG RegCreateKeyEx(
HKEY hKey,// 主键名称
LPCTSTR lpSubKey, // 子键名称或路径
DWORD Reserved, // 保留,为0
LPTSTR lpClass, // 没弄懂,我设为空也差不多
DWORD dwOptions,
/* 对你建立的键的一些选项,可以是这些值:REG_OPTION_NON_VOLATILE,REG_OPTION_VOLATILE,REG_OPTION_BACKUP_RESTORE第一个是默认的了。一般用第一个就可以了。*/
REGSAM samDesired,// 设置你对你建立的这个键的访问权限
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
//不太明白
PHKEY phkResult,// 指向你建的句柄
LPDWORD lpdwDisposition //用来查看是打开一个已经有的键,还是新建了键
);
RegCreateKey()函数简单了不少,请自己看了。
返回值:不成功返回非0,成功返回ERROR_SUCCESS.
解释:打开指定的键或子键。如果要打开的键不存在的话,本函数会试图建立它。当在创建或打开注册表的键时,需要指定访问权限,而这些访问权限需要到一级。默认的权限是KEY_ALL_ACCESS权限。还有KEY_CREATE_LINK创建字符链权限,KEY_CREATE_SUB_KEY创建子键权限,KEY_EXECUTE读取键权限,KEY_NOTIFY获得修改键通知的权限,KEY_QUERY_VALUE查询键值的权限,KEY_SET_VALUE设置数据值的权限。注意不能在根一级建键,在注册表的根一级仅可有预定义的键。具体使用,请查看联机手册。
例子:
HKEY m_hkey;
DWORD dwDisposition;
long ret0=(::RegCreateKeyEx
(HKEY_CURRENT_USER,"REGD\\",0,NULL,
REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&m_hkey,&dwDisposition));
if(ret0!=ERROR_SUCCESS) //如果无法打开hKEY,则终止程序的执行
{
MessageBox("错误: 无法打开有关的hKEY!");
return;
}
if(dwDisposition==REG_OPENED_EXISTING_KEY)
MessageBox("打开了一个已经存在的键");
else
{
if(dwDisposition==REG_CREATED_NEW_KEY)
MessageBox("建立一个新键");
}
RegClosekey(m_hkey);

3·RegOpenKey()和RegOpenKeyEx()
原形:LONG RegOpenKeyEx(
HKEY hKey, // 要打开主键名
LPCTSTR lpSubKey,// 子键或路径
DWORD ulOptions, // 保留,为0
REGSAM samDesired, // 操作权限标志
PHKEY phkResult// 指向你打开键的句柄
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS.
解释:该函数负责打开指定的键或子键,如果不存在他不建立。其他和RegCreateKeyEx()和RegCreateKey()基本相同。

4·RegDeleteKey()
原形:LONG RegDeleteKey(
HKEY hKey, // 已打开的键的句柄
LPCTSTR lpSubKey // 要删除的子键或路径,传如""将删除key本身
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
该函数用来删除注册表中的一个键值的。在用此函数时需要注意98与NT的差异。在NT中在删除一个键之前,要求必须删除所有子键,需要从下向上递归删除所有子键,而WINDOWS98没有他那么复杂,只要删除键及其所有子键就可以啦。

5·RegQueryValue()和RegQueryValueEx()
原形:LONG RegQueryValueEx(
HKEY hKey, // 已打开的键的句柄
LPTSTR lpValueName,// 要查询值的名称,传如""为查询键下的默认值
LPDWORD lpReserved,// 保留,为0
LPDWORD lpType,// 查询的类型
LPBYTE lpData, // 数据存放的地址
LPDWORD lpcbData // 数据长度+1
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:读取某子键下特定名称的值。
例子
CString m_strQ;//用来存放查询来的字符串值
DWORD m_dwCount;//记录字符串的长度+1(包括NULL字符)
::RegQueryValueEx(m_hkey,"",0,NULL,NULL,&m_dwCount);//先查询出字节空间
ret1=(::RegQueryValueEx
(m_hkey,"",0,NULL,(unsigned char *)m_strQ.GetBuffer(m_dwCount),&m_kk));
m_strQ.ReleaseBuffer();
MessageBox(m_strQ);

6·RegSetValue()和RegSetValueEX()
原形:LONG RegSetValueEx(
HKEY hKey, // 已打开的键的句柄
LPCTSTR lpValueName, // 要查询值的名称,传如""为查询键下的默认值
DWORD Reserved,// 保留
DWORD dwType,// 变量的类型
CONST BYTE *lpData,// 变量数据的地址
DWORD cbData // 变量的长度
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:设置某子键下特定名称的值。

7·RegEnumValue()
原形:LONG RegEnumValue(
HKEY hKey,// 要查询的已打开的键的句柄
DWORD dwIndex,// 读取名称的索引号
LPTSTR lpValueName, // 返回所读取的名称
LPDWORD lpcbValueName,// 返回读取名称的长度,不含chr(0)
LPDWORD lpReserved, // 保留,为0
LPDWORD lpType, // 返回所读取的数据类型
LPBYTE lpData,// 返回所读取的数据
LPDWORD lpcbData// 返回所读取的数据长度
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:列出某Key的所有名称的值,变化索引即可遍历整个键下的名称和数据。

8·RegDeleteValue()
原形:LONG RegDeleteValue(
HKEY hKey,// 要删除的键的句柄
LPCTSTR lpValueName // 要删除的名称
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:删除某Key的某一名称

9·RegEnumKey()和RegEnumKeyEx()
原形:LONG RegEnumKeyEx(
HKEY hKey,// 要列举的键的句柄
DWORD dwIndex,// 索引
LPTSTR lpName,// 子键的名称
LPDWORD lpcbName, // 子键名称的长度
LPDWORD lpReserved, // 保留
LPTSTR lpClass, // address of buffer for class string
LPDWORD lpcbClass,// address for size of class buffer
PFILETIME lpftLastWriteTime
// address for time key last written to
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
返回注册表键及其子键的详细信息。

10·RegQueryInfoKey()
原形:LONG RegQueryInfoKey(
HKEY hKey,// 已打开的键的句柄
LPTSTR lpClass, // 类型名称,仅使用于NT。若不使用则传入Null
LPDWORD lpcbClass,// 类型名称的长度
LPDWORD lpReserved, // 保留
LPDWORD lpcSubKeys, // 返回子键的数目
LPDWORD lpcbMaxSubKeyLen,// 返回最长的子键长度
LPDWORD lpcbMaxClassLen,// 返回最长的类长度
LPDWORD lpcValues,// 返回值的数目
LPDWORD lpcbMaxValueNameLen,// 返回最长的值项名称的长度
LPDWORD lpcbMaxValueLen,// 返回最长的值的长度
LPDWORD lpcbSecurityDescriptor,//返回安全描述,仅适用于 NT
PFILETIME lpftLastWriteTime // 返回键最后被写入的时间,仅适用于 NT
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:返回注册表键的信息,包括类名、子键数量、最长子键名、值的数量、最长值数据、安全描述符的长度以及上一次写入的时间等。

11·RegLoadKey()
原形:LONG RegLoadKey(
HKEY hKey, // 打开的句柄
LPCTSTR lpSubKey,//子键的路径
LPCTSTR lpFile // 要写入注册表信息的文件
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:从指定的文件恢复注册表键的子键信息到注册表。

12·RegReplaceKey()
原形:LONG RegReplaceKey(
HKEY hKey, // handle to open key
LPCTSTR lpSubKey,// address of name of subkey
LPCTSTR lpNewFile, // 在替换前生成新的备份文件
LPCTSTR lpOldFile// 需要覆盖上注册表的文件
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:从指定的文件恢复注册表键的子键信息到注册表并替换原有的值,并生成新的备份文件

13· RegSaveKey()
LONG RegSaveKey(
HKEY hKey, // 要保存的句柄
LPCTSTR lpFile,// 保存子键的文件
LPSECURITY_ATTRIBUTES lpSecurityAttributes //不太懂
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:保存键及其子键信息到指定的文件。

14· RegConnectRegistry()
原形:LONG RegConnectRegistry(
LPTSTR lpMachineName, //远程计算机的名称
HKEY hKey,// 预先注册的句柄
PHKEY phkResult // 远程计算机上的句柄
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:连接到远程系统的注册表。

15·RegNotifyChangeKeyValue()
当修改指定的注册表对象时提供通知。

16· RegUnloadKey()
LONG RegUnLoadKey(
HKEY hKey, // handle to open key
LPCTSTR lpSubKey // address of name of subkey to unload
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
删除注册表键及其所有的子键。
分享到:
评论

相关推荐

    注册表API函数

    一些常用的注册表编程API函数祥解

    注册表API函数.doc

    注册表的操作,API为我们提供了大约25个函数。他提供了对注册表的读取,写入,删除,以及打开注册表及键值时所有函数,并且可以达到对注册表的备份,连接和对远端注册表进行查看等等。注册表对整个系统十分重要,你...

    Windows CE下对注册表操作的API函数说明

    Windows CE下对注册表操作的API函数说明

    Windows CE下对注册表操作的API函数

    Windows CE下对注册表操作的API函数 介绍了Windows CE下对注册表操作的API函数的使用-introduced the Windows CE operating under the registry of the use of API function

    VC注册表API应用

    向注册表中添加键值,演示注册表函数的使用方法

    C# 操作注册表 API

    Api接口,调用相关的入口函数,获取相应的注册表中的要查询的结果

    注册表操作api

    注册表操作api 说明: Api接口 C# 版本,调用相关的入口函数,获取相应的注册表中的要查询的结果

    注册表 API

    25 个注册表 API 函数详解 doc

    用API函数对注册表进行操作(8KB)...

    用API函数对注册表进行各种操作的源代码(8KB)

    注册表API,针对C++、C语言操作

    Windows API 中可用于注册表的函数一共有二十多个 ,本文档是中文的,有用法详解,DOC格式整理

    windows注册表操作API详解

    注册表的操作,API为我们提供了大约25个函数。他提供了对注册表的读取,写入,删除,以及打开注册表及键值时所有函数,并且可以达到对注册表的备份,连接和对远端注册表进行查看等等。注册表对整个系统十分重要,你...

    精通WindowsAPI 函数 接口 编程实例

    5.6.1 标准C内存管理函数与Windows内存管理API的关系 149 5.6.2 功能性区别 149 5.6.3 效率的区别 149 第6章 进程、线程和模块 150 6.1 基本概念 150 6.1.1 应用程序与进程 150 6.1.2 控制台应用程序...

    注册表操作常用API

    RegCreateKey 创建一个KEY,并返回相应的HKEY RegOpenKey 打开注册表,得到一个HKEY,用来作为下面这些函数的第一个参数。

    win32 API函数注册表监控C#

    使用Microsoft.win32监控注册表是否被更改,有类和DEMO

    Windows API函数大全

    CreateScalableFontResource 为一种TureType字体创建一个资源文件,以便能用API函数AddFontResource将其加入Windows系统 DrawText 将文本描绘到指定的矩形中 DrawTextEx 与DrawText相似,只是加入了更多的功能 ...

    精通Windows.API-函数、接口、编程实例.pdf

    5.6.1 标准C内存管理函数与Windows内存管理API的关系 149 5.6.2 功能性区别 149 5.6.3 效率的区别 149 第6章 进程、线程和模块 150 6.1 基本概念 150 6.1.1 应用程序与进程 150 6.1.2 控制台应用程序与...

    Win32 API 函数

    Win32 API 函数  1、限制程序功能函数 5、注册表处理函数  2、对话框函数 6、时间处理函数  3、磁盘处理函数 7、进程函数  4、文件处理函数 8、断点设置列表

    API之网络函数---整理网络函数及功能

    CreateScalableFontResource 为一种TureType字体创建一个资源文件,以便能用API函数AddFontResource将其加入Windows系统 DrawText 将文本描绘到指定的矩形中 DrawTextEx 与DrawText相似,只是加入了更多的功能 ...

    精通mfc--注册表编程

    注册表编程\RegAppfunc 利用注册表API函数来查询和修改系统用户信息实例源码 注册表编程\RegWinApp CWinApp类提供的注册表访问函数修改注册表实例源码 注册表编程\MyRegExample 利用自己创建的注册表类...

Global site tag (gtag.js) - Google Analytics