OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome_elf/create_file/chrome_create_file.h" | 5 #include "chrome_elf/create_file/chrome_create_file.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/strings/string16.h" | 9 #include "base/strings/string16.h" |
10 #include "chrome_elf/chrome_elf_constants.h" | 10 #include "chrome_elf/chrome_elf_constants.h" |
| 11 #include "chrome_elf/chrome_elf_util.h" |
11 #include "chrome_elf/ntdll_cache.h" | 12 #include "chrome_elf/ntdll_cache.h" |
12 #include "sandbox/win/src/nt_internals.h" | 13 #include "sandbox/win/src/nt_internals.h" |
13 | 14 |
14 namespace { | 15 namespace { |
15 | 16 |
16 // From ShlObj.h in the Windows SDK. | 17 // From ShlObj.h in the Windows SDK. |
17 #define CSIDL_LOCAL_APPDATA 0x001c | 18 #define CSIDL_LOCAL_APPDATA 0x001c |
18 | 19 |
19 typedef BOOL (WINAPI *PathIsUNCFunction)( | 20 typedef BOOL (WINAPI *PathIsUNCFunction)( |
20 IN LPCWSTR path); | 21 IN LPCWSTR path); |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 } else if (creation_disposition == FILE_OVERWRITE_IF) { | 237 } else if (creation_disposition == FILE_OVERWRITE_IF) { |
237 SetLastError(io_status_block.Information == FILE_OVERWRITTEN ? | 238 SetLastError(io_status_block.Information == FILE_OVERWRITTEN ? |
238 ERROR_ALREADY_EXISTS : ERROR_SUCCESS); | 239 ERROR_ALREADY_EXISTS : ERROR_SUCCESS); |
239 } else { | 240 } else { |
240 SetLastError(ERROR_SUCCESS); | 241 SetLastError(ERROR_SUCCESS); |
241 } | 242 } |
242 | 243 |
243 return file_handle; | 244 return file_handle; |
244 } | 245 } |
245 | 246 |
246 bool IsCanary(LPWSTR exe_path) { | |
247 wchar_t* found = wcsstr(exe_path, L"Google\\Chrome SxS"); | |
248 return !!found; | |
249 } | |
250 | |
251 bool ShouldBypass(LPCWSTR file_path) { | 247 bool ShouldBypass(LPCWSTR file_path) { |
252 // Do not redirect in non-browser processes. | 248 // Do not redirect in non-browser processes. |
253 wchar_t* command_line = ::GetCommandLine(); | 249 wchar_t* command_line = ::GetCommandLine(); |
254 if (command_line && wcsstr(command_line, L"--type")) | 250 if (command_line && wcsstr(command_line, L"--type")) |
255 return false; | 251 return false; |
256 | 252 |
257 // If the shell functions are not present, forward the call to kernel32. | 253 // If the shell functions are not present, forward the call to kernel32. |
258 if (!PopulateShellFunctions()) | 254 if (!PopulateShellFunctions()) |
259 return false; | 255 return false; |
260 | 256 |
(...skipping 26 matching lines...) Expand all Loading... |
287 LPCWSTR file_name = g_path_find_filename_func(file_path); | 283 LPCWSTR file_name = g_path_find_filename_func(file_path); |
288 | 284 |
289 bool in_userdata_dir = !!g_path_is_prefix_func(local_appdata_path, file_path); | 285 bool in_userdata_dir = !!g_path_is_prefix_func(local_appdata_path, file_path); |
290 bool is_settings_file = wcscmp(file_name, kPreferencesFilename) == 0 || | 286 bool is_settings_file = wcscmp(file_name, kPreferencesFilename) == 0 || |
291 wcscmp(file_name, kLocalStateFilename) == 0; | 287 wcscmp(file_name, kLocalStateFilename) == 0; |
292 | 288 |
293 // Check if we are trying to access the Preferences in the UserData dir. If | 289 // Check if we are trying to access the Preferences in the UserData dir. If |
294 // so, then redirect the call to bypass kernel32. | 290 // so, then redirect the call to bypass kernel32. |
295 return in_userdata_dir && is_settings_file; | 291 return in_userdata_dir && is_settings_file; |
296 } | 292 } |
OLD | NEW |