• 首先,监控注册表信息的作用在于防止他人篡改数据,因为多数木马程序都是通过修改注册表信息来对电脑进行攻击,在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;
}

C++监控注册表信息相关推荐

  1. Win64 驱动内核编程-15.回调监控注册表

    回调监控注册表 在 WIN32 平台上,监控注册表的手段通常是 SSDT HOOK.不过用 SSDT HOOK 的方式监控注册表实在是太麻烦了,要 HOOK 一大堆函数,还要处理一些 NT6 系统有而 ...

  2. python测试开发django-35.xadmin注册表信息

    前言 xadmin后台如果要对表的内容增删改查,跟之前的admin.py文件里面写注册表信息一样,需在admin.py同一级目录新建一个adminx.py的文件. 然后在adminx.py文件控制页面 ...

  3. reg怎样存取注册表信息

    //reg怎样存取注册表信息 uses Registry;//放在uses下面 var   Form1: TForm1;   My_key:Tregistry; implementation {$R ...

  4. 使用扩展存储过程xp_regread读取注册表信息

    T-SQL使用扩展存储过程[master].[dbo].[xp_regread]读取注册表信息. 如下注册表: Insus.NET为了做演示,写了一个用户自定义函数[dbo].[GetServerLo ...

  5. 怎么彻底删除office注册表信息?

    为了能够保证彻底卸载掉office,特别是一些精简版的,通过正常的卸载是没有办法将其彻底卸载干净的,这时候就需要我们手动去把office的注册表信息直接删除掉. 第一步我们直接按键盘的"Wi ...

  6. 利用PsTools删除注册表信息与利用devcon工具禁用设备

    一  手动删除注册表 将PsTools文件夹放置在C盘找到该路径下(C:\Windows\System32)的cmd.exe  右键-以管理员身份运行在弹出的框中输入 cd C:\PsTools 点击 ...

  7. vc++怎么删除软件注册表信息

    用VC++编软件时,会进行注册表的注册,当改变代码信息或者改变工具栏等时,运行结果不变,究其原因是指,程序在退出时,没有删除注册表信息,还保留了上次的注册表信息. 解决方法 首先自定义一个函数文件(包 ...

  8. 如何恢复误删除的注册表信息

    如何恢复误删除的注册表信息 首先我们要打开注册表.不会打开注册表的朋友,请搜索前面我发表过的一篇题为"快速打开注册表方法大全"的文章.在这里我使用最简单的"windows ...

  9. 新发的日常小实验——c#获取windows注册表信息

    文章目录 一.前言 二.打开注册表编辑器 三.使用C#查询注册表信息 一.前言 百度百科:Windows注册表(Registry)实质上是一个庞大的数据库,它存储着下面这些内容:用户计算机软.硬件的有 ...

最新文章

  1. cinder块存储配置使用lvm
  2. 庆祝开博第一天!呵呵!
  3. Java集合之Properties
  4. 基于EasyDarwin实现幼儿园监控类项目
  5. 重磅!双腿机器人Digit v2视频流出,自主搬卸货物噪音极小
  6. python 异常处理模块_扩展Python模块系列(五)----异常和错误处理
  7. java集合框架总结之思维导图
  8. 十年架构师详解JVM运行原理
  9. oracle 循环修改数据库,oracle对一个表的多行数据进行修改,SQL批量修改
  10. 比赛 | 第一届古汉语分词与词性标注国际评测来啦
  11. [Canvas]空战游戏进阶 增加发射子弹 敌机中弹爆炸功能
  12. WinHttp编程步骤
  13. 银行卡收单____商户费率_代理商分润
  14. “金三银四” “阿里” 我去定了,谁也拦不住我,这份《Android面试宝典》说的
  15. python入门(三)--文件处理
  16. 计算机网络各层的协议
  17. 【Redis】Redis慢查询
  18. 日语基础复习 Day 11
  19. ASIO 和 Websocket++ 独立编译
  20. JavaScript对象的使用及存储方式的剖析

热门文章

  1. 几行代码,轻松带你实现Java生成二维码功能!
  2. Java性能调优小技巧
  3. empty()、isset()、is_null()的区别
  4. java学习笔记之DBUtils工具包
  5. 文本框中只能输入小于等于100的正整数
  6. 7月-伟大的事业,一般都是在下半年完成的
  7. C#中的for,while和do-while循环语句
  8. PHP如何快速读取大文件
  9. [转]PHP或ASP   中Cookie禁用了,Session还能用吗?
  10. 新顶级域名、Cloud域名