有关注册表API函数
作者:loose_went    阅读人次:341    文章来源:VC在线    发布时间:2007-8-22    网友评论(0)条
注册表的操作,API为我们提供了大约25个函数。他提供了对注册表的读取,写入,删除,以及打开注册表及键值时所有函数,并且可以达到对注册表的备份,连接和对远端注册表进行查看等等。注册表对整个系统十分重要,你在进行操作时,一定要先考虑清楚。这些函数有:
RegCloseKey RegConnectRegistry  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,
//不太明白 enum函数
PHKEY phkResult,    // 指向你建的句柄
LPDWORD lpdwDisposition  //用来查看是打开一个已经有的键,还是新建了键
);
RegCreateKey()函数简单了不少,请自己看了。
返回值:不成功返回非0,成功返回ERROR_SUCCESS.
解释:打开指定的键或子键。如果要打开的键不存在的话,本函数会试图建立它。当在创建或打开注册表的键时,需要指定访问权限,而这些访问权限需要到一级。默认的权限是KEY_ALL_ACCESS权限。还有KEY_CREATE_LINK创建字符链权限,KEY_CREATE_SUB_KEY创建子键权限,KEY_EXECUTE读取键权限,KEY_NOTI
FY获得修改键通知的权限,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
删除注册表键及其所有的子键。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。