def recurse_delete_key(path, base=win32con.HKEY_CLASSES_ROOT): """Recursively delete registry keys. This is needed since you can't blast a key when subkeys exist. """ try: h = win32api.RegOpenKey(base, path) except win32api.error as xxx_todo_changeme2: (code, fn, msg) = xxx_todo_changeme2.args if code != winerror.ERROR_FILE_NOT_FOUND: raise win32api.error(code, fn, msg) else: # parent key found and opened successfully. do some work, making sure # to always close the thing (error or no). try: # remove all of the subkeys while 1: try: subkeyname = win32api.RegEnumKey(h, 0) except win32api.error as xxx_todo_changeme: (code, fn, msg) = xxx_todo_changeme.args if code != winerror.ERROR_NO_MORE_ITEMS: raise win32api.error(code, fn, msg) break recurse_delete_key(path + '\\' + subkeyname, base) # remove the parent key _remove_key(path, base) finally: win32api.RegCloseKey(h)
def FindWindow( wndclassname, windowname ): hwnd = user32.FindWindow( windll.cstring( wndclassname ), windll.cstring( windowname ) ) if hwnd == 0: errcode = win32api.GetLastError() errmsg = win32api.FormatMessage( errcode ) raise win32api.error( errcode, 'FindWindow', errmsg ) return hwnd
def test_delete_key_recursive_failed_to_open_key(self): """ Test the delete_key_recursive function on failure to open the key """ try: self.assertTrue( win_reg.set_value(hive="HKLM", key=FAKE_KEY, vname="fake_name", vdata="fake_value")) expected = { "Deleted": [], "Failed": ["\\".join(["HKLM", FAKE_KEY]) + " Failed to connect to key"], } mock_true = MagicMock(return_value=True) mock_error = MagicMock(side_effect=[ 1, win32api.error(3, "RegOpenKeyEx", "Failed to connect to key"), ]) with patch("salt.utils.win_reg.key_exists", mock_true), patch( "salt.utils.win_reg.win32api.RegOpenKeyEx", mock_error): self.assertDictEqual( win_reg.delete_key_recursive(hive="HKLM", key=FAKE_KEY), expected) finally: win_reg.delete_key_recursive(hive="HKLM", key=FAKE_KEY)
def test_delete_key_recursive_failed_to_open_key(self): ''' Test the delete_key_recursive function on failure to open the key ''' try: self.assertTrue( win_reg.set_value(hive='HKLM', key=FAKE_KEY, vname='fake_name', vdata='fake_value')) expected = { 'Deleted': [], 'Failed': ['\\'.join(['HKLM', FAKE_KEY]) + ' Failed to connect to key'] } mock_true = MagicMock(return_value=True) mock_error = MagicMock(side_effect=[ 1, win32api.error(3, 'RegOpenKeyEx', 'Failed to connect to key') ]) with patch('salt.utils.win_reg.key_exists', mock_true), \ patch('salt.utils.win_reg.win32api.RegOpenKeyEx', mock_error): self.assertDictEqual( win_reg.delete_key_recursive(hive='HKLM', key=FAKE_KEY), expected) finally: win_reg.delete_key_recursive(hive='HKLM', key=FAKE_KEY)
def _remove_key(path, base=win32con.HKEY_CLASSES_ROOT): "Remove a string from the registry." try: win32api.RegDeleteKey(base, path) except win32api.error, (code, fn, msg): if code != winerror.ERROR_FILE_NOT_FOUND: raise win32api.error(code, fn, msg)
def test_delete_value_non_existing(self): """ Test the delete_value function on non existing value """ mock_error = MagicMock( side_effect=win32api.error(2, "RegOpenKeyEx", "Unknown error")) with patch("salt.utils.win_reg.win32api.RegOpenKeyEx", mock_error): self.assertIsNone( reg.delete_value(hive="HKLM", key=FAKE_KEY, vname="fake_name"))
def test_delete_value_non_existing(self): ''' Test the delete_value function on non existing value ''' mock_error = MagicMock( side_effect=win32api.error(2, 'RegOpenKeyEx', 'Unknown error')) with patch('salt.utils.win_reg.win32api.RegOpenKeyEx', mock_error): self.assertIsNone( reg.delete_value(hive='HKLM', key=FAKE_KEY, vname='fake_name'))
def recurse_delete_key(path, base=win32con.HKEY_CLASSES_ROOT): """Recursively delete registry keys. This is needed since you can't blast a key when subkeys exist. """ try: h = win32api.RegOpenKey(base, path) except win32api.error, (code, fn, msg): if code != winerror.ERROR_FILE_NOT_FOUND: raise win32api.error(code, fn, msg)
def test_key_exists_unknown_key_error(self): ''' Tests the key_exists function with an unknown key error ''' mock_error = MagicMock( side_effect=win32api.error(123, 'RegOpenKeyEx', 'Unknown error')) with patch('salt.utils.win_reg.win32api.RegOpenKeyEx', mock_error): self.assertRaises(win32api.error, win_reg.key_exists, hive='HKLM', key='SOFTWARE\\Microsoft')
def test_key_exists_unknown_key_error(self): """ Tests the key_exists function with an unknown key error """ mock_error = MagicMock( side_effect=win32api.error(123, "RegOpenKeyEx", "Unknown error")) with patch("salt.utils.win_reg.win32api.RegOpenKeyEx", mock_error): self.assertRaises(win32api.error, reg.key_exists, hive="HKLM", key="SOFTWARE\\Microsoft")
def test_delete_value_unknown_error(self): ''' Test the delete_value function when there is a problem opening the key ''' mock_error = MagicMock( side_effect=win32api.error(123, 'RegOpenKeyEx', 'Unknown error')) with patch('salt.utils.win_reg.win32api.RegOpenKeyEx', mock_error): self.assertRaises(win32api.error, win_reg.delete_value, hive='HKLM', key=FAKE_KEY, vname='fake_name')
def test_value_exists_key_not_exist(self): ''' Tests the value_exists function when the key does not exist ''' mock_error = MagicMock( side_effect=win32api.error(2, 'RegOpenKeyEx', 'Unknown error')) with patch('salt.utils.win_reg.win32api.RegOpenKeyEx', mock_error): self.assertFalse( win_reg.value_exists( hive='HKLM', key='SOFTWARE\\Microsoft\\Windows\\CurrentVersion', vname='CommonFilesDir'))
def test_value_exists_no_vname(self): ''' Tests the value_exists function when the vname does not exist ''' mock_error = MagicMock( side_effect=win32api.error(123, 'RegQueryValueEx', 'Empty Value')) with patch('salt.utils.win_reg.win32api.RegQueryValueEx', mock_error): self.assertFalse( win_reg.value_exists( hive='HKLM', key='SOFTWARE\\Microsoft\\Windows\\CurrentVersion', vname='NonExistingValuePair'))
def test_value_exists_empty_default_value(self): ''' Tests the value_exists function when querying the default value ''' mock_error = MagicMock( side_effect=win32api.error(2, 'RegQueryValueEx', 'Empty Value')) with patch('salt.utils.win_reg.win32api.RegQueryValueEx', mock_error): self.assertTrue( win_reg.value_exists( hive='HKLM', key='SOFTWARE\\Microsoft\\Windows\\CurrentVersion', vname=None))
def test_value_exists_empty_default_value(self): """ Tests the value_exists function when querying the default value """ mock_error = MagicMock( side_effect=win32api.error(2, "RegQueryValueEx", "Empty Value")) with patch("salt.utils.win_reg.win32api.RegQueryValueEx", mock_error): self.assertTrue( win_reg.value_exists( hive="HKLM", key="SOFTWARE\\Microsoft\\Windows\\CurrentVersion", vname=None, ))
def test_value_exists_key_not_exist(self): """ Tests the value_exists function when the key does not exist """ mock_error = MagicMock( side_effect=win32api.error(2, "RegOpenKeyEx", "Unknown error")) with patch("salt.utils.win_reg.win32api.RegOpenKeyEx", mock_error): self.assertFalse( win_reg.value_exists( hive="HKLM", key="SOFTWARE\\Microsoft\\Windows\\CurrentVersion", vname="CommonFilesDir", ))
def test_value_exists_no_vname(self): """ Tests the value_exists function when the vname does not exist """ mock_error = MagicMock( side_effect=win32api.error(123, "RegQueryValueEx", "Empty Value")) with patch("salt.utils.win_reg.win32api.RegQueryValueEx", mock_error): self.assertFalse( win_reg.value_exists( hive="HKLM", key="SOFTWARE\\Microsoft\\Windows\\CurrentVersion", vname="NonExistingValuePair", ))
def test_read_value_unknown_value_error(self): ''' Tests the read_value function with an unknown value error ''' mock_error = MagicMock(side_effect=win32api.error( 123, 'RegQueryValueEx', 'Unknown error')) with patch('salt.utils.win_reg.win32api.RegQueryValueEx', mock_error): self.assertRaises( win32api.error, win_reg.read_value, hive='HKLM', key='SOFTWARE\\Microsoft\\Windows\\CurrentVersion', vname='ProgramFilesPath')
def test_set_value_open_create_failure(self): """ Test the set_value function when there is a problem opening/creating the key """ mock_error = MagicMock( side_effect=win32api.error(123, "RegCreateKeyEx", "Unknown error")) with patch("salt.utils.win_reg.win32api.RegCreateKeyEx", mock_error): self.assertFalse( win_reg.set_value(hive="HKLM", key=FAKE_KEY, vname="fake_name", vdata="fake_data"))
def test_set_value_open_create_failure(self): ''' Test the set_value function when there is a problem opening/creating the key ''' mock_error = MagicMock( side_effect=win32api.error(123, 'RegCreateKeyEx', 'Unknown error')) with patch('salt.utils.win_reg.win32api.RegCreateKeyEx', mock_error): self.assertFalse( win_reg.set_value(hive='HKLM', key=FAKE_KEY, vname='fake_name', vdata='fake_data'))
def test_value_exists_unknown_key_error(self): ''' Tests the value_exists function with an unknown error when opening the key ''' mock_error = MagicMock( side_effect=win32api.error(123, 'RegOpenKeyEx', 'Unknown error')) with patch('salt.utils.win_reg.win32api.RegOpenKeyEx', mock_error): self.assertRaises( win32api.error, win_reg.value_exists, hive='HKLM', key='SOFTWARE\\Microsoft\\Windows\\CurrentVersion', vname='CommonFilesDir')
def test_delete_value_unknown_error(self): """ Test the delete_value function when there is a problem opening the key """ mock_error = MagicMock( side_effect=win32api.error(123, "RegOpenKeyEx", "Unknown error")) with patch("salt.utils.win_reg.win32api.RegOpenKeyEx", mock_error): self.assertRaises( win32api.error, win_reg.delete_value, hive="HKLM", key=FAKE_KEY, vname="fake_name", )
def test_read_value_unknown_value_error(self): """ Tests the read_value function with an unknown value error """ mock_error = MagicMock(side_effect=win32api.error( 123, "RegQueryValueEx", "Unknown error")) with patch("salt.utils.win_reg.win32api.RegQueryValueEx", mock_error): self.assertRaises( win32api.error, win_reg.read_value, hive="HKLM", key="SOFTWARE\\Microsoft\\Windows\\CurrentVersion", vname="ProgramFilesPath", )
def test_value_exists_unknown_key_error(self): """ Tests the value_exists function with an unknown error when opening the key """ mock_error = MagicMock( side_effect=win32api.error(123, "RegOpenKeyEx", "Unknown error")) with patch("salt.utils.win_reg.win32api.RegOpenKeyEx", mock_error): self.assertRaises( win32api.error, win_reg.value_exists, hive="HKLM", key="SOFTWARE\\Microsoft\\Windows\\CurrentVersion", vname="CommonFilesDir", )
try: h = win32api.RegOpenKey(base, path) except win32api.error, (code, fn, msg): if code != winerror.ERROR_FILE_NOT_FOUND: raise win32api.error(code, fn, msg) else: # parent key found and opened successfully. do some work, making sure # to always close the thing (error or no). try: # remove all of the subkeys while 1: try: subkeyname = win32api.RegEnumKey(h, 0) except win32api.error, (code, fn, msg): if code != winerror.ERROR_NO_MORE_ITEMS: raise win32api.error(code, fn, msg) break recurse_delete_key(path + '\\' + subkeyname, base) # remove the parent key _remove_key(path, base) finally: win32api.RegCloseKey(h) def _cat_registrar(): return pythoncom.CoCreateInstance( pythoncom.CLSID_StdComponentCategoriesMgr, None, pythoncom.CLSCTX_INPROC_SERVER, pythoncom.IID_ICatRegister )