注册表常用操作归纳总结

写程序经常用到注册表操作,特别麻烦.把一些常用的操作总结如下:

RING3:

1.枚举键下的keyvalue值:

BOOL RegKeyValueEnum(WCHAR *szKey)
{
HKEY hkey; 
WCHAR RegBufferLocal[100]; 
DWORD dwSize=100;
DWORD dwVSize = 0;
DWORD dIndex=0;
DWORD type=REG_SZ;

if (szKey == NULL)
{
   printf("szKey == NULL\n");
   return FALSE;
}

if (RegOpenKeyExW(HKEY_LOCAL_MACHINE,szKey,0,KEY_ALL_ACCESS,&hkey) != ERROR_SUCCESS)
{
   printf("Open Failed\n");
   return FALSE;
}

while(RegEnumValueW(hkey,dIndex,RegBufferLocal,&dwSize,NULL,NULL,NULL,NULL)==ERROR_SUCCESS) 
{
   dIndex++; 
   dwSize = 100;
   printf("%ws\n", RegBufferLocal);
   WCHAR szKeyValue[MAX_PATH] = {0};
   dwVSize = MAX_PATH*sizeof(WCHAR);
   if (RegQueryValueExW(hkey, RegBufferLocal, NULL, &type, (LPBYTE)szKeyValue, &dwVSize) != ERROR_SUCCESS)
   {
    continue;
   }
   printf("%ws\n", szKeyValue);
}

RegCloseKey( hkey);
return TRUE;

}

2.查询某键下的默认值:

BOOL GetKeyDefaultValue(WCHAR *extName, WCHAR *buf)
{
HKEY hKEY = NULL;
DWORD dwSize = 0;
DWORD type=REG_SZ;

if (extName == NULL)
{
   return FALSE;
}

if (RegOpenKeyExW(HKEY_CLASSES_ROOT,extName, 0, KEY_READ, &hKEY) != ERROR_SUCCESS)
{
   return FALSE;
}

if (RegQueryValueExW(hKEY, L"", NULL, &type, NULL, &dwSize) != ERROR_SUCCESS)
{
   return FALSE;
}

if (RegQueryValueExW(hKEY, L"", NULL, &type, (LPBYTE)buf, &dwSize) != ERROR_SUCCESS)
{
   return FALSE;
}
RegCloseKey(hKEY);
return TRUE;
}

3。枚举子键:

void RegEnumKey()
{

   HKEY hKey; 
   WCHAR *lpSubKey= L"HARDWARE\\";
   long ret = RegOpenKeyExW(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_READ, &hKey); 
  
   if (ERROR_SUCCESS != ret) 
    return;
  
   WCHAR achKey[MAX_PATH]; 
   DWORD cbMaxSubKey = MAX_PATH;
   DWORD i = 0;
  
   while (RegEnumKeyExW(hKey, i, achKey, &cbMaxSubKey, NULL, NULL, NULL, NULL) ==      
    ERROR_SUCCESS)
   
   {

    printf("%ws\n", achKey); //显示子项名称
    cbMaxSubKey = MAX_PATH;
   
    ZeroMemory(achKey,MAX_PATH); 
    i++;
   
   }
   RegCloseKey(hKey); 
}

BOOL GetKeyValue(HKEY key,  DWORD option, WCHAR *szKey, WCHAR *szSubKey, WCHAR *buf)
{
 HKEY hKEY = NULL;
 DWORD dwSize = 0;
 DWORD type=REG_SZ;

 if (szKey == NULL || szSubKey == NULL)
 {
  return FALSE;
 }

 if (RegOpenKeyExW(key,szKey, 0, option, &hKEY) != ERROR_SUCCESS)
 {
  return FALSE;
 }

 if (RegQueryValueExW(hKEY, szSubKey, NULL, &type, NULL, &dwSize) != ERROR_SUCCESS)
 {
  RegCloseKey(hKEY);
  return FALSE;
 }

 if (dwSize > (MAX_PATH -1)*sizeof(WCHAR))
 {
  RegCloseKey(hKEY);
  return FALSE;
 }

 if (RegQueryValueExW(hKEY, szSubKey, NULL, &type, (LPBYTE)buf, &dwSize) != ERROR_SUCCESS)
 {
  RegCloseKey(hKEY);
  return FALSE;
 }
 RegCloseKey(hKEY);
 return TRUE;
}

4.创建一个value-key

#include <tchar.h>

//HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
BOOL CreateValKey(HKEY key, TCHAR *szKey, TCHAR *valkey, TCHAR *value)
{
 HKEY hKEY = NULL;

 if (szKey == NULL ||
  valkey == NULL ||
  value == NULL)
 {
  return FALSE;
 }

 if (RegOpenKeyEx(key,szKey, 0, KEY_WRITE, &hKEY) != ERROR_SUCCESS)
 {
  return FALSE;
 }

 if (RegSetValueEx(hKEY, valkey, 0, REG_SZ, (unsigned char *)value, _tcslen(value)) != ERROR_SUCCESS)
 {
  RegCloseKey(hKEY);
  return FALSE;
 }
 RegCloseKey(hKEY);
 return TRUE;
 
}

CreateValKey(HKEY_LOCAL_MACHINE, _TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"),_TEXT("TEST"), _TEXT("c:\\1.exe"))

3 注册表主键介绍 在“开始”→“运行”中输入“regedit”并单击“确定”按钮后,可以打开“注册表编辑器”对话框,此时可以看见在左边的窗口中显示了注册表的所有主键。对于Windows98 来说包含了六个主键,而在Windows 2003/2000/XP 中没有HKEY_DYN_DATA 主键,所以对于Windows 2003/2000/XP 来说只有五个主键 1.HKEY_CLASSES_ROOT 该主键用于管理文件系统,记录的是Windows 操作系统中所有数据文件的信息,主要记录不同文件的 文件名后缀和与之对应的应用程序。当用户双击一个文档时,系统可以通过这些信息启动相应的应用程序。 2.HKEY_CURRENT_USER 该主键用于管理当前用户的配置情况。在这个主键中我们可以查阅计算机中登录的用户信息、密码等 相关信息。 3.HKEY_LOCAL_MACHINE 该主键用于管理系统中的所有硬件设备的配置情况,在该主键中存放的是用来控制系统和软件的设置。由 于这些设置是针对那些使用Windows 系统的用户而设置的,是一个公共配置信息,所以它与具体用户无关。 4.HKEY_USERS 该主键用于管理系统中所有用户的配置信息,电脑系统中每个用户的信息都保存在该文件夹中,如用 户在该系统中的一些口令、标识等。 5.HKEY_CURRENT_CONFIG 该主键用于管理当前系统用户的系统配置情况,如该用户自定义的桌面管理、需要启动的程序列表等信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值