| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <windows.h> | 5 #include <windows.h> |
| 6 #include <string> | 6 #include <string> |
| 7 | 7 |
| 8 #include "sandbox/win/tests/validation_tests/commands.h" | 8 #include "sandbox/win/tests/validation_tests/commands.h" |
| 9 | 9 |
| 10 #include "sandbox/win/tests/common/controller.h" | 10 #include "sandbox/win/tests/common/controller.h" |
| 11 | 11 |
| 12 namespace { | 12 namespace { |
| 13 | 13 |
| 14 // Returns the HKEY corresponding to name. If there is no HKEY corresponding | 14 // Returns the HKEY corresponding to name. If there is no HKEY corresponding |
| 15 // to the name it returns NULL. | 15 // to the name it returns NULL. |
| 16 HKEY GetHKEYFromString(const std::wstring &name) { | 16 HKEY GetHKEYFromString(const base::string16 &name) { |
| 17 if (L"HKLM" == name) | 17 if (L"HKLM" == name) |
| 18 return HKEY_LOCAL_MACHINE; | 18 return HKEY_LOCAL_MACHINE; |
| 19 else if (L"HKCR" == name) | 19 else if (L"HKCR" == name) |
| 20 return HKEY_CLASSES_ROOT; | 20 return HKEY_CLASSES_ROOT; |
| 21 else if (L"HKCC" == name) | 21 else if (L"HKCC" == name) |
| 22 return HKEY_CURRENT_CONFIG; | 22 return HKEY_CURRENT_CONFIG; |
| 23 else if (L"HKCU" == name) | 23 else if (L"HKCU" == name) |
| 24 return HKEY_CURRENT_USER; | 24 return HKEY_CURRENT_USER; |
| 25 else if (L"HKU" == name) | 25 else if (L"HKU" == name) |
| 26 return HKEY_USERS; | 26 return HKEY_USERS; |
| 27 | 27 |
| 28 return NULL; | 28 return NULL; |
| 29 } | 29 } |
| 30 | 30 |
| 31 // Modifies string to remove the leading and trailing quotes. | 31 // Modifies string to remove the leading and trailing quotes. |
| 32 void trim_quote(std::wstring* string) { | 32 void trim_quote(base::string16* string) { |
| 33 std::wstring::size_type pos1 = string->find_first_not_of(L'"'); | 33 base::string16::size_type pos1 = string->find_first_not_of(L'"'); |
| 34 std::wstring::size_type pos2 = string->find_last_not_of(L'"'); | 34 base::string16::size_type pos2 = string->find_last_not_of(L'"'); |
| 35 | 35 |
| 36 if (std::wstring::npos == pos1 || std::wstring::npos == pos2) | 36 if (base::string16::npos == pos1 || base::string16::npos == pos2) |
| 37 (*string) = L""; | 37 (*string) = L""; |
| 38 else | 38 else |
| 39 (*string) = string->substr(pos1, pos2 + 1); | 39 (*string) = string->substr(pos1, pos2 + 1); |
| 40 } | 40 } |
| 41 | 41 |
| 42 int TestOpenFile(std::wstring path, bool for_write) { | 42 int TestOpenFile(base::string16 path, bool for_write) { |
| 43 wchar_t path_expanded[MAX_PATH + 1] = {0}; | 43 wchar_t path_expanded[MAX_PATH + 1] = {0}; |
| 44 DWORD size = ::ExpandEnvironmentStrings(path.c_str(), path_expanded, | 44 DWORD size = ::ExpandEnvironmentStrings(path.c_str(), path_expanded, |
| 45 MAX_PATH); | 45 MAX_PATH); |
| 46 if (!size) | 46 if (!size) |
| 47 return sandbox::SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 47 return sandbox::SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 48 | 48 |
| 49 HANDLE file; | 49 HANDLE file; |
| 50 file = ::CreateFile(path_expanded, | 50 file = ::CreateFile(path_expanded, |
| 51 for_write ? GENERIC_READ | GENERIC_WRITE : GENERIC_READ, | 51 for_write ? GENERIC_READ | GENERIC_WRITE : GENERIC_READ, |
| 52 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, | 52 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 } else { | 135 } else { |
| 136 ::CloseHandle(thread); | 136 ::CloseHandle(thread); |
| 137 return SBOX_TEST_SUCCEEDED; | 137 return SBOX_TEST_SUCCEEDED; |
| 138 } | 138 } |
| 139 } | 139 } |
| 140 | 140 |
| 141 SBOX_TESTS_COMMAND int OpenFile(int argc, wchar_t **argv) { | 141 SBOX_TESTS_COMMAND int OpenFile(int argc, wchar_t **argv) { |
| 142 if (1 != argc) | 142 if (1 != argc) |
| 143 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 143 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 144 | 144 |
| 145 std::wstring path = argv[0]; | 145 base::string16 path = argv[0]; |
| 146 trim_quote(&path); | 146 trim_quote(&path); |
| 147 | 147 |
| 148 return TestOpenReadFile(path); | 148 return TestOpenReadFile(path); |
| 149 } | 149 } |
| 150 | 150 |
| 151 int TestOpenReadFile(const std::wstring& path) { | 151 int TestOpenReadFile(const base::string16& path) { |
| 152 return TestOpenFile(path, false); | 152 return TestOpenFile(path, false); |
| 153 } | 153 } |
| 154 | 154 |
| 155 int TestOpenWriteFile(int argc, wchar_t **argv) { | 155 int TestOpenWriteFile(int argc, wchar_t **argv) { |
| 156 if (1 != argc) | 156 if (1 != argc) |
| 157 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 157 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 158 | 158 |
| 159 std::wstring path = argv[0]; | 159 base::string16 path = argv[0]; |
| 160 trim_quote(&path); | 160 trim_quote(&path); |
| 161 | 161 |
| 162 return TestOpenWriteFile(path); | 162 return TestOpenWriteFile(path); |
| 163 } | 163 } |
| 164 | 164 |
| 165 int TestOpenWriteFile(const std::wstring& path) { | 165 int TestOpenWriteFile(const base::string16& path) { |
| 166 return TestOpenFile(path, true); | 166 return TestOpenFile(path, true); |
| 167 } | 167 } |
| 168 | 168 |
| 169 SBOX_TESTS_COMMAND int OpenKey(int argc, wchar_t **argv) { | 169 SBOX_TESTS_COMMAND int OpenKey(int argc, wchar_t **argv) { |
| 170 if (0 == argc || argc > 2) | 170 if (0 == argc || argc > 2) |
| 171 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 171 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 172 | 172 |
| 173 // Get the hive. | 173 // Get the hive. |
| 174 HKEY base_key = GetHKEYFromString(argv[0]); | 174 HKEY base_key = GetHKEYFromString(argv[0]); |
| 175 | 175 |
| 176 // Get the subkey. | 176 // Get the subkey. |
| 177 std::wstring subkey; | 177 base::string16 subkey; |
| 178 if (2 == argc) { | 178 if (2 == argc) { |
| 179 subkey = argv[1]; | 179 subkey = argv[1]; |
| 180 trim_quote(&subkey); | 180 trim_quote(&subkey); |
| 181 } | 181 } |
| 182 | 182 |
| 183 return TestOpenKey(base_key, subkey); | 183 return TestOpenKey(base_key, subkey); |
| 184 } | 184 } |
| 185 | 185 |
| 186 int TestOpenKey(HKEY base_key, std::wstring subkey) { | 186 int TestOpenKey(HKEY base_key, base::string16 subkey) { |
| 187 HKEY key; | 187 HKEY key; |
| 188 LONG err_code = ::RegOpenKeyEx(base_key, | 188 LONG err_code = ::RegOpenKeyEx(base_key, |
| 189 subkey.c_str(), | 189 subkey.c_str(), |
| 190 0, // Reserved, must be 0. | 190 0, // Reserved, must be 0. |
| 191 MAXIMUM_ALLOWED, | 191 MAXIMUM_ALLOWED, |
| 192 &key); | 192 &key); |
| 193 if (ERROR_SUCCESS == err_code) { | 193 if (ERROR_SUCCESS == err_code) { |
| 194 ::RegCloseKey(key); | 194 ::RegCloseKey(key); |
| 195 return SBOX_TEST_SUCCEEDED; | 195 return SBOX_TEST_SUCCEEDED; |
| 196 } else if (ERROR_INVALID_HANDLE == err_code || | 196 } else if (ERROR_INVALID_HANDLE == err_code || |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 SBOX_TESTS_COMMAND int SleepCmd(int argc, wchar_t **argv) { | 253 SBOX_TESTS_COMMAND int SleepCmd(int argc, wchar_t **argv) { |
| 254 if (1 != argc) | 254 if (1 != argc) |
| 255 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; | 255 return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; |
| 256 | 256 |
| 257 ::Sleep(_wtoi(argv[0])); | 257 ::Sleep(_wtoi(argv[0])); |
| 258 return SBOX_TEST_SUCCEEDED; | 258 return SBOX_TEST_SUCCEEDED; |
| 259 } | 259 } |
| 260 | 260 |
| 261 | 261 |
| 262 } // namespace sandbox | 262 } // namespace sandbox |
| OLD | NEW |