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

Unified Diff: chrome/installer/setup/setup_util.cc

Issue 10810021: Register Chrome in Active Setup to be called by Windows at user login. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase onto 147656 Created 8 years, 5 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 | « chrome/installer/setup/setup_util.h ('k') | chrome/installer/setup/setup_util_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/installer/setup/setup_util.cc
diff --git a/chrome/installer/setup/setup_util.cc b/chrome/installer/setup/setup_util.cc
index 340ede9f9ef251aee7858158f1433fb46509069f..a190862da4f39e1fbbd7e8aafdd2ef01eacf13bc 100644
--- a/chrome/installer/setup/setup_util.cc
+++ b/chrome/installer/setup/setup_util.cc
@@ -6,6 +6,8 @@
#include "chrome/installer/setup/setup_util.h"
+#include <windows.h>
+
#include "base/file_util.h"
#include "base/logging.h"
#include "base/string_util.h"
@@ -138,4 +140,46 @@ bool DeleteFileFromTempProcess(const FilePath& path,
return ok != FALSE;
}
+string16 GetActiveSetupPath(BrowserDistribution* dist) {
+ static const wchar_t kInstalledComponentsPath[] =
+ L"Software\\Microsoft\\Active Setup\\Installed Components\\";
+ return kInstalledComponentsPath + dist->GetAppGuid();
+}
+
+ScopedTokenPrivilege::ScopedTokenPrivilege(const wchar_t* privilege_name)
+ : is_enabled_(false) {
+ if (!::OpenProcessToken(::GetCurrentProcess(),
+ TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, token_.Receive())) {
+ return;
+ }
+
+ LUID privilege_luid;
+ if (!::LookupPrivilegeValue(NULL, privilege_name, &privilege_luid)) {
+ token_.Close();
+ return;
+ }
+
+ // Adjust the token's privileges to enable |privilege_name|. If this privilege
+ // was already enabled, |previous_privileges_|.PrivilegeCount will be set to 0
+ // and we then know not to disable this privilege upon destruction.
+ TOKEN_PRIVILEGES tp;
+ tp.PrivilegeCount = 1;
+ tp.Privileges[0].Luid = privilege_luid;
+ tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
+ DWORD return_length;
+ if (!::AdjustTokenPrivileges(token_, FALSE, &tp, sizeof(TOKEN_PRIVILEGES),
+ &previous_privileges_, &return_length)) {
+ token_.Close();
+ } else {
+ is_enabled_ = true;
+ }
+}
+
+ScopedTokenPrivilege::~ScopedTokenPrivilege() {
+ if (is_enabled_ && previous_privileges_.PrivilegeCount != 0) {
+ ::AdjustTokenPrivileges(token_, FALSE, &previous_privileges_,
+ sizeof(TOKEN_PRIVILEGES), NULL, NULL);
+ }
+}
+
} // namespace installer
« no previous file with comments | « chrome/installer/setup/setup_util.h ('k') | chrome/installer/setup/setup_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698