Как программно изменить параметр локальной групповой политики

Я ищу способ программно изменить значение параметра групповой политики без перезагрузки компьютера или установки на нем каких-либо дополнительных компонентов.

Ищу решение для Windows 2003, 2008, машины являются частью домена

Значение находится в разделе «Административные шаблоны \ Сеть \ Планировщик пакетов QoS», «Ограничить ожидающие пакеты».

Пробовал следующее:

  • Изменить реестр напрямую - это не сработает, поскольку значение фактически хранится в файле registry.pol и распространяется оттуда в реестр.

  • Используемый WMI - объекты WMI, представляющие реестр, доступны только для чтения, значение не изменяется

Один из вариантов, который кажется работающим, - это изменить файл registry.pol в папке C: \ Windows \ System32 \ GroupPolicy \ Machine, однако это кажется проблематичным, мне придется проанализировать этот файл вручную.


person Aleks    schedule 29.06.2010    source источник


Ответы (3)


Я написал библиотеку .NET для решения этой проблемы. Вы можете прочитать об этом здесь. Это открытый исходный код, и вы можете получить код и двоичные файлы здесь. Как только вы узнаете релевантные значения реестра, вы можете внести в них необходимые изменения, используя эту библиотеку, и она сохранит их в файле registry.pol.

person Martin Eden    schedule 02.04.2013
comment
Вы знаете, как я могу использовать эту библиотеку на чистом C? потому что мой проект скомпилирован с ./configure && make && make install под minGW. Спасибо - person Maxim Shoustin; 02.12.2013
comment
Я основал свою библиотеку .NET на этом решении C здесь: pete. akeo.ie/2011/03/porgramatic-setting-and-applying.html Источник моего решения .NET бесплатно доступен по ссылке выше, если это поможет. - person Martin Eden; 03.12.2013
comment
@MartinEden ссылка на битбакет не работает, у вас есть еще где-нибудь? - person JMIII; 03.12.2020
comment
Привет, боюсь, что нет. Похоже, я потерял тот код, у которого нет резервных копий, поскольку BitBucket прекратил поддержку Mercurial. :( Извините, это было небрежно с моей стороны - я работал над ним только на своем рабочем компьютере, и я оставил эту работу, поэтому у меня нет копии на моем домашнем компьютере. Это была довольно небольшая библиотека - моя Единственное предложение - прочитать сообщение в блоге и попытаться воссоздать аналогичное решение. Еще раз извините. - person Martin Eden; 04.12.2020

Используйте объект групповой политики (CLSID_GroupPolicyObject), образец здесь.

person Axel Rietschin    schedule 08.05.2011
comment
Ссылка не существует. Плохая практика - предоставлять его без фактической информации. - person ; 07.04.2019

используйте эту ссылку :)

http://blogs.technet.com/b/fdcc/archive/2010/01/15/updated-lgpo-utility-sources.aspx.

вы можете использовать этот проект для изменения GPO в локальной системе. Не меняйте Прямой Реестр !!!!

HRESULT hr;
IGroupPolicyObject* pLGPO;
HKEY machine_key, dsrkey;

const IID my_IID_IGroupPolicyObject =
{ 0xea502723, 0xa23d, 0x11d1, { 0xa7, 0xd3, 0x0, 0x0, 0xf8, 0x75, 0x71, 0xe3 } };
const IID my_CLSID_GroupPolicyObject =
{ 0xea502722, 0xa23d, 0x11d1, { 0xa7, 0xd3, 0x0, 0x0, 0xf8, 0x75, 0x71, 0xe3 } };
GUID ext_guid = REGISTRY_EXTENSION_GUID;
// This next one can be any GUID you want
GUID snap_guid = { 0x3d271cfc, 0x2bc6, 0x4ac2, { 0xb6, 0x33, 0x3b, 0xdf, 0xf5, 0xbd, 0xab, 0x2a } };

// Create an instance of the IGroupPolicyObject class
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
CoCreateInstance(my_CLSID_GroupPolicyObject, NULL, CLSCTX_INPROC_SERVER,
    my_IID_IGroupPolicyObject, (LPVOID*)&pLGPO);

// We need the machine LGPO (if C++, no need to go through the lpVtbl table)
hr = pLGPO->OpenLocalMachineGPO( GPO_OPEN_LOAD_REGISTRY);
hr = pLGPO->GetRegistryKey( GPO_SECTION_MACHINE, &machine_key);
//hr = pLGPO->GetRegistryKey(GPO_SECTION_USER, &machine_key);

// The disable System Restore is a DWORD value of Policies\Microsoft\Windows\DeviceInstall\Settings
LSTATUS sdf = RegCreateKeyEx(machine_key, L"Software\\Policies\\Microsoft\\Windows\\DeviceInstall\\Settings",
    0, NULL, 0, KEY_SET_VALUE | KEY_QUERY_VALUE, NULL, &dsrkey, NULL);

// Create the value
LSTATUS ds = RegSetKeyValue(dsrkey, NULL, KeyValue, REG_DWORD, &KeyData, sizeof(KeyData));
RegCloseKey(dsrkey);

// Apply policy and free resources
//pLGPO->Save( TRUE, TRUE, &ext_guid, &snap_guid);
GUID RegistryId = REGISTRY_EXTENSION_GUID;
GUID ThisAdminToolGuid =
    /*{ CLSID_PolicySnapinUser/* */
{
    0x0F6B957E,
    0x509E,
    0x11D1,
    { 0xA7, 0xCC, 0x00, 0x00, 0xF8, 0x75, 0x71, 0xE3 }
};

LSTATUS rStatus = RegCloseKey(machine_key);
//
// Write the GPO back to the directory
//
hr = pLGPO->Save(
    FALSE,
    TRUE,
    &RegistryId,
    &ThisAdminToolGuid);

RegCloseKey(machine_key);
pLGPO->Release();
person Fakhredin Gholamizadeh    schedule 14.06.2014