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 "remoting/host/daemon_process.h" | 5 #include "remoting/host/daemon_process.h" |
6 | 6 |
7 #include "base/base_switches.h" | 7 #include "base/base_switches.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 } | 157 } |
158 | 158 |
159 bool DaemonProcessWin::OnDesktopSessionAgentAttached( | 159 bool DaemonProcessWin::OnDesktopSessionAgentAttached( |
160 int terminal_id, | 160 int terminal_id, |
161 base::ProcessHandle desktop_process, | 161 base::ProcessHandle desktop_process, |
162 IPC::PlatformFileForTransit desktop_pipe) { | 162 IPC::PlatformFileForTransit desktop_pipe) { |
163 // Prepare |desktop_process| handle for sending over to the network process. | 163 // Prepare |desktop_process| handle for sending over to the network process. |
164 base::ProcessHandle desktop_process_for_transit; | 164 base::ProcessHandle desktop_process_for_transit; |
165 if (!DuplicateHandle(GetCurrentProcess(), | 165 if (!DuplicateHandle(GetCurrentProcess(), |
166 desktop_process, | 166 desktop_process, |
167 network_process_, | 167 network_process_.Get(), |
168 &desktop_process_for_transit, | 168 &desktop_process_for_transit, |
169 0, | 169 0, |
170 FALSE, | 170 FALSE, |
171 DUPLICATE_SAME_ACCESS)) { | 171 DUPLICATE_SAME_ACCESS)) { |
172 PLOG(ERROR) << "Failed to duplicate the desktop process handle"; | 172 PLOG(ERROR) << "Failed to duplicate the desktop process handle"; |
173 return false; | 173 return false; |
174 } | 174 } |
175 | 175 |
176 // |desktop_pipe| is a handle in the desktop process. It will be duplicated | 176 // |desktop_pipe| is a handle in the desktop process. It will be duplicated |
177 // by the network process directly from the desktop process. | 177 // by the network process directly from the desktop process. |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 ScopedScHandle scmanager( | 240 ScopedScHandle scmanager( |
241 OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, | 241 OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, |
242 SC_MANAGER_CONNECT | SC_MANAGER_ENUMERATE_SERVICE)); | 242 SC_MANAGER_CONNECT | SC_MANAGER_ENUMERATE_SERVICE)); |
243 if (!scmanager.IsValid()) { | 243 if (!scmanager.IsValid()) { |
244 PLOG(INFO) << "Failed to connect to the service control manager"; | 244 PLOG(INFO) << "Failed to connect to the service control manager"; |
245 return; | 245 return; |
246 } | 246 } |
247 | 247 |
248 DWORD desired_access = SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS; | 248 DWORD desired_access = SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS; |
249 ScopedScHandle service( | 249 ScopedScHandle service( |
250 OpenService(scmanager, kWindowsServiceName, desired_access)); | 250 OpenService(scmanager.Get(), kWindowsServiceName, desired_access)); |
251 if (!service.IsValid()) { | 251 if (!service.IsValid()) { |
252 PLOG(INFO) << "Failed to open to the '" << kWindowsServiceName | 252 PLOG(INFO) << "Failed to open to the '" << kWindowsServiceName |
253 << "' service"; | 253 << "' service"; |
254 return; | 254 return; |
255 } | 255 } |
256 | 256 |
257 // Change the service start type to 'manual'. All |NULL| parameters below mean | 257 // Change the service start type to 'manual'. All |NULL| parameters below mean |
258 // that there is no change to the corresponding service parameter. | 258 // that there is no change to the corresponding service parameter. |
259 if (!ChangeServiceConfig(service, | 259 if (!ChangeServiceConfig(service.Get(), |
260 SERVICE_NO_CHANGE, | 260 SERVICE_NO_CHANGE, |
261 SERVICE_DEMAND_START, | 261 SERVICE_DEMAND_START, |
262 SERVICE_NO_CHANGE, | 262 SERVICE_NO_CHANGE, |
263 NULL, | 263 NULL, |
264 NULL, | 264 NULL, |
265 NULL, | 265 NULL, |
266 NULL, | 266 NULL, |
267 NULL, | 267 NULL, |
268 NULL, | 268 NULL, |
269 NULL)) { | 269 NULL)) { |
270 PLOG(INFO) << "Failed to change the '" << kWindowsServiceName | 270 PLOG(INFO) << "Failed to change the '" << kWindowsServiceName |
271 << "'service start type to 'manual'"; | 271 << "'service start type to 'manual'"; |
272 } | 272 } |
273 } | 273 } |
274 | 274 |
275 bool DaemonProcessWin::InitializePairingRegistry() { | 275 bool DaemonProcessWin::InitializePairingRegistry() { |
276 if (!pairing_registry_privileged_key_.Valid()) { | 276 if (!pairing_registry_privileged_key_.Valid()) { |
277 if (!OpenPairingRegistry()) | 277 if (!OpenPairingRegistry()) |
278 return false; | 278 return false; |
279 } | 279 } |
280 | 280 |
281 // Duplicate handles to the network process. | 281 // Duplicate handles to the network process. |
282 IPC::PlatformFileForTransit privileged_key = GetRegistryKeyForTransit( | 282 IPC::PlatformFileForTransit privileged_key = GetRegistryKeyForTransit( |
283 network_process_, pairing_registry_privileged_key_); | 283 network_process_.Get(), pairing_registry_privileged_key_); |
284 IPC::PlatformFileForTransit unprivileged_key = GetRegistryKeyForTransit( | 284 IPC::PlatformFileForTransit unprivileged_key = GetRegistryKeyForTransit( |
285 network_process_, pairing_registry_unprivileged_key_); | 285 network_process_.Get(), pairing_registry_unprivileged_key_); |
286 if (!(privileged_key && unprivileged_key)) | 286 if (!(privileged_key && unprivileged_key)) |
287 return false; | 287 return false; |
288 | 288 |
289 // Initialize the pairing registry in the network process. This has to be done | 289 // Initialize the pairing registry in the network process. This has to be done |
290 // before the host configuration is sent, otherwise the host will not use | 290 // before the host configuration is sent, otherwise the host will not use |
291 // the passed handles. | 291 // the passed handles. |
292 SendToNetwork(new ChromotingDaemonNetworkMsg_InitializePairingRegistry( | 292 SendToNetwork(new ChromotingDaemonNetworkMsg_InitializePairingRegistry( |
293 privileged_key, unprivileged_key)); | 293 privileged_key, unprivileged_key)); |
294 return true; | 294 return true; |
295 } | 295 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 << "\\" << kPairingRegistrySecretsKeyName; | 327 << "\\" << kPairingRegistrySecretsKeyName; |
328 return false; | 328 return false; |
329 } | 329 } |
330 | 330 |
331 pairing_registry_privileged_key_.Set(privileged.Take()); | 331 pairing_registry_privileged_key_.Set(privileged.Take()); |
332 pairing_registry_unprivileged_key_.Set(unprivileged.Take()); | 332 pairing_registry_unprivileged_key_.Set(unprivileged.Take()); |
333 return true; | 333 return true; |
334 } | 334 } |
335 | 335 |
336 } // namespace remoting | 336 } // namespace remoting |
OLD | NEW |