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

Side by Side Diff: sandbox/src/win_utils.cc

Issue 199052: Simplify ResolveNTFunctionPtr (temporary)... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 3 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 | « no previous file | 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 (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "sandbox/src/win_utils.h" 5 #include "sandbox/src/win_utils.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/scoped_ptr.h" 10 #include "base/scoped_ptr.h"
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 if (STATUS_SUCCESS != status) 190 if (STATUS_SUCCESS != status)
191 return false; 191 return false;
192 192
193 path->assign(name->ObjectName.Buffer, name->ObjectName.Length / 193 path->assign(name->ObjectName.Buffer, name->ObjectName.Length /
194 sizeof(name->ObjectName.Buffer[0])); 194 sizeof(name->ObjectName.Buffer[0]));
195 return true; 195 return true;
196 } 196 }
197 197
198 }; // namespace sandbox 198 }; // namespace sandbox
199 199
200 // The information is cached in a map. The map has to be global, so it's memory 200 // TODO(cpu): Revert this change to use a map to speed up the function once
201 // is leaked, and it's ok. 201 // this has been deployed in the dev channel for a week. See bug 11789.
202 void ResolveNTFunctionPtr(const char* name, void* ptr) { 202 void ResolveNTFunctionPtr(const char* name, void* ptr) {
203 static std::map<std::string, FARPROC>* function_map = NULL;
204 if (!function_map)
205 function_map = new std::map<std::string, FARPROC>;
206
207 static HMODULE ntdll = ::GetModuleHandle(sandbox::kNtdllName); 203 static HMODULE ntdll = ::GetModuleHandle(sandbox::kNtdllName);
Nicolas Sylvain 2009/09/09 03:31:00 This is going to fail the same way it was failing
208 204
209 FARPROC* function_ptr = reinterpret_cast<FARPROC*>(ptr); 205 FARPROC* function_ptr = reinterpret_cast<FARPROC*>(ptr);
210 *function_ptr = (*function_map)[name];
211 if (*function_ptr)
212 return;
213
214 *function_ptr = ::GetProcAddress(ntdll, name); 206 *function_ptr = ::GetProcAddress(ntdll, name);
215 (*function_map)[name] = *function_ptr; 207 CHECK(*function_ptr) << "Failed to resolve NTDLL function";
216 DCHECK(*function_ptr) << "Failed to resolve NTDLL function";
217
218 if (!*function_ptr) {
219 // If we return NULL, we are going to crash. Unfortunately, this happens.
220 // See bug 11789.
221 // Maybe our module handle is not valid anymore?
222 HMODULE ntdll2 = ::GetModuleHandle(sandbox::kNtdllName);
223 *function_ptr = ::GetProcAddress(ntdll2, name);
224 (*function_map)[name] = *function_ptr;
225
226 // TODO(nsylvain): Remove this check after we are done troubleshooting.
227 CHECK(ntdll2) << "Fatal error: NTLL module is NULL";
228 CHECK(*function_ptr) << "Fatal error: Failed to resolve NTDLL function";
229
230 // If we are here, it means that getting the new module handle worked. This
231 // is not really expected. We want to receive some reports from users, so
232 // we will crash anyway.
233 // TODO(nsylvain): Remove this check after we are done troubleshooting.
234 CHECK(ntdll) << "Fatal Error: NTDLL module was NULL.";
235 CHECK(ntdll == ntdll2) << "Fatal Error: NTDLL module has been moved.";
236 CHECK(false) << "Fatal Error: GetProcAddress Inconsistency";
237 }
238 } 208 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698