Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(206)

Side by Side Diff: chrome_elf/create_file/chrome_create_file.cc

Issue 169093007: Modify fileAtPath stat to track if the call was redirected by chrome_elf. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome_elf/create_file/chrome_create_file.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
(...skipping 26 matching lines...) Expand all
37 IN HANDLE token, 37 IN HANDLE token,
38 IN DWORD flags, 38 IN DWORD flags,
39 OUT LPWSTR path); 39 OUT LPWSTR path);
40 40
41 PathIsUNCFunction g_path_is_unc_func; 41 PathIsUNCFunction g_path_is_unc_func;
42 PathAppendFunction g_path_append_func; 42 PathAppendFunction g_path_append_func;
43 PathIsPrefixFunction g_path_is_prefix_func; 43 PathIsPrefixFunction g_path_is_prefix_func;
44 PathFindFileName g_path_find_filename_func; 44 PathFindFileName g_path_find_filename_func;
45 SHGetFolderPathFunction g_get_folder_func; 45 SHGetFolderPathFunction g_get_folder_func;
46 46
47 // Record the number of calls we've redirected so far.
48 int g_redirect_count = 0;
49
47 // Populates the g_*_func pointers to functions which will be used in 50 // Populates the g_*_func pointers to functions which will be used in
48 // ShouldBypass(). Chrome_elf cannot have a load-time dependency on shell32 or 51 // ShouldBypass(). Chrome_elf cannot have a load-time dependency on shell32 or
49 // shlwapi as this would induce a load-time dependency on user32.dll. Instead, 52 // shlwapi as this would induce a load-time dependency on user32.dll. Instead,
50 // the addresses of the functions we need are retrieved the first time this 53 // the addresses of the functions we need are retrieved the first time this
51 // method is called, and cached to avoid subsequent calls to GetProcAddress(). 54 // method is called, and cached to avoid subsequent calls to GetProcAddress().
52 // It is assumed that the host process will never unload these functions. 55 // It is assumed that the host process will never unload these functions.
53 // Returns true if all the functions needed are present. 56 // Returns true if all the functions needed are present.
54 bool PopulateShellFunctions() { 57 bool PopulateShellFunctions() {
55 // Early exit if functions have already been populated. 58 // Early exit if functions have already been populated.
56 if (g_path_is_unc_func && g_path_append_func && 59 if (g_path_is_unc_func && g_path_append_func &&
(...skipping 29 matching lines...) Expand all
86 89
87 HANDLE WINAPI CreateFileWRedirect( 90 HANDLE WINAPI CreateFileWRedirect(
88 LPCWSTR file_name, 91 LPCWSTR file_name,
89 DWORD desired_access, 92 DWORD desired_access,
90 DWORD share_mode, 93 DWORD share_mode,
91 LPSECURITY_ATTRIBUTES security_attributes, 94 LPSECURITY_ATTRIBUTES security_attributes,
92 DWORD creation_disposition, 95 DWORD creation_disposition,
93 DWORD flags_and_attributes, 96 DWORD flags_and_attributes,
94 HANDLE template_file) { 97 HANDLE template_file) {
95 if (ShouldBypass(file_name)) { 98 if (ShouldBypass(file_name)) {
99 ++g_redirect_count;
96 return CreateFileNTDLL(file_name, 100 return CreateFileNTDLL(file_name,
97 desired_access, 101 desired_access,
98 share_mode, 102 share_mode,
99 security_attributes, 103 security_attributes,
100 creation_disposition, 104 creation_disposition,
101 flags_and_attributes, 105 flags_and_attributes,
102 template_file); 106 template_file);
103 } 107 }
104 return CreateFile(file_name, 108 return CreateFile(file_name,
105 desired_access, 109 desired_access,
106 share_mode, 110 share_mode,
107 security_attributes, 111 security_attributes,
108 creation_disposition, 112 creation_disposition,
109 flags_and_attributes, 113 flags_and_attributes,
110 template_file); 114 template_file);
111 115
112 } 116 }
113 117
118 int GetRedirectCount() {
119 return g_redirect_count;
120 }
121
114 HANDLE CreateFileNTDLL( 122 HANDLE CreateFileNTDLL(
115 LPCWSTR file_name, 123 LPCWSTR file_name,
116 DWORD desired_access, 124 DWORD desired_access,
117 DWORD share_mode, 125 DWORD share_mode,
118 LPSECURITY_ATTRIBUTES security_attributes, 126 LPSECURITY_ATTRIBUTES security_attributes,
119 DWORD creation_disposition, 127 DWORD creation_disposition,
120 DWORD flags_and_attributes, 128 DWORD flags_and_attributes,
121 HANDLE template_file) { 129 HANDLE template_file) {
122 HANDLE file_handle = INVALID_HANDLE_VALUE; 130 HANDLE file_handle = INVALID_HANDLE_VALUE;
123 NTSTATUS result = STATUS_UNSUCCESSFUL; 131 NTSTATUS result = STATUS_UNSUCCESSFUL;
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 LPCWSTR file_name = g_path_find_filename_func(file_path); 291 LPCWSTR file_name = g_path_find_filename_func(file_path);
284 292
285 bool in_userdata_dir = !!g_path_is_prefix_func(local_appdata_path, file_path); 293 bool in_userdata_dir = !!g_path_is_prefix_func(local_appdata_path, file_path);
286 bool is_settings_file = wcscmp(file_name, kPreferencesFilename) == 0 || 294 bool is_settings_file = wcscmp(file_name, kPreferencesFilename) == 0 ||
287 wcscmp(file_name, kLocalStateFilename) == 0; 295 wcscmp(file_name, kLocalStateFilename) == 0;
288 296
289 // Check if we are trying to access the Preferences in the UserData dir. If 297 // Check if we are trying to access the Preferences in the UserData dir. If
290 // so, then redirect the call to bypass kernel32. 298 // so, then redirect the call to bypass kernel32.
291 return in_userdata_dir && is_settings_file; 299 return in_userdata_dir && is_settings_file;
292 } 300 }
OLDNEW
« no previous file with comments | « chrome_elf/create_file/chrome_create_file.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698