tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

startup_information.cc (1799B)


      1 // Copyright 2012 The Chromium Authors
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/win/startup_information.h"
      6 
      7 #include <utility>
      8 
      9 namespace base {
     10 namespace win {
     11 
     12 StartupInformation::StartupInformation() : startup_info_() {
     13  startup_info_.StartupInfo.cb = sizeof(startup_info_);
     14 }
     15 
     16 StartupInformation::~StartupInformation() {
     17  if (startup_info_.lpAttributeList) {
     18    ::DeleteProcThreadAttributeList(startup_info_.lpAttributeList);
     19  }
     20 }
     21 
     22 bool StartupInformation::InitializeProcThreadAttributeList(
     23    DWORD attribute_count) {
     24  if (startup_info_.StartupInfo.cb != sizeof(startup_info_) ||
     25      startup_info_.lpAttributeList) {
     26    return false;
     27  }
     28 
     29  SIZE_T size = 0;
     30  ::InitializeProcThreadAttributeList(nullptr, attribute_count, 0, &size);
     31  if (size == 0)
     32    return false;
     33 
     34  auto attribute_list = std::make_unique<char[]>(size);
     35  auto* attribute_list_ptr =
     36      reinterpret_cast<LPPROC_THREAD_ATTRIBUTE_LIST>(attribute_list.get());
     37  if (!::InitializeProcThreadAttributeList(attribute_list_ptr, attribute_count,
     38                                           0, &size)) {
     39    return false;
     40  }
     41 
     42  attribute_list_ = std::move(attribute_list);
     43  startup_info_.lpAttributeList = attribute_list_ptr;
     44 
     45  return true;
     46 }
     47 
     48 bool StartupInformation::UpdateProcThreadAttribute(DWORD_PTR attribute,
     49                                                   void* value,
     50                                                   size_t size) {
     51  if (!startup_info_.lpAttributeList)
     52    return false;
     53  return !!::UpdateProcThreadAttribute(startup_info_.lpAttributeList, 0,
     54                                       attribute, value, size, nullptr,
     55                                       nullptr);
     56 }
     57 
     58 }  // namespace win
     59 }  // namespace base