C++监控注册表信息

  • 首先,监控注册表信息的作用在于防止他人篡改数据,因为多数木马程序都是通过修改注册表信息来对电脑进行攻击,在WindowsAPI中,系统提供了RegNotifyChangeKeyValue这个函数方法来实现对注册表相关信息的监控。

RegNotifyChangeKeyValue (
    __in HKEY hKey,
    __in BOOL bWatchSubtree,
    __in DWORD dwNotifyFilter,
    __in_opt HANDLE hEvent,
    __in BOOL fAsynchronous
    );

的API各个参数的含义如下:

  • ·hKey:指的是注册表项,这个可以通过RegOpenKeyEx去获取注册表项的句柄
  • bWatchSubtree指的是是否监控子注册表项的内容 可选参数为true或false
  • dwNotifyFilter:指的是监控项的监控方式,可选的参数有:
#define REG_NOTIFY_CHANGE_NAME          (0x00000001L) //监控名称是否发生改变
#define REG_NOTIFY_CHANGE_ATTRIBUTES    (0x00000002L) //监控属性值是否改变
#define REG_NOTIFY_CHANGE_LAST_SET      (0x00000004L) // time stamp
#define REG_NOTIFY_CHANGE_SECURITY      (0x00000008L)
  • hEvent:指的是创建事件的句柄
  • fAsynchronous:False 表示监听到变化才返回,True:则是会立即返回,但是还会监听,本质上就是异步和同步的区别,然后可以通过监控事件hEvent的方式。这个参数一般情况下True即可

  • 实现步骤:
    1.创建事件
    2.打开注册表对应位置
    3.使用RegNotifyChangeKeyValue进行监控

  • 实现代码:
#include <Windows.h>
#include <iostream>
#include <string>

using namespace std;
bool RegeditNotifyChanged(HKEY hKey_,std::wstring path_)
{
	// 1.创建事件
	HANDLE hNotify = CreateEvent(NULL,FALSE,TRUE,L"RegeditNotifyChanged");
	if (hNotify == INVALID_HANDLE_VALUE)
	{
		cout << "监控事件创建失败" << endl;
		CloseHandle(hNotify);
		return false;
	}

	//2. 打开注册表对应位置
	HKEY hRegKey ;
	if (RegOpenKeyEx(hKey_,path_.c_str(),0,KEY_NOTIFY,&hRegKey)!=ERROR_SUCCESS)
	{
		cout << "打开注册表失败" << endl;
		CloseHandle(hNotify);
		RegCloseKey(hRegKey);
		return false;
	}

	//3.使用RegNotifyChangeKeyValue进行监控
	if (RegNotifyChangeKeyValue(hRegKey,TRUE,REG_NOTIFY_CHANGE_NAME|REG_NOTIFY_CHANGE_ATTRIBUTES|REG_NOTIFY_CHANGE_LAST_SET,hNotify,TRUE)!=ERROR_SUCCESS)
	{
		cout << "监控失败" << endl;
		CloseHandle(hNotify);
		RegCloseKey(hRegKey);
		return false;
	}

	if (WaitForSingleObject(hNotify,INFINITE)!=WAIT_FAILED)
	{
		cout << "监控项发生改变" << endl;
		CloseHandle(hNotify);
		RegCloseKey(hRegKey);
		return true;
	}
	CloseHandle(hNotify);
	RegCloseKey(hRegKey);
	return false;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Music 爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值