现在发现网上关于这方面的代码并不多。我也苦苦搜索了半天,才从大神那里得到一点点,然后根据自己的理解进行修改,运行成功。废话不多说,直接说吧。我们知道,本地组策略本质上是在修改注册表。有人会说dos命令修改本地策略,那我就直接修改注册表。为什么我花了这么多精力去修改本地组策略,但是一个问题是本地组策略表明每次刷新设置都会更改设置。也就是说,即使你修改了注册表,它仍然是缓存的,不会立即生效。
这是我计算机中组策略的注册表项dos命令修改本地策略,但是,您知道哪一项有效,哪一项已过时吗?
所以我们需要使用 IGroupPolicyObject
#include"stdafx.h"
#define INITGUID
#include
#include
#include
#include
using namespace std;
//本地组策略是否禁用任务管理器
LRESULT DisableTaskMgr(int mark)
{
::CoInitialize(NULL);
LRESULT status;
LRESULT hr=S_OK;
IGroupPolicyObject*pGPO=NULL;
hr=CoCreateInstance(CLSID_GroupPolicyObject,NULL,CLSCTX_INPROC_SERVER,IID_IGroupPolicyObject,(LPVOID*)&pGPO);
if(hr==S_OK)
{
cout<<"GPO创建成功\n";
}
else
{
cout<<"GPO创建失败\n";
return E_FAIL;
}
DWORD dwSection=GPO_SECTION_USER;
HKEY hGPOKey=0;
hr=pGPO->OpenLocalMachineGPO(GPO_OPEN_LOAD_REGISTRY);
if(SUCCEEDED(hr))
{
cout<<"打开本地机器成功\n";
}
else
{
cout<<"打开本地失败\n";
return E_FAIL;
}
hr=pGPO->GetRegistryKey(dwSection,&hGPOKey);
if(SUCCEEDED(hr))
{
cout<<"加载注册表成功\n";
}
else
{
cout<<"加载注册表失败\n";
return E_FAIL;
}
//禁用任务管理器
HKEY hKey=NULL;
if(mark==1)
{
status=RegOpenKeyEx(hGPOKey,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System",0,
KEY_WRITE,&hKey);
if(status!=ERROR_SUCCESS)
{
status=RegCreateKeyEx(hGPOKey,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System",0,
NULL,REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&hKey,NULL);
if(status==S_OK)
{
cout<<"创建键值成功\n";
}
else
{
cout<<"创建键值失败\n";
return E_FAIL;
}
}
DWORD lpData=1;
status=RegSetKeyValue(hKey,NULL,"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();
}
int main()
{
DisableTaskMgr(1);
}
此功能是禁用任务管理器
© 版权声明
THE END
喜欢就支持一下吧
请登录后发表评论
注册
社交帐号登录