Win API:注册表操作函数

函数介绍:

1.RegCreateKeyEx Function

函数原型:

LONG WINAPI RegCreateKeyEx(
  __in        HKEY hKey,
  __in        LPCTSTR lpSubKey,
  __reserved  DWORD Reserved,
  __in_opt    LPTSTR lpClass,
  __in        DWORD dwOptions,
  __in        REGSAM samDesired,
  __in_opt    LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  __out       PHKEY phkResult,
  __out_opt   LPDWORD lpdwDisposition
);

解释:打开指定的键或子键。如果要打开的键不存在的话,本函数会试图建立它。提供该函数是为了向后兼容。所有的WIN32应用程序应使用函数RegCreateKeyEx()。

 

各参数及返回值的含义如下:

1.hKey为主键值,可以取下面的一些数值:HKEY_CLASSES_ROOT、HKEY_CURRENT_CONFIG、  HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USER、HKEY_PERFORMANCE_DATA(WINNT操作系统)、HKEY_DYN_DATA(WIN9X操作系统)。

2.lpSubKey为一个指向以零结尾的字符串的指针,其中包含将要创建或打开的子键的名称。子键不可以用反斜线(/)开始。该参数可以为NULL。

3.Reserved为保留值,必须设置为0。

4.lpClass为一个指向包含键类型的字符串。如果该键已经存在,则忽略该参数。

5.dwOptions为新创建的键设置一定的属性。可以取下面的一些数值:  REG_OPTION_NON_VOLATILE ,表示新创建的键为一个非短暂性的键(数据信息保存在文件中,当系统重新启动时,数据信息恢复);REG_OPTION_VOLATILE,表示新创建的键为一个短暂性的键(数据信息保存在内存中),Windows95忽略该数值;REG_OPTION_BACKUP_RESTORE 仅在WINNT中支持,可以提供优先级支持。

6.samDesired用来设置对键访问的权限,可以取下面的一些数值:KEY_CREATE_LINK,表示准许生成符号键;KEY_CREATE_SUB_KEY 表示准许生成子键;KEY_ENUMERATE_SUB_KEYS 表示准许生成枚举子键;KEY_EXECUTE 表示准许进行读操作;KEY_NOTIFY表示准许更换通告;  KEY_QUERY_VALUE 表示准许查询子键;KEY_ALL_ACCESS 提供完全访问,是上面数值的组合。KEY_READ 是下面数值的组合:KEY_QUERY_VALUE、KEY_ENUMERATE_SUB_KEYS、KEY_NOTIFY;  KEY_SET_VALUE 表示准许设置子键的数值;KEY_WRITE 是下面数值的组合:KEY_SET_VALUE、KEY_CREATE_SUB_KEY。

7.lpSecurityAttributes为一个指向SECURITY_ATTRIBUTES结构的指针,确定返回的句柄是否被子处理过程继承。如果该参数为NULL,则句柄不可以被继承。在WINNT中,该参数可以为新创建的键增加安全的描述。

8.phkResult为一个指向新创建或打开的键的句柄的指针。

9.lpdwDispition指明键是被创建还是被打开的,可以是下面的一些数值:  REG_CREATE_NEW_KEY 表示键先前不存在,现在被创建;REG_OPENED_EXISTING_KEY 表示键先前已存在,现在被打开。

如果该函数调用成功,则返回ERROR_SUCCESS。否则,返回值为文件WINERROR.h中定义的一个非零的错误代码,可以通过设置FORMAT_MESSAGE_FROM_SYSTEM标识调用FormatMessage()函数来获取一个对错误的总体描述。 

2.RegSetValueEx Function 

函数原型:

LONG WINAPI RegSetValueEx(
  __in        HKEY hKey,
  __in_opt    LPCTSTR lpValueName,
  __reserved  DWORD Reserved,
  __in        DWORD dwType,
  __in_opt    const BYTE *lpData,
  __in        DWORD cbData
);

解释:设置注册表中的一个键值。

 

各参数及返回值的含义如下:

1.hKey的含义同RegCreateKeyEx函数中的hKey参数。

2.Reserved为保留值,必须设置为0。
3.lpValueName为一个指向包含值名的字符串指针;Reserved保留,通常必须设置为0。
4.dwType确定了设置的值的类型同RegQueryValueKeyEx的lyType参数。
5.lpData为一个指向包含数据的缓冲区的指针。
6.cbData以字节为单位,指定数据的长度。

返回值同RegCreateKeyEx函数的返回值。

 

3.RegCloseKey Function

 函数原型:

LONG WINAPI RegCloseKey(
  __in  HKEY hKey
);

解释:关闭指定的注册表键,释放句柄。当对一个或多个键或值操作完成以后,需要关闭其键来进行保存操作结果,关闭一个键后,句柄变为非法,此时应释放句柄。

 

示例程序:

#include <windows.h> #include <winreg.h> #include <atlstr.h> // int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { HKEY hKey; DWORD dw; CString cStr("SOFTWARE//HUSTSPY//spytest"); //CString和LPCTSTR之间可以自己转化 CString dataC("D://Program Files//MinGW//bin"); CString seg("segWLesson"); long lReturn; //打开或创建键或子键 lReturn=RegCreateKeyEx(HKEY_CURRENT_USER,cStr,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dw); if(lReturn==ERROR_SUCCESS) { //如果打开或创建成功,则设置注册表中的一个键值 long setRet = RegSetValueEx(hKey,seg,0,REG_EXPAND_SZ,(BYTE*)(LPCTSTR)dataC,dataC.GetLength()+28); if(setRet==ERROR_SUCCESS) MessageBox(NULL, TEXT ("添加成功!"), TEXT ("HelloMsg"), 0); } else { MessageBox(NULL, TEXT ("添加失败!"), TEXT ("HelloMsg"), 0); } RegCloseKey(hKey); //关闭 return 0; }

你可能感兴趣的:(Win API:注册表操作函数)