| OLD | NEW |
| 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/win/win_util.h" | 5 #include "base/win/win_util.h" |
| 6 | 6 |
| 7 #include <aclapi.h> | 7 #include <aclapi.h> |
| 8 #include <cfgmgr32.h> | 8 #include <cfgmgr32.h> |
| 9 #include <lm.h> | 9 #include <lm.h> |
| 10 #include <powrprof.h> | 10 #include <powrprof.h> |
| 11 #include <shellapi.h> | 11 #include <shellapi.h> |
| 12 #include <shlobj.h> | 12 #include <shlobj.h> |
| 13 #include <shobjidl.h> // Must be before propkey. | 13 #include <shobjidl.h> // Must be before propkey. |
| 14 #include <initguid.h> | 14 #include <initguid.h> |
| 15 #include <inspectable.h> | 15 #include <inspectable.h> |
| 16 #include <propkey.h> | 16 #include <propkey.h> |
| 17 #include <propvarutil.h> | 17 #include <propvarutil.h> |
| 18 #include <psapi.h> | 18 #include <psapi.h> |
| 19 #include <roapi.h> | 19 #include <roapi.h> |
| 20 #include <sddl.h> | 20 #include <sddl.h> |
| 21 #include <setupapi.h> | 21 #include <setupapi.h> |
| 22 #include <signal.h> | 22 #include <signal.h> |
| 23 #include <stddef.h> | 23 #include <stddef.h> |
| 24 #include <stdlib.h> | 24 #include <stdlib.h> |
| 25 #include <uiviewsettingsinterop.h> | 25 #include <uiviewsettingsinterop.h> |
| 26 #include <windows.ui.viewmanagement.h> | 26 #include <windows.ui.viewmanagement.h> |
| 27 #include <winstring.h> | 27 #include <winstring.h> |
| 28 #include <wrl/wrappers/corewrappers.h> | 28 #include <wrl/wrappers/corewrappers.h> |
| 29 | 29 |
| 30 #include <memory> |
| 31 |
| 30 #include "base/base_switches.h" | 32 #include "base/base_switches.h" |
| 31 #include "base/command_line.h" | 33 #include "base/command_line.h" |
| 32 #include "base/lazy_instance.h" | 34 #include "base/lazy_instance.h" |
| 33 #include "base/logging.h" | 35 #include "base/logging.h" |
| 34 #include "base/macros.h" | 36 #include "base/macros.h" |
| 35 #include "base/memory/scoped_ptr.h" | |
| 36 #include "base/strings/string_util.h" | 37 #include "base/strings/string_util.h" |
| 37 #include "base/strings/stringprintf.h" | 38 #include "base/strings/stringprintf.h" |
| 38 #include "base/strings/utf_string_conversions.h" | 39 #include "base/strings/utf_string_conversions.h" |
| 39 #include "base/threading/thread_restrictions.h" | 40 #include "base/threading/thread_restrictions.h" |
| 40 #include "base/win/registry.h" | 41 #include "base/win/registry.h" |
| 41 #include "base/win/scoped_co_mem.h" | 42 #include "base/win/scoped_co_mem.h" |
| 42 #include "base/win/scoped_comptr.h" | 43 #include "base/win/scoped_comptr.h" |
| 43 #include "base/win/scoped_handle.h" | 44 #include "base/win/scoped_handle.h" |
| 44 #include "base/win/scoped_propvariant.h" | 45 #include "base/win/scoped_propvariant.h" |
| 45 #include "base/win/windows_version.h" | 46 #include "base/win/windows_version.h" |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 340 } | 341 } |
| 341 | 342 |
| 342 bool GetUserSidString(std::wstring* user_sid) { | 343 bool GetUserSidString(std::wstring* user_sid) { |
| 343 // Get the current token. | 344 // Get the current token. |
| 344 HANDLE token = NULL; | 345 HANDLE token = NULL; |
| 345 if (!::OpenProcessToken(::GetCurrentProcess(), TOKEN_QUERY, &token)) | 346 if (!::OpenProcessToken(::GetCurrentProcess(), TOKEN_QUERY, &token)) |
| 346 return false; | 347 return false; |
| 347 ScopedHandle token_scoped(token); | 348 ScopedHandle token_scoped(token); |
| 348 | 349 |
| 349 DWORD size = sizeof(TOKEN_USER) + SECURITY_MAX_SID_SIZE; | 350 DWORD size = sizeof(TOKEN_USER) + SECURITY_MAX_SID_SIZE; |
| 350 scoped_ptr<BYTE[]> user_bytes(new BYTE[size]); | 351 std::unique_ptr<BYTE[]> user_bytes(new BYTE[size]); |
| 351 TOKEN_USER* user = reinterpret_cast<TOKEN_USER*>(user_bytes.get()); | 352 TOKEN_USER* user = reinterpret_cast<TOKEN_USER*>(user_bytes.get()); |
| 352 | 353 |
| 353 if (!::GetTokenInformation(token, TokenUser, user, size, &size)) | 354 if (!::GetTokenInformation(token, TokenUser, user, size, &size)) |
| 354 return false; | 355 return false; |
| 355 | 356 |
| 356 if (!user->User.Sid) | 357 if (!user->User.Sid) |
| 357 return false; | 358 return false; |
| 358 | 359 |
| 359 // Convert the data to a string. | 360 // Convert the data to a string. |
| 360 wchar_t* sid_string; | 361 wchar_t* sid_string; |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 // environment variable prefix. On 64 bit Windows the SHGetKnownFolderPath | 567 // environment variable prefix. On 64 bit Windows the SHGetKnownFolderPath |
| 567 // function returns the common program files path with the X86 suffix for | 568 // function returns the common program files path with the X86 suffix for |
| 568 // the FOLDERID_ProgramFilesCommon value. | 569 // the FOLDERID_ProgramFilesCommon value. |
| 569 // To get the correct path to TabTip.exe we first read the environment | 570 // To get the correct path to TabTip.exe we first read the environment |
| 570 // variable CommonProgramW6432 which points to the desired common | 571 // variable CommonProgramW6432 which points to the desired common |
| 571 // files path. Failing that we fallback to the SHGetKnownFolderPath API. | 572 // files path. Failing that we fallback to the SHGetKnownFolderPath API. |
| 572 | 573 |
| 573 // We then replace the %CommonProgramFiles% value with the actual common | 574 // We then replace the %CommonProgramFiles% value with the actual common |
| 574 // files path found in the process. | 575 // files path found in the process. |
| 575 string16 common_program_files_path; | 576 string16 common_program_files_path; |
| 576 scoped_ptr<wchar_t[]> common_program_files_wow6432; | 577 std::unique_ptr<wchar_t[]> common_program_files_wow6432; |
| 577 DWORD buffer_size = | 578 DWORD buffer_size = |
| 578 GetEnvironmentVariable(L"CommonProgramW6432", NULL, 0); | 579 GetEnvironmentVariable(L"CommonProgramW6432", NULL, 0); |
| 579 if (buffer_size) { | 580 if (buffer_size) { |
| 580 common_program_files_wow6432.reset(new wchar_t[buffer_size]); | 581 common_program_files_wow6432.reset(new wchar_t[buffer_size]); |
| 581 GetEnvironmentVariable(L"CommonProgramW6432", | 582 GetEnvironmentVariable(L"CommonProgramW6432", |
| 582 common_program_files_wow6432.get(), | 583 common_program_files_wow6432.get(), |
| 583 buffer_size); | 584 buffer_size); |
| 584 common_program_files_path = common_program_files_wow6432.get(); | 585 common_program_files_path = common_program_files_wow6432.get(); |
| 585 DCHECK(!common_program_files_path.empty()); | 586 DCHECK(!common_program_files_path.empty()); |
| 586 } else { | 587 } else { |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 689 snapshot->resize(num_modules + 8, NULL); | 690 snapshot->resize(num_modules + 8, NULL); |
| 690 } | 691 } |
| 691 } while (--retries_remaining); | 692 } while (--retries_remaining); |
| 692 | 693 |
| 693 DLOG(ERROR) << "Failed to enumerate modules."; | 694 DLOG(ERROR) << "Failed to enumerate modules."; |
| 694 return false; | 695 return false; |
| 695 } | 696 } |
| 696 | 697 |
| 697 } // namespace win | 698 } // namespace win |
| 698 } // namespace base | 699 } // namespace base |
| OLD | NEW |