|
本帖最后由 weskill 于 2016-6-23 19:32 编辑
多抽出一分钟时间来学习,让你的生命更加精彩。
感谢VC驿站,在编写本实例时,参考了VC驿站的优秀帖子,尤其是
https://www.cctry.com/thread-50795-1-1.html
中 ccstd会员的指点:
“另外,所谓的组策略全部都是修改注册表,唯一要做的事情就是找个注册表监视工具来监视组策略编辑器是如何修改注册表项的。然后用VC操作注册表就行了……”
让我受益匪浅,因此写了一个通过操作注册表,达到修改组策略的目的的小软件,实现后组策略界面如下:分别是屏保和任务管理器的相应组策略被禁用。
项目代码相对简单,仅供参考。
头文件加上
#define INITGUID
#include <Guiddef.h>
#include <Gpedit.h>
按钮1:禁用任务管理器
void CRWGPODlg::OnBnClickedButton1()
{
::CoInitialize(NULL);
LRESULT status;
LRESULT hr=S_OK;
IGroupPolicyObject*pGPO=NULL; //GPO组件接口 指针
hr=CoCreateInstance(CLSID_GroupPolicyObject,NULL,CLSCTX_INPROC_SERVER,IID_IGroupPolicyObject,(LPVOID*)&pGPO);
//创建 com组件
if(hr==S_OK)
{
MessageBox(_T("GPO创建成功\n"));
}
else
{
MessageBox(_T("GPO创建失败\n"));
return;
}
DWORD dwSection=GPO_SECTION_USER; //注册表的三个根域
HKEY hGPOKey=0;
hr=pGPO->OpenLocalMachineGPO(GPO_OPEN_LOAD_REGISTRY); //打开本地GPO
if(SUCCEEDED(hr))
{
MessageBox(_T("打开本地机器成功\n"));
}
else
{
MessageBox(_T("打开本地机器失败\n"));
return;
}
hr=pGPO->GetRegistryKey(dwSection,&hGPOKey);
//method retrieves a handle to the root of the registry key for the specified GPO section GPO用户配置对应的注册表根健
if(SUCCEEDED(hr))
{
MessageBox(_T("加载注册表成功\n"));
}
else
{
MessageBox(_T("加载注册表失败\n"));
return;
}
//禁用任务管理器
HKEY hKey=NULL;
status=RegOpenKeyEx(hGPOKey,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"),0, KEY_WRITE,&hKey); //打开键值 得到的将要打开键的句柄存于hkey
if(status!=ERROR_SUCCESS) // 0表示成功打开
{
status=RegCreateKeyEx(hGPOKey,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"),0,NULL,REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&hKey,NULL);
if(status==S_OK)
{
MessageBox(_T("创建键值成功\n"));
}
else
{
MessageBox(_T("创建键值失败\n"));
return;
}
}
DWORD lpData=1;
status=RegSetKeyValue(hKey,NULL,_T("DisableTaskMgr"),REG_DWORD,(LPCVOID)&lpData,4);
status = RegCloseKey(hKey);
GUID Registerid=REGISTRY_EXTENSION_GUID;
GUID ThisGuid={
0x0F6B957E,
0x509E,
0x11D1,
{0xA7, 0xCC, 0x00, 0x00, 0xF8, 0x75, 0x71, 0xE3}
};
RegCloseKey(hGPOKey);
status=pGPO->Save(FALSE,TRUE,&Registerid,&ThisGuid);
pGPO->Release();
::CoUninitialize();
// TODO: 在此添加控件通知处理程序代码
}
按钮1:禁用屏保
void CRWGPODlg::OnBnClickedButton2()
{
::CoInitialize(NULL);
LRESULT status;
LRESULT hr=S_OK;
IGroupPolicyObject*pGPO=NULL; //GPO组件接口 指针
hr=CoCreateInstance(CLSID_GroupPolicyObject,NULL,CLSCTX_INPROC_SERVER,IID_IGroupPolicyObject,(LPVOID*)&pGPO);
//创建 com组件
if(hr==S_OK)
{
MessageBox(_T("GPO创建成功\n"));
}
else
{
MessageBox(_T("GPO创建失败\n"));
return;
}
DWORD dwSection=GPO_SECTION_USER; //注册表的三个根域
HKEY hGPOKey=0;
hr=pGPO->OpenLocalMachineGPO(GPO_OPEN_LOAD_REGISTRY); //打开本地GPO
if(SUCCEEDED(hr))
{
MessageBox(_T("打开本地机器成功\n"));
}
else
{
MessageBox(_T("打开本地机器失败\n"));
return;
}
hr=pGPO->GetRegistryKey(dwSection,&hGPOKey);
//method retrieves a handle to the root of the registry key for the specified GPO section GPO用户配置对应的注册表根健
if(SUCCEEDED(hr))
{
MessageBox(_T("加载注册表成功\n"));
}
else
{
MessageBox(_T("加载注册表失败\n"));
return;
}
//禁用屏保
HKEY hKey=NULL;
status=RegOpenKeyEx(hGPOKey,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"),0, KEY_WRITE,&hKey); //打开键值 得到的将要打开键的句柄存于hkey
//ERROR_SUCCESS
if(status!=ERROR_SUCCESS) // 0表示成功打开
{
status=RegCreateKeyEx(hGPOKey,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"),0,NULL,REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&hKey,NULL);
if(status==S_OK)
{
MessageBox(_T("创建键值成功\n"));
}
else
{
MessageBox(_T("创建键值失败\n"));
return;
}
}
DWORD lpData=1;
status=RegSetKeyValue(hKey,NULL,_T("NoDispScrSavPage"),REG_DWORD,(LPCVOID)&lpData,4); //注意键值
status = RegCloseKey(hKey);
GUID Registerid=REGISTRY_EXTENSION_GUID;
GUID ThisGuid={
0x0F6B957E,
0x509E,
0x11D1,
{0xA7, 0xCC, 0x00, 0x00, 0xF8, 0x75, 0x71, 0xE3}
};
RegCloseKey(hGPOKey);
status=pGPO->Save(FALSE,TRUE,&Registerid,&ThisGuid);
pGPO->Release();
::CoUninitialize();
// TODO: 在此添加控件通知处理程序代码
}
|
评分
-
查看全部评分
上一篇: PC微信客户端源代码分享下一篇: Visual C++ 6.0网络及Internet开发指南(学习笔记)
|