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

Side by Side Diff: chrome/browser/policy/configuration_policy_provider_win.cc

Issue 3836005: Move pe_image and registry from base to base/win and use the namespace. It re... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/browser/policy/configuration_policy_provider_win.h" 5 #include "chrome/browser/policy/configuration_policy_provider_win.h"
6 6
7 #include <userenv.h> 7 #include <userenv.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/object_watcher.h" 12 #include "base/object_watcher.h"
13 #include "base/registry.h"
14 #include "base/scoped_ptr.h" 13 #include "base/scoped_ptr.h"
15 #include "base/string_number_conversions.h" 14 #include "base/string_number_conversions.h"
16 #include "base/string_piece.h" 15 #include "base/string_piece.h"
17 #include "base/string_util.h" 16 #include "base/string_util.h"
18 #include "base/sys_string_conversions.h" 17 #include "base/sys_string_conversions.h"
19 #include "base/utf_string_conversions.h" 18 #include "base/utf_string_conversions.h"
20 #include "base/values.h" 19 #include "base/values.h"
20 #include "base/win/registry.h"
21 #include "chrome/common/policy_constants.h" 21 #include "chrome/common/policy_constants.h"
22 22
23 using base::win::RegKey;
24
23 namespace policy { 25 namespace policy {
24 26
27 namespace {
28
29 bool ReadRegistryStringValue(RegKey* key, const string16& name,
30 string16* result) {
31 DWORD value_size = 0;
32 DWORD key_type = 0;
33 scoped_array<uint8> buffer;
34
35 if (!key->ReadValue(name.c_str(), 0, &value_size, &key_type))
36 return false;
37 if (key_type != REG_SZ)
38 return false;
39
40 // According to the Microsoft documentation, the string
41 // buffer may not be explicitly 0-terminated. Allocate a
42 // slightly larger buffer and pre-fill to zeros to guarantee
43 // the 0-termination.
44 buffer.reset(new uint8[value_size + 2]);
45 memset(buffer.get(), 0, value_size + 2);
46 key->ReadValue(name.c_str(), buffer.get(), &value_size, NULL);
47 result->assign(reinterpret_cast<const wchar_t*>(buffer.get()));
48 return true;
49 }
50
51 } // namespace
52
25 // Period at which to run the reload task in case the group policy change 53 // Period at which to run the reload task in case the group policy change
26 // watchers fail. 54 // watchers fail.
27 const int kReloadIntervalMinutes = 15; 55 const int kReloadIntervalMinutes = 15;
28 56
29 ConfigurationPolicyProviderWin::GroupPolicyChangeWatcher:: 57 ConfigurationPolicyProviderWin::GroupPolicyChangeWatcher::
30 GroupPolicyChangeWatcher( 58 GroupPolicyChangeWatcher(
31 base::WeakPtr<ConfigurationPolicyProviderWin> provider, 59 base::WeakPtr<ConfigurationPolicyProviderWin> provider,
32 int reload_interval_minutes) 60 int reload_interval_minutes)
33 : provider_(provider), 61 : provider_(provider),
34 user_policy_changed_event_(false, false), 62 user_policy_changed_event_(false, false),
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 if (ReadRegistryStringValue(&policy_key, name, result)) 176 if (ReadRegistryStringValue(&policy_key, name, result))
149 return true; 177 return true;
150 policy_key.Close(); 178 policy_key.Close();
151 } 179 }
152 // Fall back on user-specific policy. 180 // Fall back on user-specific policy.
153 if (!policy_key.Open(HKEY_CURRENT_USER, path.c_str(), KEY_READ)) 181 if (!policy_key.Open(HKEY_CURRENT_USER, path.c_str(), KEY_READ))
154 return false; 182 return false;
155 return ReadRegistryStringValue(&policy_key, name, result); 183 return ReadRegistryStringValue(&policy_key, name, result);
156 } 184 }
157 185
158 bool ConfigurationPolicyProviderWin::ReadRegistryStringValue(
159 RegKey* key, const string16& name, string16* result) {
160 DWORD value_size = 0;
161 DWORD key_type = 0;
162 scoped_array<uint8> buffer;
163
164 if (!key->ReadValue(name.c_str(), 0, &value_size, &key_type))
165 return false;
166 if (key_type != REG_SZ)
167 return false;
168
169 // According to the Microsoft documentation, the string
170 // buffer may not be explicitly 0-terminated. Allocate a
171 // slightly larger buffer and pre-fill to zeros to guarantee
172 // the 0-termination.
173 buffer.reset(new uint8[value_size + 2]);
174 memset(buffer.get(), 0, value_size + 2);
175 key->ReadValue(name.c_str(), buffer.get(), &value_size, NULL);
176 result->assign(reinterpret_cast<const wchar_t*>(buffer.get()));
177 return true;
178 }
179
180 bool ConfigurationPolicyProviderWin::GetRegistryPolicyStringList( 186 bool ConfigurationPolicyProviderWin::GetRegistryPolicyStringList(
181 const string16& key, ListValue* result) { 187 const string16& key, ListValue* result) {
182 string16 path = string16(kRegistrySubKey); 188 string16 path = string16(kRegistrySubKey);
183 path += ASCIIToUTF16("\\") + key; 189 path += ASCIIToUTF16("\\") + key;
184 RegKey policy_key; 190 RegKey policy_key;
185 if (!policy_key.Open(HKEY_LOCAL_MACHINE, path.c_str(), KEY_READ)) { 191 if (!policy_key.Open(HKEY_LOCAL_MACHINE, path.c_str(), KEY_READ)) {
186 policy_key.Close(); 192 policy_key.Close();
187 // Fall back on user-specific policy. 193 // Fall back on user-specific policy.
188 if (!policy_key.Open(HKEY_CURRENT_USER, path.c_str(), KEY_READ)) 194 if (!policy_key.Open(HKEY_CURRENT_USER, path.c_str(), KEY_READ))
189 return false; 195 return false;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 default: 277 default:
272 NOTREACHED(); 278 NOTREACHED();
273 return false; 279 return false;
274 } 280 }
275 } 281 }
276 282
277 return true; 283 return true;
278 } 284 }
279 285
280 } // namespace policy 286 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698