小功能隐藏着大学问---windows的ACL带来的挑战

简介:
为什么说这个功能小呢?
1.此功能只是在用户装了某一软件时才用得着,用户装这个软件的可能性很小;
2.此功能只需要修改一处注册表键值;

   于是这样简单实现了:
   在一个windows服务程序中调用一个修改注册表键值的方法进行修改,单元测试,这个方法很成功。但是在以服务运行的方式进行的测试中,打开此处注册表的方法一直报“找不到注册表路径”的错误。诸位看官,此处注册表的根键为HKEY_CURRENT_USER,大家明白为什么了吗?
 
   “ 是的,与windows的ACL有关,windows服务是以系统权限运行的,在系统权限中,没有HKEY_CURRENT_USER这个键。”

解决方案:
1.操作HKEY_USERS
    HKEY_USERS这个根键可是包含了所有用户的一些信息的,和相应的HKEY_CURRENT_USER刚好一一对应,而且我们要操作的Software键就在其中,于是就利用他来对每一个用户的Software键下的某个键值进行操作。但是我们这个功能得考虑一点,用户一旦装上这个软件后就会在Software键下创建某一键,而我们必须要在短时间内改写此处键的某个值,但是我们根本不知道用户什么时候装啊!

2.注册表监控
     RegNotifyChangeKeyValue这个方法刚好能满足我们,利用windows的消息机制我们可以做到实时监控各个USER下的注册表改变情况,然后利用回调函数来实现修改相应的键值。但是当尝试监控Software键变化时,发现Software键一直有变化的消息,频繁到感觉只有1秒。想想我们总不至于这么频繁的操作注册表吧。

3.设置定时器
  但是我们可以这样做,采用轮询的方式遍历HKEY_USERS下每一个用户,然后尝试打开我们要操作的键值,如果不能打开说明此用户未安装此软件,反之用户一定安装了此软件,我们就可以改写此键值来实现我们的功能。定时器的值我们可以自己设定,至少不用那么频繁的去操作注册表了。

(思考:关于权限这一块windows提供了方法可以模仿当前用户权限)
本文转自永远的朋友博客51CTO博客,原文链接http://blog.51cto.com/yaocoder/813075如需转载请自行联系原作者

yaocoder

相关文章
|
19天前
|
存储 文字识别 C#
.NET开源免费、功能强大的 Windows 截图录屏神器
今天大姚给大家分享一款.NET开源免费(基于GPL3.0开源协议)、功能强大、简洁灵活的 Windows 截图、录屏、Gif动图制作神器:ShareX。
|
1月前
|
Windows
Windows 命令提示符(CMD)操作(七):扩展命令和功能
Windows 命令提示符(CMD)操作(七):扩展命令和功能
50 0
|
7月前
|
开发工具 C# C++
Windows平台RTMP|RTSP播放器实现画面全屏功能
我们在Windows平台实现RTSP或者RTMP播放的时候,有个功能是绕不开的,那就是播放窗口全屏。本文就以大牛直播SDK(官方)的Windows播放器为例,大概讲下大概实现:
154 0
|
1月前
|
Windows
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
144 0
|
2月前
|
C# Windows
.NET开源的一个小而快并且功能强大的 Windows 动态桌面软件
.NET开源的一个小而快并且功能强大的 Windows 动态桌面软件
|
3月前
|
存储 网络协议 安全
Windows Server 2022 安全功能重大更新
这篇文将介绍 Windows Server 2022 中的一些新增的安全功能,在 Windows Server 2019 的强大基础之上引入了许多创新功能。
60 0
|
5月前
|
监控 C# Windows
内网桌面监控软件中的远程控制功能实现(基于C#和Windows Forms)
近年来,随着远程办公的兴起,对内网桌面监控软件的需求逐渐增加。本文将探讨如何通过C#和Windows Forms实现内网桌面监控软件中的远程控制功能,并在结尾部分介绍监控到的数据如何自动提交到网站。
279 0
|
5月前
|
Windows 存储 Cloud Native
C++Qt windows系统托盘增加图标和功能
C++Qt windows系统托盘增加图标和功能
|
6月前
|
Windows
利用Windows自带的功能当程序崩溃时产生崩溃转储文件(dmp)
利用Windows自带的功能当程序崩溃时产生崩溃转储文件(dmp)
|
7月前
|
缓存 网络协议 C#
C#开源、功能强大、免费的Windows系统优化工具 - Optimizer
C#开源、功能强大、免费的Windows系统优化工具 - Optimizer