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]
打开注册表的句柄,在RegCreateKeyEx 和 RegOpenKeyEx 中得到返回值,只能是以下几个值:
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的直接子键。
本文介绍了WinAPI中的RegOpenKeyEx和RegCreateKeyEx函数,详细阐述了这两个函数的参数、用法及注意事项。RegOpenKeyEx用于打开已存在的注册表键,而RegCreateKeyEx则用于创建新的注册表键。在使用这些函数时,需要注意访问权限、句柄管理和注册表键的安全性。


被折叠的 条评论
为什么被折叠?



