| Index: remoting/host/win/elevation_helpers.cc
|
| diff --git a/remoting/host/win/elevation_helpers.cc b/remoting/host/win/elevation_helpers.cc
|
| index 7e8fb76cd21168f98e8b362165291a7c7e091297..dee90162d9469f3a007957bfe2a8d3a85bc5f0f0 100644
|
| --- a/remoting/host/win/elevation_helpers.cc
|
| +++ b/remoting/host/win/elevation_helpers.cc
|
| @@ -6,23 +6,52 @@
|
|
|
| #include <windows.h>
|
|
|
| +#include "base/logging.h"
|
| #include "base/win/scoped_handle.h"
|
|
|
| -namespace remoting {
|
| +namespace {
|
| +
|
| +void GetCurrentProcessToken(base::win::ScopedHandle* scoped_handle) {
|
| + DCHECK(scoped_handle);
|
|
|
| -bool IsProcessElevated() {
|
| HANDLE process_token;
|
| OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &process_token);
|
| + scoped_handle->Set(process_token);
|
| + DCHECK(scoped_handle->IsValid());
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +namespace remoting {
|
|
|
| - base::win::ScopedHandle scoped_process_token(process_token);
|
| +bool IsProcessElevated() {
|
| + base::win::ScopedHandle scoped_process_token;
|
| + GetCurrentProcessToken(&scoped_process_token);
|
|
|
| // Unlike TOKEN_ELEVATION_TYPE which returns TokenElevationTypeDefault when
|
| - // UAC is turned off, TOKEN_ELEVATION will tell you the process is elevated.
|
| + // UAC is turned off, TOKEN_ELEVATION returns whether the process is elevated.
|
| DWORD size;
|
| TOKEN_ELEVATION elevation;
|
| - GetTokenInformation(process_token, TokenElevation,
|
| - &elevation, sizeof(elevation), &size);
|
| + if (!GetTokenInformation(scoped_process_token.Get(), TokenElevation,
|
| + &elevation, sizeof(elevation), &size)) {
|
| + PLOG(ERROR) << "GetTokenInformation() failed";
|
| + return false;
|
| + }
|
| return elevation.TokenIsElevated != 0;
|
| }
|
|
|
| +bool CurrentProcessHasUiAccess() {
|
| + base::win::ScopedHandle scoped_process_token;
|
| + GetCurrentProcessToken(&scoped_process_token);
|
| +
|
| + DWORD size;
|
| + DWORD uiaccess_value = 0;
|
| + if (!GetTokenInformation(scoped_process_token.Get(), TokenUIAccess,
|
| + &uiaccess_value, sizeof(uiaccess_value), &size)) {
|
| + PLOG(ERROR) << "GetTokenInformation() failed";
|
| + return false;
|
| + }
|
| + return uiaccess_value != 0;
|
| +}
|
| +
|
| } // namespace remoting
|
|
|