| OLD | NEW |
| (Empty) |
| 1 // Copyright 2006-2009 Google Inc. | |
| 2 // | |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | |
| 4 // you may not use this file except in compliance with the License. | |
| 5 // You may obtain a copy of the License at | |
| 6 // | |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | |
| 8 // | |
| 9 // Unless required by applicable law or agreed to in writing, software | |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | |
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 12 // See the License for the specific language governing permissions and | |
| 13 // limitations under the License. | |
| 14 // ======================================================================== | |
| 15 | |
| 16 #ifndef OMAHA_COMMON_VISTA_UTILS_H__ | |
| 17 #define OMAHA_COMMON_VISTA_UTILS_H__ | |
| 18 | |
| 19 #include <windows.h> | |
| 20 #include <aclapi.h> | |
| 21 #include <sddl.h> | |
| 22 #include <userenv.h> | |
| 23 #include <atlstr.h> | |
| 24 #include <vector> | |
| 25 #include "base/basictypes.h" | |
| 26 | |
| 27 namespace omaha { | |
| 28 | |
| 29 // Constants. | |
| 30 const TCHAR* const kExplorer = _T("EXPLORER.EXE"); | |
| 31 const TCHAR* const kIExplore = _T("IEXPLORE.EXE"); | |
| 32 | |
| 33 namespace vista { | |
| 34 | |
| 35 // Returns true if the current process is running in 'protected mode'. | |
| 36 bool IsProcessProtected(); | |
| 37 | |
| 38 // Allows processes that run under protected mode access to a shared kernel | |
| 39 // object such as mapped memory. | |
| 40 // | |
| 41 // Returns S_OK if successful, S_FALSE if not running on vista, or an | |
| 42 // error value. | |
| 43 HRESULT AllowProtectedProcessAccessToSharedObject(const TCHAR* name); | |
| 44 | |
| 45 // Restarts IEUser process if we can. This is to allow for | |
| 46 // IEUser.exe to refresh it's ElevationPolicy cache. Due to a bug | |
| 47 // within IE7, IEUser.exe does not refresh it's cache unless it | |
| 48 // is restarted in the manner below. If the cache is not refreshed | |
| 49 // IEUser does not respect any new ElevationPolicies that a fresh | |
| 50 // setup program installs for an ActiveX control or BHO. This code | |
| 51 // is adapted from Toolbar. | |
| 52 HRESULT RestartIEUser(); | |
| 53 | |
| 54 // TODO(Omaha): Move these to a different utils file, since these are not | |
| 55 // Vista-specific. | |
| 56 // TODO(Omaha): rename for consistency with | |
| 57 // GetProcessPidsForActiveUserOrSession. | |
| 58 // | |
| 59 // Gets current user's explorer.exe pid. If that fails, gets the pid of any | |
| 60 // explorer.exe running in the current session. | |
| 61 HRESULT GetExplorerPidForCurrentUserOrSession(uint32* pid); | |
| 62 | |
| 63 // Returns the TOKEN of the explorer process of any user that is logged in. | |
| 64 HRESULT GetExplorerTokenForLoggedInUser(HANDLE* token); | |
| 65 | |
| 66 // Retrieves a primary token for one of the logged on users. The logged on | |
| 67 // user is either the current user or a user logged on in the same session as | |
| 68 // the current user. The caller must close the token handle. | |
| 69 // If this function is called before the dependent services of Remote | |
| 70 // Desktop Services have started, an RPC_S_INVALID_BINDING error code may | |
| 71 // be returned. | |
| 72 HRESULT GetLoggedOnUserToken(HANDLE* token); | |
| 73 | |
| 74 // Get PIDs for the processes running with the specified executable, user_sid, | |
| 75 // and session_id. user_sid can be blank, in which case, the search will | |
| 76 // encompass all processes with the given name in session_id. The session | |
| 77 // always has to be a valid session, hence the name GetPidsInSession(). | |
| 78 HRESULT GetPidsInSession(const TCHAR* exe_name, | |
| 79 const TCHAR* user_sid, | |
| 80 DWORD session_id, | |
| 81 std::vector<uint32>* pids); | |
| 82 | |
| 83 // Get the handle of exe_name running under the active user or active session. | |
| 84 // If the call is made from the SYSTEM account, returns PIDs for exe_name | |
| 85 // in the currently active user session. If the call is made from a user account | |
| 86 // returns PIDs for that user, or if that cannot be found, in the current | |
| 87 // session. | |
| 88 HRESULT GetProcessPidsForActiveUserOrSession(const TCHAR* exe_name, | |
| 89 std::vector<uint32>* pids); | |
| 90 | |
| 91 // Starts process with the token obtained from the specified process. | |
| 92 HRESULT StartProcessWithTokenOfProcess(uint32 pid, | |
| 93 const CString& command_line); | |
| 94 | |
| 95 // Runs the command on behalf of the current user. Creates a fresh environment | |
| 96 // block based on the user's token. | |
| 97 HRESULT RunAsCurrentUser(const CString& command_line); | |
| 98 | |
| 99 } // namespace vista | |
| 100 | |
| 101 } // namespace omaha | |
| 102 | |
| 103 #endif // OMAHA_COMMON_VISTA_UTILS_H__ | |
| 104 | |
| OLD | NEW |