| 8 | } |
| 9 | |
| 10 | bool CopyValueCommand::Execute() { |
| 11 | auto key = Registry::OpenKey(GetPath(), KEY_QUERY_VALUE); |
| 12 | if (!key) |
| 13 | return false; |
| 14 | |
| 15 | auto target = Registry::OpenKey(_targetPath, KEY_WRITE | KEY_READ); |
| 16 | if (!target) |
| 17 | return false; |
| 18 | |
| 19 | DWORD size; |
| 20 | int i = 1; |
| 21 | auto tname = GetName(); |
| 22 | LSTATUS error; |
| 23 | while (ERROR_SUCCESS == (error = target.QueryValue(tname, nullptr, nullptr, &size))) { |
| 24 | // value already exists |
| 25 | if (i++ == 1) |
| 26 | tname = "Copy Of " + _name; |
| 27 | else |
| 28 | tname.Format(L"Copy(%d) Of %s", i, _name); |
| 29 | } |
| 30 | if (error != ERROR_FILE_NOT_FOUND) { |
| 31 | ::SetLastError(error); |
| 32 | return false; |
| 33 | } |
| 34 | _targetName = tname; |
| 35 | |
| 36 | if (!Registry::CopyValue(key.Get(), target.Get(), GetName(), _targetName)) |
| 37 | return false; |
| 38 | |
| 39 | return InvokeCallback(true); |
| 40 | } |
| 41 | |
| 42 | bool CopyValueCommand::Undo() { |
| 43 | auto target = Registry::OpenKey(_targetPath, KEY_WRITE); |
nothing calls this directly
no test coverage detected