RegOpenKeyEx和RegCreateKeyEx函数

本文介绍了WinAPI中的RegOpenKeyEx和RegCreateKeyEx函数,详细阐述了这两个函数的参数、用法及注意事项。RegOpenKeyEx用于打开已存在的注册表键,而RegCreateKeyEx则用于创建新的注册表键。在使用这些函数时,需要注意访问权限、句柄管理和注册表键的安全性。

0x01.RegOpenKeyEx函数

LONG WINAPI RegOpenKeyEx(
    _In_     HKEY    hKey,      // 需要打开的主键的名称
    _In_opt_ LPCTSTR lpSubKey,  //需要打开的子键的名称
    _In_     DWORD   ulOptions, // 保留,设为0
    _In_     REGSAM  samDesired,// 安全访问标记,也就是权限
    _Out_    PHKEY   phkResult  // 得到的将要打开键的句柄
);

1.参数:hKey [in]
打开注册表的句柄,在RegCreateKeyExRegOpenKeyEx 中得到返回值,只能是以下几个值:

HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS

2.参数lpSubKey [in, optional]要打开的注册表子项的名称。
键名称不区分大小写。lpSubKey参数可以是指向空字符串的指针。 如果lpSubKey是一个指向空字符串的指针,hKey是HKEY_CLASSES_ROOT,phkResult接收传递给函数的相同的hKey句柄。 否则,phkResult接收由hKey指定的键的新句柄。
只有当hKey是预定义键之一时,lpSubKey参数才可以为NULL。 如果lpSubKey为NULL,hKey为HKEY_CLASSES_ROOT,则phkResult接收由hKey指定的键的新句柄。 否则,phkResult接收传递给函数的相同hKey句柄。
有关详细信息,请参阅注册表元素大小限制。

3.参数ulOptions [in]指定打开密钥时要应用的选项。 将此参数设置为零或以下值:值含义REG_OPTION_OPEN_LINK关键是一个符号链接。 注册表符号链接只应在绝对必要时使用。

4.参数samDesired [in]指定要打开的键的所需访问权限的掩码。如果密钥的安全描述符不允许对调用进程的请求访问,则该函数失败。有关详细信息,请参阅注册表项安全性和访问权限。

5.参数phkResult [out]指向接收打开的键的句柄的变量的指针。如果键不是预定义的注册表项之一,请在完成使用该句柄后调用RegCloseKey函数。

0x02.包含库文件

这里写图片描述

//-- 转换基础键
HKEY GetBaseRegKey(char* keystr)
{   
HKEY hKey; 
  if(strcmp(keystr,"HKEY_CLASSES_ROOT")==0)   
 hKey=HKEY_CLASSES_ROOT; 
  if(strcmp(keystr,"HKEY_CURRENT_CONFIG")==0) 
  hKey=HKEY_CURRENT_CONFIG;   
 if(strcmp(keystr,"HKEY_CURRENT_USER")==0)    hKey=HKEY_CURRENT_USER; 
  if(strcmp(keystr,"HKEY_LOCAL_MACHINE")==0)    hKey=HKEY_LOCAL_MACHINE;   
if(strcmp(keystr,"HKEY_USERS")==0)    hKey=HKEY_USERS;   
 return hKey;
}
// 删除一个键值
int RegDelValue(){ 
  HKEY bKey,hKey; 
  LONG retVal; 
  char BaseKey[512];   
 char SubKey[512]; 
   char SubKeyValueName[512];   
 strcpy(BaseKey,"HKEY_CURRENT_USER"); 
   strcpy(SubKey,"Control Panel\\Desktop"); 
  strcpy(SubKeyValueName,"ShowMenuDelay");   
bKey = GetBaseRegKey(BaseKey); 
   retVal = RegOpenKeyEx(bKey,SubKey,0,KEY_ALL_ACCESS,&hKey); //-- 打开子键 
  if (retVal != ERROR_SUCCESS)      return 1;   
  retVal = RegDeleteValue(hKey,(LPCTSTR)SubKeyValueName);   
 if(retVal !=ERROR_SUCCESS)   
{    
    RegCloseKey(hKey);   
     return 2;   
 }   
 RegCloseKey(hKey);   
 return 0;
}

0x03.RegCreateKeyEx函数

RegCreateKeyEx,是计算机用语,用于创建指定的注册键。

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
);

参数:

hKey

入参,一个打开键的句柄。调用该函数的进程必须拥有KEY_CREATE_SUB_KEY的权力。该句柄可以是RegCreateKeyEx或者RegOpenKeyEx的返回值,也可以是以下预定义的值

HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
lpSubKey

入参,标识子键名称。该参数不能为空。参数中不能存在(\)

Reserved

保留值,必须为0

lpClass

入参,指向一个字符串,该字符串定义了该键的类型。可以为空。该参数可以在操作本地和远程注册表时使用

dwOptions

入参,该参数可以是以下值

REG_OPTION_BACKUP_RESTORE,0x00000004L
REG_OPTION_NON_VOLATILE,0x00000000L ,一般使用该值
REG_OPTION_VOLATILE,0x00000001L
samDesired

入参,定义访问权限

lpSecurityAttributes

入参,定义返回的句柄是否可以被子进程继承,为NULL时不能继承。

phkResult

出参,保存返回的句柄

lpdwDisposition

出参,可以是以下值。如果为空,则不返回。

REG_CREATED_NEW_KEY,0x00000001L     该键是新创建的键
REG_OPENED_EXISTING_KEY,0x00000002L 该键是已经存在的键
Return Values

成功则返回 ERROR_SUCCESS.

Remarks

该函数创建的键没有键值。应用程序不能创建HKEY_USERS 或者 HKEY_LOCAL_MACHINE的直接子键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值