| Index: cloud_print/service/win/service_controller.cc
|
| diff --git a/cloud_print/service/win/service_controller.cc b/cloud_print/service/win/service_controller.cc
|
| index 4b5d1485ea0cdc23a18a3f0de01729a0795e45f4..0c269b990bcdbca97726d8f22f8bfaad21fc1bc0 100644
|
| --- a/cloud_print/service/win/service_controller.cc
|
| +++ b/cloud_print/service/win/service_controller.cc
|
| @@ -71,7 +71,7 @@ HRESULT OpenService(const base::string16& name, DWORD access,
|
| if (FAILED(hr))
|
| return hr;
|
|
|
| - service->Set(::OpenService(scm, name.c_str(), access));
|
| + service->Set(::OpenService(scm.Get(), name.c_str(), access));
|
|
|
| if (!service->IsValid())
|
| return cloud_print::GetLastHResult();
|
| @@ -95,10 +95,10 @@ HRESULT ServiceController::StartService() {
|
| &service);
|
| if (FAILED(hr))
|
| return hr;
|
| - if (!::StartService(service, 0, NULL))
|
| + if (!::StartService(service.Get(), 0, NULL))
|
| return cloud_print::GetLastHResult();
|
| SERVICE_STATUS status = {0};
|
| - while (::QueryServiceStatus(service, &status) &&
|
| + while (::QueryServiceStatus(service.Get(), &status) &&
|
| status.dwCurrentState == SERVICE_START_PENDING) {
|
| Sleep(100);
|
| }
|
| @@ -112,12 +112,12 @@ HRESULT ServiceController::StopService() {
|
| if (FAILED(hr))
|
| return hr;
|
| SERVICE_STATUS status = {0};
|
| - if (!::ControlService(service, SERVICE_CONTROL_STOP, &status))
|
| + if (!::ControlService(service.Get(), SERVICE_CONTROL_STOP, &status))
|
| return cloud_print::GetLastHResult();
|
| - while (::QueryServiceStatus(service, &status) &&
|
| + while (::QueryServiceStatus(service.Get(), &status) &&
|
| status.dwCurrentState > SERVICE_STOPPED) {
|
| Sleep(500);
|
| - ::ControlService(service, SERVICE_CONTROL_STOP, &status);
|
| + ::ControlService(service.Get(), SERVICE_CONTROL_STOP, &status);
|
| }
|
| return S_OK;
|
| }
|
| @@ -197,7 +197,7 @@ HRESULT ServiceController::InstallService(const base::string16& user,
|
| cloud_print::LoadLocalString(IDS_SERVICE_DISPLAY_NAME);
|
| ServiceHandle service(
|
| ::CreateService(
|
| - scm, name_.c_str(), display_name.c_str(), SERVICE_ALL_ACCESS,
|
| + scm.Get(), name_.c_str(), display_name.c_str(), SERVICE_ALL_ACCESS,
|
| SERVICE_WIN32_OWN_PROCESS,
|
| auto_start ? SERVICE_AUTO_START : SERVICE_DEMAND_START,
|
| SERVICE_ERROR_NORMAL, command_line.GetCommandLineString().c_str(),
|
| @@ -213,7 +213,8 @@ HRESULT ServiceController::InstallService(const base::string16& user,
|
| cloud_print::LoadLocalString(IDS_SERVICE_DESCRIPTION);
|
| SERVICE_DESCRIPTION description = {0};
|
| description.lpDescription = const_cast<wchar_t*>(description_string.c_str());
|
| - ::ChangeServiceConfig2(service, SERVICE_CONFIG_DESCRIPTION, &description);
|
| + ::ChangeServiceConfig2(service.Get(), SERVICE_CONFIG_DESCRIPTION,
|
| + &description);
|
|
|
| return S_OK;
|
| }
|
| @@ -224,8 +225,8 @@ HRESULT ServiceController::UninstallService() {
|
| ServiceHandle service;
|
| OpenService(name_, SERVICE_STOP | DELETE, &service);
|
| HRESULT hr = S_FALSE;
|
| - if (service) {
|
| - if (!::DeleteService(service)) {
|
| + if (service.IsValid()) {
|
| + if (!::DeleteService(service.Get())) {
|
| LOG(ERROR) << "Failed to uninstall service";
|
| hr = cloud_print::GetLastHResult();
|
| }
|
| @@ -250,8 +251,8 @@ HRESULT ServiceController::UpdateBinaryPath() {
|
| return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
|
|
|
| command_line_.SetProgram(service_path);
|
| - if (!::ChangeServiceConfig(service, SERVICE_NO_CHANGE, SERVICE_NO_CHANGE,
|
| - SERVICE_NO_CHANGE,
|
| + if (!::ChangeServiceConfig(service.Get(), SERVICE_NO_CHANGE,
|
| + SERVICE_NO_CHANGE, SERVICE_NO_CHANGE,
|
| command_line_.GetCommandLineString().c_str(), NULL,
|
| NULL, NULL, NULL, NULL, NULL)) {
|
| return cloud_print::GetLastHResult();
|
| @@ -284,20 +285,21 @@ void ServiceController::UpdateState() {
|
|
|
| state_ = STATE_STOPPED;
|
| SERVICE_STATUS status = {0};
|
| - if (::QueryServiceStatus(service, &status) &&
|
| + if (::QueryServiceStatus(service.Get(), &status) &&
|
| status.dwCurrentState == SERVICE_RUNNING) {
|
| state_ = STATE_RUNNING;
|
| }
|
|
|
| DWORD config_size = 0;
|
| - ::QueryServiceConfig(service, NULL, 0, &config_size);
|
| + ::QueryServiceConfig(service.Get(), NULL, 0, &config_size);
|
| if (!config_size)
|
| return;
|
|
|
| std::vector<uint8> buffer(config_size, 0);
|
| QUERY_SERVICE_CONFIG* config =
|
| reinterpret_cast<QUERY_SERVICE_CONFIG*>(&buffer[0]);
|
| - if (!::QueryServiceConfig(service, config, buffer.size(), &config_size) ||
|
| + if (!::QueryServiceConfig(service.Get(), config, buffer.size(),
|
| + &config_size) ||
|
| config_size != buffer.size()) {
|
| return;
|
| }
|
|
|