public void go() { fixpriv_privpol_t pi_pol; fixpriv_privpol_t backup_pi_pol; fixpriv_result_t s = new fixpriv_result_t(); FixprivPolicies bpol = new FixprivPolicies(); fixpriv_backupstatus_t backupStatus; if (this.exec_check_only == false) { fixpriv_special_modify(); } foreach (FixprivPolicy pol in this.fpol.rules) { FixprivPolicy backup_pol = new FixprivPolicy(); pi_pol = new fixpriv_privpol_t(); backup_pi_pol = new fixpriv_privpol_t(); if (pol.key.keyRoot.Equals("HKCU")) { pi_pol.section_key = ws_key_t.WS_KEY_HKCU; } else if (pol.key.keyRoot.Equals("HKLM")) { pi_pol.section_key = ws_key_t.WS_KEY_HKLM; } else if (pol.key.keyRoot.Equals("GPOU")) { pi_pol.section_key = ws_key_t.WS_KEY_GPOU; } else if (pol.key.keyRoot.Equals("GPOM")) { pi_pol.section_key = ws_key_t.WS_KEY_GPOM; } backup_pol.key.keyRoot = pol.key.keyRoot; backup_pi_pol.section_key = pi_pol.section_key; pi_pol.pol_key = pol.key.keyName; pi_pol.pol_value_name = pol.key.keyValue.valueName; backup_pi_pol.pol_key = pol.key.keyName; backup_pi_pol.pol_value_name = pol.key.keyValue.valueName; backup_pol.key.keyName = pol.key.keyName; if (pol.key.keyValue.valueType.Equals("REG_DWORD")) { pi_pol.pol_datatype = value_data_type_t.POL_DWORD; pi_pol.pol_value_data = pol.key.keyValue.valueData; pi_pol.pol_mode = m0_polregmode_t.POL_ENABLED; } else if (pol.key.keyValue.valueType.Equals("REG_SZ")) { pi_pol.pol_datatype = value_data_type_t.POL_WSTRING; pi_pol.pol_mode = m0_polregmode_t.POL_ENABLED; pi_pol.pol_value_data = pol.key.keyValue.valueData; } else if (pol.key.keyValue.valueType.Equals("REG_NONE")) { pi_pol.pol_datatype = value_data_type_t.POL_DWORD; pi_pol.pol_mode = m0_polregmode_t.POL_NOTCONFIGURED; } else if (pol.key.keyValue.valueType.Equals("REG_BINARY")) { pi_pol.pol_datatype = value_data_type_t.POL_DWORD; pi_pol.pol_mode = m0_polregmode_t.POL_ENABLED; } else if (pol.key.keyValue.valueType.Equals("REG_DELETE")) { pi_pol.pol_datatype = value_data_type_t.POL_WSTRING; pi_pol.pol_mode = m0_polregmode_t.POL_DELETE; } else if (pol.key.keyValue.valueType.Equals("REG_DISABLE")) { pi_pol.pol_datatype = value_data_type_t.POL_WSTRING; pi_pol.pol_mode = m0_polregmode_t.POL_DISABLED; } backup_pi_pol.pol_datatype = pi_pol.pol_datatype; backup_pi_pol.pol_mode = pi_pol.pol_mode; backup_pol.key.keyValue.valueType = pol.key.keyValue.valueType; backup_pol.id = pol.id; backup_pol.key.keyValue.valueDescription = pol.key.keyValue.valueDescription; if (this.exec_check_only == true) { check_result = fixpriv_check_regkey(pi_pol); s = new fixpriv_result_t(); s.state = check_result; s.policy = pi_pol; returnValueQueue.Enqueue(s); signalQueue.Set(); Thread.Sleep(50); } else { try { // backup functions backupStatus = (fixpriv_backupstatus_t)fixpriv_read_regkey(ref backup_pi_pol); backup_pol.key.keyValue.valueName = backup_pi_pol.pol_value_name; backup_pol.key.keyValue.valueData = backup_pi_pol.pol_value_data; if (backupStatus == fixpriv_backupstatus_t.READREG_SUCCESS) { backup_pol.key.keyValue.valueMode = "POL_ENABLED"; backup_pol.key.keyValue.valueData = backup_pi_pol.pol_value_data; } else if (backupStatus == fixpriv_backupstatus_t.READREG_NOTFOUND) { backup_pol.key.keyValue.valueMode = "POL_DELETE"; backup_pol.key.keyValue.valueType = "REG_DELETE"; backup_pol.key.keyValue.valueData = "0"; } else // fail { backup_pol.key.keyValue.valueType = "REG_DELETE"; backup_pol.key.keyValue.valueMode = "POL_NOTCONFIGURED"; backup_pol.key.keyValue.valueData = "0"; } bpol.rules.Add(backup_pol); // backup functions fixpriv_modify_policy(pi_pol); if (pi_pol.section_key == ws_key_t.WS_KEY_GPOM) { Thread.Sleep(300); // wait for changes to sync. 500ms works } check_result = fixpriv_check_regkey(pi_pol); s = new fixpriv_result_t(); s.state = check_result; s.policy = pi_pol; returnValueQueue.Enqueue(s); signalQueue.Set(); Thread.Sleep(5); } catch (Exception e) { Console.WriteLine("[e] error in FixprivWorker.go: " + e.Message); // make sure, backups are written to disk if (false == this.exec_check_only) { this.backup.store(bpol); } } } } // foreach if (false == this.exec_check_only) { this.backup.store(bpol); } shouldRun = false; } // go()
public void go() { fixpriv_privpol_t pi_pol; fixpriv_result_t s = new fixpriv_result_t(); if (this.exec_check_only == false) { fixpriv_special_modify(); } foreach (FixprivPolicy pol in this.fpol.rules) { pi_pol = new fixpriv_privpol_t(); if (pol.key.keyRoot.Equals("HKCU")) { pi_pol.section_key = ws_key_t.WS_KEY_HKCU; } else if (pol.key.keyRoot.Equals("HKLM")) { pi_pol.section_key = ws_key_t.WS_KEY_HKLM; } else if (pol.key.keyRoot.Equals("GPOU")) { pi_pol.section_key = ws_key_t.WS_KEY_GPOU; } else if (pol.key.keyRoot.Equals("GPOM")) { pi_pol.section_key = ws_key_t.WS_KEY_GPOM; } pi_pol.pol_key = pol.key.keyName; pi_pol.pol_value_name = pol.key.keyValue.valueName; if (pol.key.keyValue.valueType.Equals("REG_DWORD")) { pi_pol.pol_datatype = value_data_type_t.POL_DWORD; pi_pol.pol_value_data = pol.key.keyValue.valueData; pi_pol.pol_mode = m0_polregmode_t.POL_ENABLED; } else if (pol.key.keyValue.valueType.Equals("REG_SZ")) { pi_pol.pol_datatype = value_data_type_t.POL_WSTRING; pi_pol.pol_mode = m0_polregmode_t.POL_ENABLED; pi_pol.pol_value_data = pol.key.keyValue.valueData; } else if (pol.key.keyValue.valueType.Equals("REG_NONE")) { pi_pol.pol_datatype = value_data_type_t.POL_DWORD; pi_pol.pol_mode = m0_polregmode_t.POL_NOTCONFIGURED; } else if (pol.key.keyValue.valueType.Equals("REG_BINARY")) { pi_pol.pol_datatype = value_data_type_t.POL_DWORD; pi_pol.pol_mode = m0_polregmode_t.POL_ENABLED; } else if (pol.key.keyValue.valueType.Equals("REG_DELETE")) { pi_pol.pol_datatype = value_data_type_t.POL_WSTRING; pi_pol.pol_mode = m0_polregmode_t.POL_DELETE; } else if (pol.key.keyValue.valueType.Equals("REG_DISABLE")) { pi_pol.pol_datatype = value_data_type_t.POL_WSTRING; pi_pol.pol_mode = m0_polregmode_t.POL_DISABLED; } if (this.exec_check_only == true) { check_result = fixpriv_check_regkey(pi_pol); s = new fixpriv_result_t(); s.state = check_result; s.policy = pi_pol; returnValueQueue.Enqueue(s); signalQueue.Set(); Thread.Sleep(50); } else { fixpriv_modify_policy(pi_pol); if (pi_pol.section_key == ws_key_t.WS_KEY_GPOM) { Thread.Sleep(300); // wait for changes to sync. 500ms works } check_result = fixpriv_check_regkey(pi_pol); s = new fixpriv_result_t(); s.state = check_result; s.policy = pi_pol; returnValueQueue.Enqueue(s); signalQueue.Set(); Thread.Sleep(5); } } // foreach shouldRun = false; } // go()