win10相机注册表变化监控

摘要:
//MonitorhelperpublicclassRegeditMonitorHelper{///////检测注册表项名称的更改,并检测注册表创建和删除事件////publicstaticintReG_NOTIFY_CHANGE_NAME=0x1;//////检测属性的更改////publicstaticindReG_NOT
// monitorhelper
public class RegeditMonitorHelper
{
    /// <summary>
    /// 检测注册表项名称变化,以及侦测注册表的创建和删除事件
    /// </summary>
    public static int REG_NOTIFY_CHANGE_NAME = 0x1;
    /// <summary>
    /// 侦测属性的变化
    /// </summary>
    public static int REG_NOTIFY_CHANGE_ATTRIBUTES = 0x2;
    /// <summary>
    /// 侦测上一次修改时间的变化
    /// </summary>
    public static int REG_NOTIFY_CHANGE_LAST_SET = 0x4;
    /// <summary>
    /// 侦测对安全特性的改动
    /// </summary>
    public static int REG_NOTIFY_CHANGE_SECURITY = 0x8;
    public static uint HKEY_CURRENT_USER = 0x80000001;
    public static uint HKEY_LOCAL_MACHINE = 0x80000002;
    public const UInt32 INFINITE = 0xFFFFFFFF;
    [DllImport("kernel32.dll", SetLastError = true)]
    public static extern UInt32 WaitForSingleObject(IntPtr hHandle, UInt32 dwMilliseconds);
    [DllImport("kernel32.dll")]
    public static extern uint WaitForMultipleObjects(uint nCount, IntPtr[] lpHandles, bool bWaitAll, uint dwMilliseconds);
    [DllImport("kernel32.dll")]
    public static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName);
    [DllImport("Advapi32.dll")]
    public static extern int RegNotifyChangeKeyValue(IntPtr hKey, bool watchSubtree, int notifyFilter, IntPtr hEvent, bool asynchronous);
    [DllImport("advapi32.dll", EntryPoint = "RegOpenKeyEx")]
    public static extern int RegOpenKeyEx(uint hKey, string lpSubKey, RegOption dwOptions, RegSAM samDesired, ref IntPtr phkResult);
    [DllImport("kernel32.dll")]
    public static extern IntPtr SetEvent(IntPtr lpEventAttributes);

    [Flags]
    public enum RegOption
    {
        NonVolatile = 0x0,
        Volatile = 0x1,
        CreateLink = 0x2,
        BackupRestore = 0x4,
        OpenLink = 0x8
    }
    [Flags]
    public enum RegSAM
    {
        QueryValue = 0x0001,
        SetValue = 0x0002,
        CreateSubKey = 0x0004,
        EnumerateSubKeys = 0x0008,
        Notify = 0x0010,
        CreateLink = 0x0020,
        WOW64_32Key = 0x0200,
        WOW64_64Key = 0x0100,
        WOW64_Res = 0x0300,
        Read = 0x00020019,
        Write = 0x00020006,
        Execute = 0x00020019,
        AllAccess = 0x000f003f
    }
}
private const string szCamPath = @"SOFTWAREMicrosoftWindowsCurrentVersionCapabilityAccessManagerConsentStorewebcam";
// 注册表停止的点 IntPtr terminate1CamEvent = IntPtr.Zero; private void CreateCameraMonitor() { IntPtr mhModeNwKey = IntPtr.Zero; IntPtr modeEvent = IntPtr.Zero; IntPtr[] hEvents = null; try { int finx = RegeditMonitorHelper.RegOpenKeyEx(RegeditMonitorHelper.HKEY_LOCAL_MACHINE, szCamPath, 0, RegeditMonitorHelper.RegSAM.Read | RegeditMonitorHelper.RegSAM.QueryValue | RegeditMonitorHelper.RegSAM.WOW64_64Key, ref mhModeNwKey); if (finx == 0) { int _regFilter = RegeditMonitorHelper.REG_NOTIFY_CHANGE_NAME | RegeditMonitorHelper.REG_NOTIFY_CHANGE_ATTRIBUTES | RegeditMonitorHelper.REG_NOTIFY_CHANGE_LAST_SET | RegeditMonitorHelper.REG_NOTIFY_CHANGE_SECURITY; modeEvent = RegeditMonitorHelper.CreateEvent(IntPtr.Zero, false, false, null); terminate1CamEvent = RegeditMonitorHelper.CreateEvent(IntPtr.Zero, false, false, null); hEvents = new IntPtr[] { modeEvent, terminate1CamEvent }; while (true) { _logger.Info("Monitor thread--->webcam,CreateCameraMonitor111"); RegeditMonitorHelper.RegNotifyChangeKeyValue(mhModeNwKey, true, _regFilter, modeEvent, true); uint trigger = RegeditMonitorHelper.WaitForMultipleObjects(2, hEvents, false, RegeditMonitorHelper.INFINITE);//无限等待modeEvent(注册表变化)和terminateEvent(关闭事件)反馈的结果,省的一直循环判断,浪费性能 if (trigger == 0) { _logger.Info($"UseWinCamera = {UseWinCamera}"); UseWinCamera = ResponseAgent.GetIntance().GetWinCameraSupport();// 获取当前状态 _logger.Info($"get cam page UseWinCamera = {UseWinCamera};"); } else if (trigger == 1) { _logger.Info("Monitor webcam stop monitor"); break; } else { _logger.Info($"Monitor webcam Error trigger:{trigger}"); break; } } } else { _logger.Info($"MonitorAdjustDistance Open {szCamPath} ErrorCode:{finx}"); } } catch (Exception ex) { _logger.Info($"CreateCameraMonitor111,{ex.Message}"); } }
// start monitor
System.Threading.Thread thread1 = new System.Threading.Thread(CreateCameraMonitor1);// 启动注册表监控线程
thread1.Start();


