通过IGroupPolicyObject实现修改某个组策略

来源:互联网 发布:煲机软件 编辑:程序博客网 时间:2024/05/18 03:24
 修改自动播放功能
         HRESULT hr=S_OK; ::CoInitialize(NULL); IGroupPolicyObject* p = NULL; /*hr = CoCreateInstance(CLSID_GroupPolicyObject, NULL, CLSCTX_INPROC_SERVER, IID_IGroupPolicyObject, (LPVOID*)&p);*/ hr = CoCreateInstance(CLSID_GroupPolicyObject, NULL, CLSCTX_ALL,IID_IGroupPolicyObject,(LPVOID*)&p); log_error("CoCreateInstance = %d\n",GetLastError()); log_error("CoCreateInstance() failed 0x%08x\n", hr); if (SUCCEEDED(hr)) { DWORD dwSection = GPO_SECTION_USER; HKEY hGPOSectionKey = NULL; DWORD dwData; HKEY hSettingKey; LSTATUS rStatus; DWORD lData = 255; hr = 0; //hr = p->OpenDSGPO( bGPOPath, GPO_OPEN_LOAD_REGISTRY); hr = p->OpenLocalMachineGPO(GPO_OPEN_LOAD_REGISTRY); hr = p->GetRegistryKey(dwSection, &hGPOSectionKey); long returnnum = RegOpenKeyEx( hGPOSectionKey, L"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", 0, KEY_WRITE, &hSettingKey) ; log_printf(" RegOpenKeyEx return num = %d\n",returnnum); if(returnnum != ERROR_SUCCESS ) { rStatus = RegCreateKeyEx( hGPOSectionKey, L"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hSettingKey, NULL ); } rStatus = RegSetValueEx(hSettingKey, L"NoDriveTypeAutoRun", NULL, REG_DWORD, (BYTE *)(&lData), sizeof(DWORD)); rStatus = RegCloseKey(hSettingKey); GUID RegistryId = REGISTRY_EXTENSION_GUID; GUID ThisAdminToolGuid = { 0x0F6B957E, 0x509E, 0x11D1, {0xA7, 0xCC, 0x00, 0x00, 0xF8, 0x75, 0x71, 0xE3} }; rStatus = RegCloseKey(hGPOSectionKey); hr = p->Save( FALSE, TRUE, &RegistryId, &ThisAdminToolGuid ); CoUninitialize(); hr = p->Release(); } hr=S_OK; ::CoInitialize(NULL); p = NULL; /*hr = CoCreateInstance(CLSID_GroupPolicyObject, NULL, CLSCTX_INPROC_SERVER, IID_IGroupPolicyObject, (LPVOID*)&p);*/ hr = CoCreateInstance(CLSID_GroupPolicyObject, NULL, CLSCTX_ALL,IID_IGroupPolicyObject,(LPVOID*)&p); log_error("CoCreateInstance = %d\n",GetLastError()); log_error("CoCreateInstance() failed 0x%08x\n", hr); if (SUCCEEDED(hr)) { DWORD dwSection = GPO_SECTION_MACHINE; HKEY hGPOSectionKey = NULL; DWORD dwData; HKEY hSettingKey; LSTATUS rStatus; DWORD lData = 255; hr = 0; //hr = p->OpenDSGPO( bGPOPath, GPO_OPEN_LOAD_REGISTRY); hr = p->OpenLocalMachineGPO(GPO_OPEN_LOAD_REGISTRY); log_printf("p->OpenLocalMachineGPO(GPO_OPEN_LOAD_REGISTRY) = %d",hr); hr = p->GetRegistryKey(dwSection, &hGPOSectionKey); log_printf("p->GetRegistryKey(dwSection, &hGPOSectionKey) = %d",hr); long returnnum = RegOpenKeyEx( hGPOSectionKey, L"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", 0, KEY_WRITE, &hSettingKey) ; log_printf(" RegOpenKeyEx return num = %d\n",returnnum); if(returnnum != ERROR_SUCCESS ) { rStatus = RegCreateKeyEx( hGPOSectionKey, L"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hSettingKey, NULL ); log_printf("RegCreateKeyEx return num = %d\n",rStatus); } rStatus = RegSetValueEx(hSettingKey, L"NoDriveTypeAutoRun", NULL, REG_DWORD, (BYTE *)(&lData), sizeof(DWORD)); log_printf("RegSetValueEx NoDriveTypeAutoRun return num = %d\n",rStatus); rStatus = RegCloseKey(hSettingKey); GUID RegistryId = REGISTRY_EXTENSION_GUID; GUID ThisAdminToolGuid = { 0x0F6B957E, 0x509E, 0x11D1, {0xA7, 0xCC, 0x00, 0x00, 0xF8, 0x75, 0x71, 0xE3} }; rStatus = RegCloseKey(hGPOSectionKey); hr = p->Save( TRUE, TRUE, &RegistryId, &ThisAdminToolGuid );  log_printf("Save return num = %d\n",hr); CoUninitialize(); hr = p->Release(); }