了解注册表,组策略设置常用功能
注册表的组织方式主要分为根键、子键和键值项三部分。
(1)根键,可以把它们理解成磁盘的五个分区。
1.HKEY_CLASSES_ROOT;
2.HKEY_CURRENT_USER;
3.HKEY_LOCAL_MACHINE;
4.HKEY_USERS;
5.HKEY_CURRENT_CONFIG;
(2)子键,可以有多个子键和键值项。
(3)键值项由三部分组成,分别为:名称、类型、数据。
类型又分为多种主要包括如下:
注册表数据项的数据类型有8种,但最常用的主要是前3种。
打开注册表编辑器(找到要读取的位置)
1.了解注册表(注册表读取)
#include <iostream>
#include <assert.h>
#include "windows.h"
#include "tchar.h"
#include "conio.h"
#include "stdio.h"
using namespace std;
void wcharTochar(const wchar_t* wchar, char* chr, int length)
{
WideCharToMultiByte(CP_ACP, 0, wchar, -1,
chr, length, NULL, NULL);
}
bool OpenRegKey(HKEY& hRetKey)
{
LPCWSTR sw = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\ComputerZ_CN.exe");
wprintf(L"SW is %s\n", sw);
if (ERROR_SUCCESS == RegOpenKey(HKEY_LOCAL_MACHINE, sw, &hRetKey))
{
return true;
}
printf("OpenRegKey return is false!\n");
return false;
}
bool QueryRegKey(LPCWSTR strSubKey, LPCWSTR strValueName, char* strValue, int length)//这里是传3个参数
{
DWORD dwType = REG_SZ;//定义数据类型
DWORD dwLen = MAX_PATH;
wchar_t data[MAX_PATH];
HKEY hKey;
HKEY hSubKey;
if (OpenRegKey(hKey))
{
if (ERROR_SUCCESS == RegOpenKey(HKEY_LOCAL_MACHINE, strSubKey, &hSubKey))
{
TCHAR buf[256] = { 0 };
if (ERROR_SUCCESS == RegQueryValueEx(hSubKey, strValueName, 0, &dwType, (LPBYTE)data, &dwLen))
{
wcharTochar(data, strValue, length);
wprintf(L"data = %s,len= %d\n", data, strlen((const char*)data));
RegCloseKey(hKey); //关闭注册表
return true;
}
}
RegCloseKey(hKey); //关闭注册表
}
return false;
}
int main()
{
HKEY hKey = NULL;
string result;
LPCWSTR strSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\ComputerZ_CN.exe");
LPCWSTR strValueName = _T("Path");
char strValue[256];
int length = 256;
bool status = QueryRegKey(strSubKey, strValueName, strValue, length);
printf("status is %d\n", status);
printf("result is %s\n", strValue);
return 0;
}
"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\ComputerZ_CN.exe"这一部分的ComputerZ_CN.exe,可以改成当前目录下任意的环境
例如:
代码执行的结果:
补充:任务注册表打开方式(其中一种)
第一步:点击搜索按钮
第二步:输入注册编辑器
2.组策略常用功能(禁用任务管理器)文章来源:https://www.toymoban.com/news/detail-439061.html
#include<iostream>
#include<Windows.h>
#include<GPEdit.h>
#include<Guiddef.h>
using namespace std;
#define INITGUID
//本地组策略是否禁用任务管理器
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);
}
成功以后:
文章来源地址https://www.toymoban.com/news/detail-439061.html
到了这里,关于注册表操作01的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!