xref: /aosp_15_r20/external/cronet/base/win/startup_information.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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 
StartupInformation()12 StartupInformation::StartupInformation() : startup_info_() {
13   startup_info_.StartupInfo.cb = sizeof(startup_info_);
14 }
15 
~StartupInformation()16 StartupInformation::~StartupInformation() {
17   if (startup_info_.lpAttributeList) {
18     ::DeleteProcThreadAttributeList(startup_info_.lpAttributeList);
19   }
20 }
21 
InitializeProcThreadAttributeList(DWORD attribute_count)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 
UpdateProcThreadAttribute(DWORD_PTR attribute,void * value,size_t size)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
60