搜索
简帛阁>技术文章>在应用程序中编辑组策略

在应用程序中编辑组策略

组策略编辑器是系统个性化的一个常用的方式。但是它没有提供备份手段,导致我们在换新机器或重装系统的时候,需要重新手动配置,如果修改的策略比较多的时候是一件比较麻烦的事情。周末的时候研究了下如何自己写程序实现组策略的编辑。

组策略的启动方式是"gpedit.msc",但他实际上的进程是mmc.exe,我们可以通过ProcessMonotor监控其对注册表的修改方法,具体可以参考这篇文章:

如何查看组策略对象修改的注册表设置

后来发现了一个更加小巧好用的程序:RegFromApp,它可以更方便快速mmc.exe对注册表的修改。一个基本的示例如下。

class="jianboge_code">
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48914450-7595-411C-AFD3-AE2A07C8500C}User\Software\Policies\Microsoft\PreviousVersions]
"DisableRemotePage"=dword:00000001

 然而,实际使用中发现,直接构造这样的注册表键值是不行的,原因在于它的路径是动态的。

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48914450-7595-411C-AFD3-AE2A07C8500C}User\Software\Policies\Microsoft\PreviousVersions]

其中标红的部分是动态的,每次组策略编辑的时候是不一样的。网上也有帖子讨论这一问题:https://bbs.csdn.net/topics/70402935

 

要打开这个动态注册表键值,需要用到IGroupPolicyObject相关的Windows API,网上也有相关的示例:http://delphi.longzu.net/viewthread.php?tid=49579&extra=page%3D2.

也有不少c#版的封装。我这里取得是GitHub的一个开源项目priv10的封装,它里面的工程LocalPolicy就是对组策略接口的封装,一个简单的示例如下:

var po  = new ComputerGroupPolicyObject();
var key = po.GetRootRegistryKey(GroupPolicySection.User)
            .OpenSubKey(@"Software\Policies\Microsoft\PreviousVersions");
key.SetValue("DisableRemotePage", 0);|
po.Save();

上面的例子演示了如何打开这个动态的注册表,然后就是普通的注册表操作了。操作完成后,需要调用Save写入策略。

另外,需要注意的是,组策略相关的API是要求在STA线程下才能使用的,如果我们的主程序是MTA的,可以新建一个STA的线程,在STA线程中执行相关API:

Thread thread = new Thread(EditPolicy);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

完整关代码示例可以参看:https://gitee.com/tianfang/GroupPolicyEditor

策略编辑器是系统个性化的一个常用的方式。但是它没有提供备份手段,导致我们换新机器或重装系统的时候,需要重新手动配置,如果修改的策略比较多的时候是一件比较麻烦的事情。周末的时候研究了下如何自己写程
Windows10家庭用户也可以使用免费的替代工具称为政策加更改组策略设置。政策上是一个独立的工具,允许你改变任何版本的Windows策略设置,包括Windows10家庭。通常,当你需要改变你的W
Internet上我们每天都会遇到数不清的表单,也看到其中大部分并没有限制用户多次提交同一个表单。缺乏这种限制有时候会产生某些预料不到的结果,如重复订阅邮件服务或重复投票等。或许一些asp初学者并
156改变保护属性(1)VritualProtect函数参数描述PVOIDpvAddress指向要修改属性的内存基地址SIZE_TdwSize区域的大小,以字节为单位DWORDflNewProtect
151预订(Reserve)地址空区域(1)VirutalAlloc(pvAddress,dwSize,fdwAllocationType,fdwProtect)①PVOIDpvAddress参数:内
(此文章同时发表本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)今天的文章和测试相关,概述了如何对现代网站和应用程序中的后端到前端进行测试。现代的应用程序比起任何一个时候都要复杂
NotPad++编辑第一个java程序随便新建一个文件夹,存放代码新建一个java文件(新建一个txt文件,再把“新建文件夹txt”全部改成“Hellojava”)文件后缀名为javaHelloj
目录实现效果实现代码最近由于公司开始使用elementUI,开发的过程需要用到对表格的单元格进行编辑,下面是我自己实现表格可编辑的方式,感兴趣的可以了解一下实现效果编辑之后对应表格数据该字段值也就发
为了使用简单,需要先写一个单件类,头文件的代码如下:其中静态方法Instance保证IconHelper的实例全局唯一(注意构造函数已经私有化了)ifndefICONHELPER_HdefineICO
Windows11终于来了,虽然它提供了一些惊人的功能,包括全新的用户界面,但它确实存在一些问题。虽然有些是次要的,可以很容易地修复,但其他的可能更严重,并且完全阻止您访问某些功能。许多人报告说设置应