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

Unified Diff: base/process_util_win.cc

Issue 7283019: base: refactor LaunchApp variants into a single function (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 9 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/process_util_posix.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/process_util_win.cc
diff --git a/base/process_util_win.cc b/base/process_util_win.cc
index 5b0710561f9fa2ad49d397e3d970dbb7af8c9e6c..c11878ee35c7f54e94f017d4e2ac6b0885b99309 100644
--- a/base/process_util_win.cc
+++ b/base/process_util_win.cc
@@ -217,94 +217,59 @@ bool GetProcessIntegrityLevel(ProcessHandle process, IntegrityLevel *level) {
return true;
}
-bool LaunchAppImpl(const std::wstring& cmdline,
- bool wait, bool start_hidden, bool inherit_handles,
- ProcessHandle* process_handle) {
- STARTUPINFO startup_info = {0};
+bool LaunchProcess(const string16& cmdline,
+ const LaunchOptions& options) {
+ STARTUPINFO startup_info = {};
startup_info.cb = sizeof(startup_info);
+ if (options.empty_desktop_name)
+ startup_info.lpDesktop = L"";
startup_info.dwFlags = STARTF_USESHOWWINDOW;
- startup_info.wShowWindow = start_hidden ? SW_HIDE : SW_SHOW;
+ startup_info.wShowWindow = options.start_hidden ? SW_HIDE : SW_SHOW;
PROCESS_INFORMATION process_info;
- if (!CreateProcess(NULL,
- const_cast<wchar_t*>(cmdline.c_str()), NULL, NULL,
- inherit_handles, 0, NULL, NULL,
- &startup_info, &process_info))
- return false;
- // Handles must be closed or they will leak
- CloseHandle(process_info.hThread);
+ if (options.as_user) {
+ DWORD flags = CREATE_UNICODE_ENVIRONMENT;
+ void* enviroment_block = NULL;
- if (wait)
- WaitForSingleObject(process_info.hProcess, INFINITE);
+ if (!CreateEnvironmentBlock(&enviroment_block, options.as_user, FALSE))
+ return false;
- // If the caller wants the process handle, we won't close it.
- if (process_handle) {
- *process_handle = process_info.hProcess;
+ BOOL launched =
+ CreateProcessAsUser(options.as_user, NULL,
+ const_cast<wchar_t*>(cmdline.c_str()),
+ NULL, NULL, options.inherit_handles, flags,
+ enviroment_block, NULL, &startup_info,
+ &process_info);
+ DestroyEnvironmentBlock(enviroment_block);
+ if (!launched)
+ return false;
} else {
- CloseHandle(process_info.hProcess);
- }
- return true;
-}
-
-bool LaunchApp(const std::wstring& cmdline,
- bool wait, bool start_hidden, ProcessHandle* process_handle) {
- return LaunchAppImpl(cmdline, wait, start_hidden, false, process_handle);
-}
-
-bool LaunchAppWithHandleInheritance(
- const std::wstring& cmdline, bool wait, bool start_hidden,
- ProcessHandle* process_handle) {
- return LaunchAppImpl(cmdline, wait, start_hidden, true, process_handle);
-}
-
-bool LaunchAppAsUser(UserTokenHandle token, const std::wstring& cmdline,
- bool start_hidden, ProcessHandle* process_handle) {
- return LaunchAppAsUser(token, cmdline, start_hidden, process_handle,
- false, false);
-}
-
-bool LaunchAppAsUser(UserTokenHandle token, const std::wstring& cmdline,
- bool start_hidden, ProcessHandle* process_handle,
- bool empty_desktop_name, bool inherit_handles) {
- STARTUPINFO startup_info = {0};
- startup_info.cb = sizeof(startup_info);
- if (empty_desktop_name)
- startup_info.lpDesktop = L"";
- PROCESS_INFORMATION process_info;
- if (start_hidden) {
- startup_info.dwFlags = STARTF_USESHOWWINDOW;
- startup_info.wShowWindow = SW_HIDE;
+ if (!CreateProcess(NULL,
+ const_cast<wchar_t*>(cmdline.c_str()), NULL, NULL,
+ options.inherit_handles, 0, NULL, NULL,
+ &startup_info, &process_info)) {
+ return false;
+ }
}
- DWORD flags = CREATE_UNICODE_ENVIRONMENT;
- void* enviroment_block = NULL;
-
- if (!CreateEnvironmentBlock(&enviroment_block, token, FALSE))
- return false;
-
- BOOL launched =
- CreateProcessAsUser(token, NULL, const_cast<wchar_t*>(cmdline.c_str()),
- NULL, NULL, inherit_handles, flags, enviroment_block,
- NULL, &startup_info, &process_info);
-
- DestroyEnvironmentBlock(enviroment_block);
-
- if (!launched)
- return false;
+ // Handles must be closed or they will leak.
CloseHandle(process_info.hThread);
- if (process_handle) {
- *process_handle = process_info.hProcess;
+ if (options.wait)
+ WaitForSingleObject(process_info.hProcess, INFINITE);
+
+ // If the caller wants the process handle, we won't close it.
+ if (options.process_handle) {
+ *options.process_handle = process_info.hProcess;
} else {
CloseHandle(process_info.hProcess);
}
return true;
}
-bool LaunchApp(const CommandLine& cl,
- bool wait, bool start_hidden, ProcessHandle* process_handle) {
- return LaunchAppImpl(cl.command_line_string(), wait,
- start_hidden, false, process_handle);
+bool LaunchProcess(const CommandLine& cmdline,
+ const LaunchOptions& options) {
+ return LaunchProcess(cmdline.command_line_string(), options);
}
// Attempts to kill the process identified by the given process
« no previous file with comments | « base/process_util_posix.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698