修改如何删除注册表的域用户信息加域

     首先说说为什么要写这么一个服务。由于电脑要在公司域中使用,所以不可避免的会继承域中的组策略配置。域中95% 的计算机是XP系统,部分组策略对于Windows 7 系统来说有些多余而且带来很多麻烦。
问题一、清除虚拟内存策略
     清除虚拟内存策略(Clear virtual memory pagefile)可以在一定程度上降低域中计算机病毒的传播。但问题是如果启动这个策略也会降低Windows 关机速度(3~5分钟),对于关机速度奇快(13~16秒)的Windows 7 系统来说简直是一个沉重的打击。
     修改这个组策略只需将[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management] 中的ClearPageFileAtShutdown 设为0x 即可。
问题二、系统更新策略
     在域中通过组策略可以使计算机通过 进行补丁更新,虽然是针对XP 系统设置的,但它却完全破坏了Windows 7 系统本身的更新机制,详情请参考。解决这个问题的办法只需将注册表中[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate] 完全删除。
     由此可见解决上面两个问题都可以通过修改注册表来实现,当然有人会说也可以通过修改域组策略来达到不在某一个域用户主机上应用组策略的效果,但这个方法还是不建议使用。起初写了一个Reg 文件运行一下就将注册表更新了,但总这么做也很麻烦。所以就想到创建一个服务让它在后台运行并修改注册表内容。
Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
&ClearPageFileAtShutdown&=dword:
     创建一个Windows Service 项目,新建RegValueSet 类,并写入以下代码内容。在类中ChangeKeyValue() 方法用于完成上述注册表修改操作。其中Registry.LocalMachine.DeleteSubKeyTree(updatePath); 将删除系统更新组策略信息,RegSetValueEx(hKey, keyName, 0, RegistryValueKind.DWord, keyVal, 4); 会将ClearPageFileAtShutdown 键值修改为0。
     开始我尝试通过RegNotifyChangeKeyValue 方法监测SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management 下的键值是否被域组策略修改,如果被修改了便会执行RegSetValueEx 方法,但这种方式在服务中似乎行不通(启动服务时它会一直处于监听状态)。经测试发现其实只需在开/关机时进行ChangeKeyValue() 操作即可,所以便将代码改为以下方式。
using System.Runtime.InteropS
using Microsoft.Win32;
namespace RegMonitor
class RegValueSet
private static UIntPtr HKEY_LOCAL_MACHINE = new UIntPtr(0xu);
private static UIntPtr hK
private const int keyRights = 0xF003F; //KEY_ALL_ACCESS (0xF003F)
private const UInt32 INFINITE = 0xFFFFFFFF;
private const UInt32 WAIT_FAILED = 0xFFFFFFFF;
public static void ChangeKeyValue()
string clrPath = @&SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management&;
string updatePath = @&SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate&;
string keyName = &ClearPageFileAtShutdown&;
//Delete Windows Update Settings
int vOpen = RegOpenKeyEx(HKEY_LOCAL_MACHINE, updatePath, 0, keyRights, out hKey);
if (vOpen == 0)
Registry.LocalMachine.DeleteSubKeyTree(updatePath);
//Change Clear Page File Value
RegOpenKeyEx(HKEY_LOCAL_MACHINE, clrPath, 0, keyRights, out hKey);
IntPtr hEvent = CreateEvent(IntPtr.Zero, true, false, null);
RegNotifyChangeKeyValue(hKey, true, 4, hEvent, true);
while (WaitForSingleObject(hEvent, INFINITE) != WAIT_FAILED)
RegistryKey key = Registry.LocalMachine.OpenSubKey(clrPath);
int val = (int)key.GetValue(keyName);
if (val != 0)
IntPtr keyVal = Marshal.AllocHGlobal(4);
Marshal.WriteInt32(keyVal, 0, 0);
RegSetValueEx(hKey, keyName, 0, RegistryValueKind.DWord, keyVal, 4);
key.Close();
RegCloseKey(hKey);
[DllImport(&advapi32.dll&, CharSet = CharSet.Auto, SetLastError = true)]
public static extern int RegOpenKeyEx(
UIntPtr hKey,
string subKey,
int ulOptions,
int samDesired,
out UIntPtr hkResult);
[DllImport(&advapi32.dll&, SetLastError = true)]
public static extern int RegSetValueEx(
UIntPtr hKey,
[MarshalAs(UnmanagedType.LPStr)] string lpValueName,
int Reserved,
RegistryValueKind dwType,
IntPtr lpData,
int cbData);
[DllImport(&advapi32.dll&, SetLastError = true)]
public static extern int RegCloseKey(
UIntPtr hKey);
[DllImport(&kernel32.dll&)]
public static extern IntPtr CreateEvent(
IntPtr lpEventAttributes,
bool bManualReset,
bool bInitialState,
string lpName);
[DllImport(&advapi32.dll&, SetLastError = true)]
public static extern int RegNotifyChangeKeyValue(
UIntPtr hKey,
bool watchSubtree,
int dwNotifyFilter,
IntPtr hEvent,
bool fAsynchronous);
[DllImport(&kernel32.dll&, SetLastError = true)]
static extern UInt32 WaitForSingleObject(
IntPtr hHandle,
UInt32 dwMilliseconds);
     最后在Service 属性中将CanShutdown 和CanStop 设为True,将Service 名称设为RegistryMonitor。并在OnStart(服务启动)、OnStop、OnShutdown(关机) 加入ChangeKeyValue() 方法就可以了,如下代码所示。
