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

Side by Side Diff: remoting/host/win/elevated_controller.cc

Issue 602763003: Remove implicit HANDLE conversions from remoting. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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
« no previous file with comments | « remoting/host/win/chromoting_module.cc ('k') | remoting/host/win/launch_process_with_token.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/win/elevated_controller.h" 5 #include "remoting/host/win/elevated_controller.h"
6 6
7 #include "base/file_version_info.h" 7 #include "base/file_version_info.h"
8 #include "base/files/file_util.h" 8 #include "base/files/file_util.h"
9 #include "base/json/json_reader.h" 9 #include "base/json/json_reader.h"
10 #include "base/json/json_writer.h" 10 #include "base/json/json_writer.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 NULL)); 107 NULL));
108 108
109 if (!file.IsValid()) { 109 if (!file.IsValid()) {
110 DWORD error = GetLastError(); 110 DWORD error = GetLastError();
111 PLOG(ERROR) << "Failed to open '" << filename.value() << "'"; 111 PLOG(ERROR) << "Failed to open '" << filename.value() << "'";
112 return HRESULT_FROM_WIN32(error); 112 return HRESULT_FROM_WIN32(error);
113 } 113 }
114 114
115 scoped_ptr<char[]> buffer(new char[kMaxConfigFileSize]); 115 scoped_ptr<char[]> buffer(new char[kMaxConfigFileSize]);
116 DWORD size = kMaxConfigFileSize; 116 DWORD size = kMaxConfigFileSize;
117 if (!::ReadFile(file, &buffer[0], size, &size, NULL)) { 117 if (!::ReadFile(file.Get(), &buffer[0], size, &size, NULL)) {
118 DWORD error = GetLastError(); 118 DWORD error = GetLastError();
119 PLOG(ERROR) << "Failed to read '" << filename.value() << "'"; 119 PLOG(ERROR) << "Failed to read '" << filename.value() << "'";
120 return HRESULT_FROM_WIN32(error); 120 return HRESULT_FROM_WIN32(error);
121 } 121 }
122 122
123 // Parse the JSON configuration, expecting it to contain a dictionary. 123 // Parse the JSON configuration, expecting it to contain a dictionary.
124 std::string file_content(buffer.get(), size); 124 std::string file_content(buffer.get(), size);
125 scoped_ptr<base::Value> value( 125 scoped_ptr<base::Value> value(
126 base::JSONReader::Read(file_content, base::JSON_ALLOW_TRAILING_COMMAS)); 126 base::JSONReader::Read(file_content, base::JSON_ALLOW_TRAILING_COMMAS));
127 127
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 FILE_FLAG_SEQUENTIAL_SCAN, 170 FILE_FLAG_SEQUENTIAL_SCAN,
171 NULL)); 171 NULL));
172 172
173 if (!file.IsValid()) { 173 if (!file.IsValid()) {
174 DWORD error = GetLastError(); 174 DWORD error = GetLastError();
175 PLOG(ERROR) << "Failed to create '" << filename.value() << "'"; 175 PLOG(ERROR) << "Failed to create '" << filename.value() << "'";
176 return HRESULT_FROM_WIN32(error); 176 return HRESULT_FROM_WIN32(error);
177 } 177 }
178 178
179 DWORD written; 179 DWORD written;
180 if (!WriteFile(file, content, static_cast<DWORD>(length), &written, NULL)) { 180 if (!WriteFile(file.Get(), content, static_cast<DWORD>(length), &written,
181 NULL)) {
181 DWORD error = GetLastError(); 182 DWORD error = GetLastError();
182 PLOG(ERROR) << "Failed to write to '" << filename.value() << "'"; 183 PLOG(ERROR) << "Failed to write to '" << filename.value() << "'";
183 return HRESULT_FROM_WIN32(error); 184 return HRESULT_FROM_WIN32(error);
184 } 185 }
185 186
186 return S_OK; 187 return S_OK;
187 } 188 }
188 189
189 // Moves a config file from its temporary location to its permanent location. 190 // Moves a config file from its temporary location to its permanent location.
190 HRESULT MoveConfigFileFromTemp(const base::FilePath& filename) { 191 HRESULT MoveConfigFileFromTemp(const base::FilePath& filename) {
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 } 366 }
366 367
367 STDMETHODIMP ElevatedController::StartDaemon() { 368 STDMETHODIMP ElevatedController::StartDaemon() {
368 ScopedScHandle service; 369 ScopedScHandle service;
369 HRESULT hr = OpenService(&service); 370 HRESULT hr = OpenService(&service);
370 if (FAILED(hr)) { 371 if (FAILED(hr)) {
371 return hr; 372 return hr;
372 } 373 }
373 374
374 // Change the service start type to 'auto'. 375 // Change the service start type to 'auto'.
375 if (!::ChangeServiceConfigW(service, 376 if (!::ChangeServiceConfigW(service.Get(),
376 SERVICE_NO_CHANGE, 377 SERVICE_NO_CHANGE,
377 SERVICE_AUTO_START, 378 SERVICE_AUTO_START,
378 SERVICE_NO_CHANGE, 379 SERVICE_NO_CHANGE,
379 NULL, 380 NULL,
380 NULL, 381 NULL,
381 NULL, 382 NULL,
382 NULL, 383 NULL,
383 NULL, 384 NULL,
384 NULL, 385 NULL,
385 NULL)) { 386 NULL)) {
386 DWORD error = GetLastError(); 387 DWORD error = GetLastError();
387 PLOG(ERROR) << "Failed to change the '" << kWindowsServiceName 388 PLOG(ERROR) << "Failed to change the '" << kWindowsServiceName
388 << "'service start type to 'auto'"; 389 << "'service start type to 'auto'";
389 return HRESULT_FROM_WIN32(error); 390 return HRESULT_FROM_WIN32(error);
390 } 391 }
391 392
392 // Start the service. 393 // Start the service.
393 if (!StartService(service, 0, NULL)) { 394 if (!StartService(service.Get(), 0, NULL)) {
394 DWORD error = GetLastError(); 395 DWORD error = GetLastError();
395 if (error != ERROR_SERVICE_ALREADY_RUNNING) { 396 if (error != ERROR_SERVICE_ALREADY_RUNNING) {
396 PLOG(ERROR) << "Failed to start the '" << kWindowsServiceName 397 PLOG(ERROR) << "Failed to start the '" << kWindowsServiceName
397 << "'service"; 398 << "'service";
398 399
399 return HRESULT_FROM_WIN32(error); 400 return HRESULT_FROM_WIN32(error);
400 } 401 }
401 } 402 }
402 403
403 return S_OK; 404 return S_OK;
404 } 405 }
405 406
406 STDMETHODIMP ElevatedController::StopDaemon() { 407 STDMETHODIMP ElevatedController::StopDaemon() {
407 ScopedScHandle service; 408 ScopedScHandle service;
408 HRESULT hr = OpenService(&service); 409 HRESULT hr = OpenService(&service);
409 if (FAILED(hr)) { 410 if (FAILED(hr)) {
410 return hr; 411 return hr;
411 } 412 }
412 413
413 // Change the service start type to 'manual'. 414 // Change the service start type to 'manual'.
414 if (!::ChangeServiceConfigW(service, 415 if (!::ChangeServiceConfigW(service.Get(),
415 SERVICE_NO_CHANGE, 416 SERVICE_NO_CHANGE,
416 SERVICE_DEMAND_START, 417 SERVICE_DEMAND_START,
417 SERVICE_NO_CHANGE, 418 SERVICE_NO_CHANGE,
418 NULL, 419 NULL,
419 NULL, 420 NULL,
420 NULL, 421 NULL,
421 NULL, 422 NULL,
422 NULL, 423 NULL,
423 NULL, 424 NULL,
424 NULL)) { 425 NULL)) {
425 DWORD error = GetLastError(); 426 DWORD error = GetLastError();
426 PLOG(ERROR) << "Failed to change the '" << kWindowsServiceName 427 PLOG(ERROR) << "Failed to change the '" << kWindowsServiceName
427 << "'service start type to 'manual'"; 428 << "'service start type to 'manual'";
428 return HRESULT_FROM_WIN32(error); 429 return HRESULT_FROM_WIN32(error);
429 } 430 }
430 431
431 // Stop the service. 432 // Stop the service.
432 SERVICE_STATUS status; 433 SERVICE_STATUS status;
433 if (!ControlService(service, SERVICE_CONTROL_STOP, &status)) { 434 if (!ControlService(service.Get(), SERVICE_CONTROL_STOP, &status)) {
434 DWORD error = GetLastError(); 435 DWORD error = GetLastError();
435 if (error != ERROR_SERVICE_NOT_ACTIVE) { 436 if (error != ERROR_SERVICE_NOT_ACTIVE) {
436 PLOG(ERROR) << "Failed to stop the '" << kWindowsServiceName 437 PLOG(ERROR) << "Failed to stop the '" << kWindowsServiceName
437 << "'service"; 438 << "'service";
438 return HRESULT_FROM_WIN32(error); 439 return HRESULT_FROM_WIN32(error);
439 } 440 }
440 } 441 }
441 442
442 return S_OK; 443 return S_OK;
443 } 444 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 if (!scmanager.IsValid()) { 507 if (!scmanager.IsValid()) {
507 error = GetLastError(); 508 error = GetLastError();
508 PLOG(ERROR) << "Failed to connect to the service control manager"; 509 PLOG(ERROR) << "Failed to connect to the service control manager";
509 510
510 return HRESULT_FROM_WIN32(error); 511 return HRESULT_FROM_WIN32(error);
511 } 512 }
512 513
513 DWORD desired_access = SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | 514 DWORD desired_access = SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS |
514 SERVICE_START | SERVICE_STOP; 515 SERVICE_START | SERVICE_STOP;
515 ScopedScHandle service( 516 ScopedScHandle service(
516 ::OpenServiceW(scmanager, kWindowsServiceName, desired_access)); 517 ::OpenServiceW(scmanager.Get(), kWindowsServiceName, desired_access));
517 if (!service.IsValid()) { 518 if (!service.IsValid()) {
518 error = GetLastError(); 519 error = GetLastError();
519 PLOG(ERROR) << "Failed to open to the '" << kWindowsServiceName 520 PLOG(ERROR) << "Failed to open to the '" << kWindowsServiceName
520 << "' service"; 521 << "' service";
521 522
522 return HRESULT_FROM_WIN32(error); 523 return HRESULT_FROM_WIN32(error);
523 } 524 }
524 525
525 service_out->Set(service.Take()); 526 service_out->Set(service.Take());
526 return S_OK; 527 return S_OK;
527 } 528 }
528 529
529 } // namespace remoting 530 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/win/chromoting_module.cc ('k') | remoting/host/win/launch_process_with_token.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698