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

Side by Side Diff: base/process/launch_win.cc

Issue 98603007: Launches a privileged utility process. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moves whitelist to a new file, adds new OWNERS reviewers for that file. Also fixes ordering of met… 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
OLDNEW
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 "base/process/launch.h" 5 #include "base/process/launch.h"
6 6
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <io.h> 8 #include <io.h>
9 #include <windows.h> 9 #include <windows.h>
10 #include <userenv.h> 10 #include <userenv.h>
11 #include <psapi.h> 11 #include <psapi.h>
12 #include <Shellapi.h>
12 13
13 #include <ios> 14 #include <ios>
14 15
15 #include "base/bind.h" 16 #include "base/bind.h"
16 #include "base/bind_helpers.h" 17 #include "base/bind_helpers.h"
17 #include "base/command_line.h" 18 #include "base/command_line.h"
18 #include "base/debug/stack_trace.h" 19 #include "base/debug/stack_trace.h"
19 #include "base/logging.h" 20 #include "base/logging.h"
20 #include "base/memory/scoped_ptr.h" 21 #include "base/memory/scoped_ptr.h"
21 #include "base/message_loop/message_loop.h" 22 #include "base/message_loop/message_loop.h"
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 189
189 return true; 190 return true;
190 } 191 }
191 192
192 bool LaunchProcess(const CommandLine& cmdline, 193 bool LaunchProcess(const CommandLine& cmdline,
193 const LaunchOptions& options, 194 const LaunchOptions& options,
194 ProcessHandle* process_handle) { 195 ProcessHandle* process_handle) {
195 return LaunchProcess(cmdline.GetCommandLineString(), options, process_handle); 196 return LaunchProcess(cmdline.GetCommandLineString(), options, process_handle);
196 } 197 }
197 198
199 bool LaunchElevatedProcess(const CommandLine& cmdline,
200 const LaunchOptions& options,
201 ProcessHandle* process_handle) {
202 const std::wstring file = cmdline.GetProgram().value();
Nico 2014/02/05 05:38:11 No wstrings in new code, use string16.
Drew Haven 2014/02/05 20:13:22 Done.
203 const std::wstring arguments = cmdline.GetArgumentsString();
204
205 SHELLEXECUTEINFO shex_info = {0};
206 shex_info.cbSize = sizeof(shex_info);
207 shex_info.fMask = SEE_MASK_NOCLOSEPROCESS;
208 shex_info.hwnd = GetActiveWindow();
209 shex_info.lpVerb = L"runas";
210 shex_info.lpFile = file.c_str();
211 shex_info.lpParameters = arguments.c_str();
212 shex_info.lpDirectory = NULL;
213 shex_info.nShow = options.start_hidden ? SW_HIDE : SW_SHOW;
214 shex_info.hInstApp = NULL;
215
216 if (!ShellExecuteEx(&shex_info)) {
217 DPLOG(ERROR);
218 return false;
219 }
220
221 if (options.wait)
222 WaitForSingleObject(shex_info.hProcess, INFINITE);
223
224 // If the caller wants the process handle give it to them, otherwise just
225 // close it. Closing it does not terminate the process.
226 if (process_handle)
227 *process_handle = shex_info.hProcess;
228 else
229 CloseHandle(shex_info.hProcess);
230
231 return true;
232 }
233
198 bool SetJobObjectLimitFlags(HANDLE job_object, DWORD limit_flags) { 234 bool SetJobObjectLimitFlags(HANDLE job_object, DWORD limit_flags) {
199 JOBOBJECT_EXTENDED_LIMIT_INFORMATION limit_info = {0}; 235 JOBOBJECT_EXTENDED_LIMIT_INFORMATION limit_info = {0};
200 limit_info.BasicLimitInformation.LimitFlags = limit_flags; 236 limit_info.BasicLimitInformation.LimitFlags = limit_flags;
201 return 0 != SetInformationJobObject( 237 return 0 != SetInformationJobObject(
202 job_object, 238 job_object,
203 JobObjectExtendedLimitInformation, 239 JobObjectExtendedLimitInformation,
204 &limit_info, 240 &limit_info,
205 sizeof(limit_info)); 241 sizeof(limit_info));
206 } 242 }
207 243
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 WaitForSingleObject(proc_info.process_handle(), INFINITE); 309 WaitForSingleObject(proc_info.process_handle(), INFINITE);
274 310
275 return true; 311 return true;
276 } 312 }
277 313
278 void RaiseProcessToHighPriority() { 314 void RaiseProcessToHighPriority() {
279 SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS); 315 SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);
280 } 316 }
281 317
282 } // namespace base 318 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698