问题:RegSetValueEx函数执行成功但是注册表没有显示对应的键值
补充:将RegOpenKeyEx与RegCreateKeyEx函数中hGPOKey换成HKEY_LOCAL_MACHINE可以修改注册表但是并未修改并刷新组策略
#define INITGUID
#include<iostream>
#include<Windows.h>
#include<GPEdit.h>
#include<Guiddef.h>
using namespace std;
bool test()
{
::CoInitialize(nullptr);
LRESULT status;
LRESULT hr = S_OK;
IGroupPolicyObject* pGPO = nullptr;
hr = CoCreateInstance(CLSID_GroupPolicyObject, nullptr, CLSCTX_INPROC_SERVER, IID_IGroupPolicyObject, reinterpret_cast<LPVOID*>(&pGPO));
if (hr != S_OK) {
cout << "GPO create failure";
return false;
}
DWORD dwSection = GPO_SECTION_MACHINE;
HKEY hGPOKey = nullptr;
hr = pGPO->OpenLocalMachineGPO(GPO_OPEN_LOAD_REGISTRY);
if (FAILED(hr)) {
cout << "Failed to open the local GPO";
return false;
}
// hr = pGPO->SetOptions(GPO_OPTION_DISABLE_MACHINE | GPO_OPTION_DISABLE_USER, GPO_OPTION_DISABLE_USER | GPO_OPTION_DISABLE_MACHINE);
hr = pGPO->GetRegistryKey(dwSection, &hGPOKey);
if (FAILED(hr)) {
cout << "Failed to load the registry.";
return false;
}
// Software\Policies\Microsoft\Windows\RemovableStorageDevices\{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
HKEY hKey = nullptr;
status = RegOpenKeyEx(hGPOKey, "Software\\Policies\\Microsoft\\Windows\\RemovableStorageDevices\\{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}", 0, KEY_WOW64_32KEY | KEY_ALL_ACCESS, &hKey);
if (status != ERROR_SUCCESS) {
status = RegCreateKeyEx(hGPOKey, "Software\\Policies\\Microsoft\\Windows\\RemovableStorageDevices\\{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}", 0, nullptr, REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_WOW64_64KEY | KEY_ALL_ACCESS, nullptr, &hKey, nullptr);
if (status != S_OK) {
cout << "Failed to create a key value.";
// TODO
return false;
}
}
DWORD lpData = 1;
status = RegSetValueEx(hKey, "Deny_Read", 0, REG_DWORD, reinterpret_cast<LPBYTE>(&lpData), 4);
if (FAILED(status)) {
cout << "Failed to set a value.";
// TODO
return false;
}
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(TRUE, TRUE, &Registerid, &ThisGuid);
pGPO->Release();
::CoUninitialize();
return true;
}
int main()
{
test();
}