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或falsedwNotifyFilter
:指的是监控项的监控方式,可选的参数有:
#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;
}
C++监控注册表信息相关推荐
- Win64 驱动内核编程-15.回调监控注册表
回调监控注册表 在 WIN32 平台上,监控注册表的手段通常是 SSDT HOOK.不过用 SSDT HOOK 的方式监控注册表实在是太麻烦了,要 HOOK 一大堆函数,还要处理一些 NT6 系统有而 ...
- python测试开发django-35.xadmin注册表信息
前言 xadmin后台如果要对表的内容增删改查,跟之前的admin.py文件里面写注册表信息一样,需在admin.py同一级目录新建一个adminx.py的文件. 然后在adminx.py文件控制页面 ...
- reg怎样存取注册表信息
//reg怎样存取注册表信息 uses Registry;//放在uses下面 var Form1: TForm1; My_key:Tregistry; implementation {$R ...
- 使用扩展存储过程xp_regread读取注册表信息
T-SQL使用扩展存储过程[master].[dbo].[xp_regread]读取注册表信息. 如下注册表: Insus.NET为了做演示,写了一个用户自定义函数[dbo].[GetServerLo ...
- 怎么彻底删除office注册表信息?
为了能够保证彻底卸载掉office,特别是一些精简版的,通过正常的卸载是没有办法将其彻底卸载干净的,这时候就需要我们手动去把office的注册表信息直接删除掉. 第一步我们直接按键盘的"Wi ...
- 利用PsTools删除注册表信息与利用devcon工具禁用设备
一 手动删除注册表 将PsTools文件夹放置在C盘找到该路径下(C:\Windows\System32)的cmd.exe 右键-以管理员身份运行在弹出的框中输入 cd C:\PsTools 点击 ...
- vc++怎么删除软件注册表信息
用VC++编软件时,会进行注册表的注册,当改变代码信息或者改变工具栏等时,运行结果不变,究其原因是指,程序在退出时,没有删除注册表信息,还保留了上次的注册表信息. 解决方法 首先自定义一个函数文件(包 ...
- 如何恢复误删除的注册表信息
如何恢复误删除的注册表信息 首先我们要打开注册表.不会打开注册表的朋友,请搜索前面我发表过的一篇题为"快速打开注册表方法大全"的文章.在这里我使用最简单的"windows ...
- 新发的日常小实验——c#获取windows注册表信息
文章目录 一.前言 二.打开注册表编辑器 三.使用C#查询注册表信息 一.前言 百度百科:Windows注册表(Registry)实质上是一个庞大的数据库,它存储着下面这些内容:用户计算机软.硬件的有 ...
最新文章
- cinder块存储配置使用lvm
- 庆祝开博第一天!呵呵!
- Java集合之Properties
- 基于EasyDarwin实现幼儿园监控类项目
- 重磅!双腿机器人Digit v2视频流出,自主搬卸货物噪音极小
- python 异常处理模块_扩展Python模块系列(五)----异常和错误处理
- java集合框架总结之思维导图
- 十年架构师详解JVM运行原理
- oracle 循环修改数据库,oracle对一个表的多行数据进行修改,SQL批量修改
- 比赛 | 第一届古汉语分词与词性标注国际评测来啦
- [Canvas]空战游戏进阶 增加发射子弹 敌机中弹爆炸功能
- WinHttp编程步骤
- 银行卡收单____商户费率_代理商分润
- “金三银四” “阿里” 我去定了,谁也拦不住我,这份《Android面试宝典》说的
- python入门(三)--文件处理
- 计算机网络各层的协议
- 【Redis】Redis慢查询
- 日语基础复习 Day 11
- ASIO 和 Websocket++ 独立编译
- JavaScript对象的使用及存储方式的剖析