using System.ServiceP
namespace RegMonitor
public partial class Service1 : ServiceBase
public Service1()
InitializeComponent();
protected override void OnStart(string[] args)
RegValueSet.ChangeKeyValue();
protected override void OnShutdown()
RegValueSet.ChangeKeyValue();
protected override void OnStop()
RegValueSet.ChangeKeyValue();
     编译项目后安装RegistryMonitor 服务(Installutil),并在Services.msc 中启动RegistryMonitor 服务。至此,就不用再担心组策略的继承问题了。
1. RegOpenKeyEx Function
2. RegSetValueEx Function
3. RegistryKey Methods
源程序下载
阅读(...) 评论()
Copyright & 2010 Gnie查看:4285|回复:7
问题是这样的:
为了防止域用户在本地计算机上随便卸载和安装软件,
所以根据需求将域用户添加到了本地的“Users“组或”Power Users“组。
但是现在在域控器的用户配置—》windows配置—》脚本中添加了”登陆脚本“,
使用户在登陆后执行脚本。
现在的问题是:这个脚本执行需要更改本地注册表,然而因为域用户有的在本地”Users组“或&Power Users组”,
所以不能执行脚本:L(域用户在本地“Administrator组”的可以执行脚本)。
后来我同时将脚本添加到了计算机配置—》windows配置—》脚本中的启动项中,问题依旧~!:'( .
这种情况有什么好的办法解决呢,:Q
在线云服务-您身边的IT专家团 ...
域用户默认就是属于domain users& &而domain&&users默认是属于本地的users组 即,没有权限安装卸载软件的!并不想要做任何的改动
在线云服务--您身边的IT专家团--
社区微软技术超级群-
引用:原帖由 IT之梦 于
18:58 发表
域用户默认就是属于domain users& &而domain&&users默认是属于本地的users组 即,没有权限安装卸载软件的!并不想要做任何的改动 哦...了解了。
但现在的问题是只有添加到本地“administrator组”的域用户才能执行这个脚本执行,这可如何是好啊~!
在线云服务-您身边的IT专家团 ...
引用:原帖由 kissmi 于
20:39 发表
哦...了解了。
但现在的问题是只有添加到本地“administrator组”的域用户才能执行这个脚本执行,这可如何是好啊~! 默认情况下部署到计算机的策略是不需要用户权限的,使用的是system的权限!
在线云服务--您身边的IT专家团--
社区微软技术超级群-
引用:原帖由 IT之梦 于
21:31 发表
默认情况下部署到计算机的策略是不需要用户权限的,使用的是system的权限! 恩 谢谢~!明天我再研究一下,不行的话只能逐一的到客户机前执行一次脚本了。
优秀技术经理
你的组策略针对的对象不对,应该配置在计算机配置下,而不是用户配置下!
引用:原帖由 hubuxcg 于
23:06 发表
你的组策略针对的对象不对,应该配置在计算机配置下,而不是用户配置下! 我在计算机配置下系统启动中也添加了脚本,问题依旧?我说的脚本是批处理脚本.BAT,和这个有关系么?
优秀技术经理
和什么格式没有关!
如果你配置计算机策略下,还要看你对应的OU下,有没有计算机对象?查看: 1853|回复: 15
更改局域网指定电脑的注册表
阅读权限30
在线时间 小时
各位老师:
& &&&谢谢!
& & 终于在咱论坛中找到更改注册表的语法!但是如何更改局域网中指定电脑的注册表呢???
& & 期待老师予以解决!!
& & 万分感谢!!
Private Sub 只读U盘()
& & Dim AA As Object
& & Dim RegPath As String
& & Set AA = CreateObject(&WScript.shell&)
& & RegPath = &HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies\WriteProtect&
& & AA.regWrite RegPath, 1, &REG_DWORD&
& & Set AA = Nothing
[ 本帖最后由 shaojq123 于
14:18 编辑 ]
(18.05 KB, 下载次数: 0)
14:18 上传
阅读权限30
在线时间 小时
急盼老师解答????
阅读权限95
在线时间 小时
要将那个电脑设置成能远程修改注册表才行吧.
阅读权限70
在线时间 小时
大哥您玩得真深
阅读权限30
在线时间 小时
原帖由 lb_bn 于
10:30 发表
要将那个电脑设置成能远程修改注册表才行吧.
lb_bn老师:可以远程更改!但是如何用VBA更改呢???
阅读权限30
在线时间 小时
可以打开对方的注册表!可以手工更改!但是不能用VBA更改,就是为了方便些1!
出现两个注册表:一个是:我的电脑 一个是:192.168.2.8
总是改我的电脑那一个!不能修改192.168.2.8那一个!
怎么才能修改呢?
各位老师!!
阅读权限30
在线时间 小时
咱论坛的精英们啊!各位老师!!
能做到吗?咱VBA?????
阅读权限30
在线时间 小时
各位老师:
能看到图片吗????
阅读权限95
在线时间 小时
这里有个vbs的例子,楼主可以参考一下.
阅读权限30
在线时间 小时
原帖由 lb_bn 于
14:44 发表
这里有个vbs的例子,楼主可以参考一下.
lb_bn 老师:能不能给写一个!???
谢谢!资料很好!感谢!就是看不太懂!!
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师域控中批量下发注册表_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
域控中批量下发注册表
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢查看:9282|回复:16
初级工程师
DC:WIN2008
CLIENT:XP
想在域中发布了一个注册表,任何用户在计算机开机后执行,且只执行一次(因为是系统优化注册表)。
脚本已经写好。用的regedit.exe -s代码调用。
放在计算机配置-WINDOWS设置-脚本(开关机)下面,没有对任何用户授权。
客户端刷策略后用RSOP.MSC查看,脚本已经应用,但没实际效果。
求解,谢谢
我是一只小小小小牛
是不是你脚本的问题&&你把脚本放在本地策略中试试能否生效
如果客户端都是win7较多 可以考虑使用组策略 首选项来代替脚本
热衷微软技术,技术成就梦想!
我的博客:
初级工程师
客户端XP为主,WIN7也有,到时准备分类放不同的OU,给不同的组策略。
脚本代码如下:
regedit.exe -s REG.REG
BAT跟REG.REG一同放在DC 组策略SID目录下的 (Machine-Scripts-startup)下面。
没设置脚本参数。
高级工程师
执行这条命令需要管理员权限,建议放在计算机策略的脚本中。
南岳冬癹,阁隐梨花;竹亭煮酒,锵锵夜话
初级工程师
楼上的朋友,我脚本是放在计算机配置的脚本中啊
初级工程师
批处理跟注册表我都已经在本地测试过了,是可行的。
优秀技术经理
注册表分为个人配置注册表及通用配置注册表,估计应该是你add进去的注册表位置错了,二一个,如非必要,是不建议通过策略修改注册表,倒非什么安全性的问题,只是比较麻烦。
初级工程师
楼上的朋友,个人跟通用注册表不太明白。
我注册表的格式如下(去掉注册表头,两个例子):
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
&StatusBarOther&=dword:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
&SearchSystemDirs&=dword:
&SearchHidden&=dword:
&IncludeSubFolders&=dword:
涉及到不同的注册表路径,请指教。
我是一只小小小小牛
引用:原帖由 一叶微风 于
10:21 发表
客户端XP为主,WIN7也有,到时准备分类放不同的OU,给不同的组策略。
脚本代码如下:
regedit.exe -s REG.REG
BAT跟REG.REG一同放在DC 组策略SID目录下的 (Machine-Scripts-startup)下面。
没设置脚本参数。 ... regedit.exe -s \\servername\folder\reg.reg 试试
热衷微软技术,技术成就梦想!
我的博客:
初级工程师
版主的意思是在脚本里也要写上完整的UNC路径?
我脚本跟REG都放在目录下的哦,下班回去试试。
引用:原帖由 一叶微风 于
14:52 发表
楼上的朋友,个人跟通用注册表不太明白。
我注册表的格式如下(去掉注册表头,两个例子):
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
&StatusBarOther&=dword:
[HKEY_CURRENT_USER\Software\M ... 如果执行了,但没效果,可能跟权限有关,你可以把它写成bat脚本试试!最好找一台客户端,然后把bat或者reg文件放到启动里,看看是否执行成功!
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
&StatusBarOther&=dword:
可以这样在BAT里写:
reg add HKCU\SOFTWARE\Microsoft\Internet Explorer\Main /v StatusBarOther /t REG_DWORD /d 0x /f
/v:数值名称
/f:不提示,强行执行!
我的微博:http://t.sina.com.cn/lzy821218
初级工程师
谢谢版主,照你的格式我测试过了。
将BAT脚本放在客户端系统的启动中是成功的,但不知道放在域中组策略中就死活不生效,就算我用域管理员登陆客户端同样不生效。。。
客户端图片:
(74.19 KB)
(56.65 KB)
(92.59 KB)
本帖最后由 一叶微风 于
21:14 编辑
初级工程师
我把OU应用的组策略给了 DOMIAN USER 组 读取 权限,然后在客户端用域管理员将 DOMIAN USER 组加入到本地管理员组,居然可以了。
心想再新增用户试试,可是新增的用户却启用不了脚本。从我12楼的图片里可以看到我OU里把 计算机 跟 用户 放在里面。
当时第一反应是不是一台机器,一个账户只能应用一次脚本。
于是我又新增了一台客户机,并新建了一个OU,并单独给了组策略(内容同是发布脚本)。在这里遇到一个问题,因为OU跟组策略只对应一台计算机,不知道是不是应该给 DOMIAN USER授权。仍以失败告终。
不过我在测试的过程中发现不同的用户切换 注册表中的 HKCU 路径下的设置会被还原(不是全部),但 HKLM 路径下的设置基本保留。
优秀技术经理
引用:原帖由 一叶微风 于
14:52 发表
楼上的朋友,个人跟通用注册表不太明白。
我注册表的格式如下(去掉注册表头,两个例子):
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
&StatusBarOther&=dword:
[HKEY_CURRENT_USER\Software\M ... 这个里面(HKEY_CURRENT_USER)是和帐号有关,不同帐号登录,效果不同,你在一个帐号配置成功,另外一个帐号不会生效。
基本上,如果是两个管理员帐号登录,或许你的注册表会生效,否则,domain user是不会生效的(没有权限),计算机策略就应该更不可行了。
你下发这个策略的目的是什么,说来听听,或许还好办些
初级工程师
OK,我下发策略的主要目的是优化XP系统,诸如:
;1、不显示&突出显示新安装的程序&
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] 没有
&Start_NotifyNewApps&=dword:
我是自己定制精简XP母盘(精简了帮助支持、WIN漫游、搜索助手这类。),通过网上流传的稳定XP注册表优化为蓝本,对比组策略修改项自己弄了个基本不与组策略修改冲突的优化文件。
虽说加入域的客户端尽量使用原版,但现在XP的定制精简技术已经很成熟很稳定了,所以这块我想完全可以尝试。
本帖最后由 一叶微风 于
11:38 编辑
中级工程师
论坛首席砖家
放开机启动不就完事了吗
初级工程师
版主,这个注册表(系统优化)每个机器我只想运行一次,直接放开机启动里不可取。
经过两天的摸索定制的系统是成功的,在T13时导入的注册表能够在域中继承。

我要回帖

更多关于 如何删除注册表的域用户信息 的文章

 

随机推荐