// stop monitor
RegeditMonitorHelper.SetEvent(terminate1CamEvent);

免责声明:文章转载自《win10相机注册表变化监控》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇数独游戏的难度等级分析及求解算法研究1——关于数独解决Jenkins用shell脚本部署后,Jenkins自动杀掉启衍生出来的守护进程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

win10安装docker步骤

一、启用Hyper-V  打开控制面板 - 程序和功能 - 启用或关闭Windows功能,勾选Hyper-V,然后点击确定,之后重启电脑; 注意不能同时安装VMware; 二、去docker注册账号,地址:https://hub.docker.com; 注册完账号后登陆可以在线下载docker 安装包 下载完成后运行安装包,安装完成后界面如图: 单击C...

Win10双机调试(Windbg+VMware+Win10LTSC)

0x00 前期准备:主机安装Windbg 主机安装VMware 在VMware中安装Win10LTSC并且激活 主机配置符号文件相关的环境变量: 0x01 虚拟系统配置:在虚拟系统设置的硬件一栏,删除打印机之后添加串口(打印机会占用串口1): 配置串口: 0x02 修改虚拟系统启动选项:在虚拟系统中以管理员身份启动powershell,执行 bc...

WIN10 使用POWERSHELL 设置单应用KIOSK模式(win10家庭版或企业版)

win10 使用PowerShell 设置单应用kiosk模式 win10 家版或企业版PowerShellshell 启动器 v1Autologon.exe 注意事项 win10 家庭版或企业版。 下载安装Autologon.exe。 Shell 启动器 v1调用的应用程序不可有黑窗(类似cmd)。 以下示例采用账号:- 账户:'KIOSK'- 密码:'...

无法使用MSHFLXGD.OCX控件的一个解决办法

朱金灿 一次在VS 2005编的一个程序上无法使用MSHFLXGD.OCX控件(具体症状是当要使用该控件时出现程序崩溃)。开始以为MSHFLXGD.OCX控件没有注册,使用regsvr32进行注册,但是注册成功后依然无法使用。于是上网搜索资料,大致知道了原因:原来是微软的OCX控件大多需要许可证,有了分发许可证的控件才可以正常运行。 按照网上的说法是:...

为自己编写的windows应用程序制作安装包

1 写好了一个windows程序之后如何制作安装包 这个在vs中就可以直接发布了,可以制作msi的安装包和exe的安装包。 2 window应用程序安装包做了哪些事情 rpm安装包的话,只是把相应的文件拷贝到不同的目录。那么window安装包做了什么呢? msi里面有一个table,里面是一条条的指令,windows installer会解释并执行这些指令...

Windows注册表基础代码

Windows下对注册表进行操作使用的一段基础代码Reg.h: #pragmaonce#include<assert.h>#include<windows.h>classReg{HKEYhkey;public:voidopen(HKEYroot,char*subKey);//打开注册表键,不存在则创建voiddel(HKEYroot...