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 3// found in the LICENSE file. 4 5#ifndef REMOTING_HOST_WIN_LAUNCH_PROCESS_WITH_TOKEN_H_ 6#define REMOTING_HOST_WIN_LAUNCH_PROCESS_WITH_TOKEN_H_ 7 8#include <windows.h> 9#include <string> 10 11#include "base/command_line.h" 12#include "base/files/file_path.h" 13#include "base/lazy_instance.h" 14#include "base/memory/scoped_ptr.h" 15#include "base/synchronization/lock.h" 16#include "base/win/scoped_handle.h" 17 18namespace remoting { 19 20// This lock should be taken when creating handles that will be inherited by 21// a child process. Without it the child process can inherit handles created for 22// a different child process started at the same time. 23extern base::LazyInstance<base::Lock>::Leaky g_inherit_handles_lock; 24 25// Creates a copy of the current process token for the given |session_id| so 26// it can be used to launch a process in that session. 27bool CreateSessionToken(uint32 session_id, base::win::ScopedHandle* token_out); 28 29// Launches |binary| in the security context of the user represented by 30// |user_token|. The session ID specified by the token is respected as well. 31// The other parameters are passed directly to CreateProcessAsUser(). 32// If |inherit_handles| is true |g_inherit_handles_lock| should be taken while 33// any inheritable handles are open. 34bool LaunchProcessWithToken(const base::FilePath& binary, 35 const base::CommandLine::StringType& command_line, 36 HANDLE user_token, 37 SECURITY_ATTRIBUTES* process_attributes, 38 SECURITY_ATTRIBUTES* thread_attributes, 39 bool inherit_handles, 40 DWORD creation_flags, 41 const base::char16* desktop_name, 42 base::win::ScopedHandle* process_out, 43 base::win::ScopedHandle* thread_out); 44 45} // namespace remoting 46 47#endif // REMOTING_HOST_WIN_LAUNCH_PROCESS_WITH_TOKEN_H_ 48