xref: /aosp_15_r20/external/cronet/base/win/startup_information.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_WIN_STARTUP_INFORMATION_H_
6*6777b538SAndroid Build Coastguard Worker #define BASE_WIN_STARTUP_INFORMATION_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <windows.h>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include <stddef.h>
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker #include <memory>
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h"
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker namespace base {
17*6777b538SAndroid Build Coastguard Worker namespace win {
18*6777b538SAndroid Build Coastguard Worker 
19*6777b538SAndroid Build Coastguard Worker // Manages the lifetime of additional attributes in STARTUPINFOEX.
20*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT StartupInformation {
21*6777b538SAndroid Build Coastguard Worker  public:
22*6777b538SAndroid Build Coastguard Worker   StartupInformation();
23*6777b538SAndroid Build Coastguard Worker 
24*6777b538SAndroid Build Coastguard Worker   StartupInformation(const StartupInformation&) = delete;
25*6777b538SAndroid Build Coastguard Worker   StartupInformation& operator=(const StartupInformation&) = delete;
26*6777b538SAndroid Build Coastguard Worker 
27*6777b538SAndroid Build Coastguard Worker   ~StartupInformation();
28*6777b538SAndroid Build Coastguard Worker 
29*6777b538SAndroid Build Coastguard Worker   // Initialize the attribute list for the specified number of entries.
30*6777b538SAndroid Build Coastguard Worker   bool InitializeProcThreadAttributeList(DWORD attribute_count);
31*6777b538SAndroid Build Coastguard Worker 
32*6777b538SAndroid Build Coastguard Worker   // Sets one entry in the initialized attribute list.
33*6777b538SAndroid Build Coastguard Worker   // |value| needs to live at least as long as the StartupInformation object
34*6777b538SAndroid Build Coastguard Worker   // this is called on.
35*6777b538SAndroid Build Coastguard Worker   bool UpdateProcThreadAttribute(DWORD_PTR attribute, void* value, size_t size);
36*6777b538SAndroid Build Coastguard Worker 
startup_info()37*6777b538SAndroid Build Coastguard Worker   LPSTARTUPINFOW startup_info() { return &startup_info_.StartupInfo; }
startup_info()38*6777b538SAndroid Build Coastguard Worker   LPSTARTUPINFOW startup_info() const {
39*6777b538SAndroid Build Coastguard Worker     return const_cast<const LPSTARTUPINFOW>(&startup_info_.StartupInfo);
40*6777b538SAndroid Build Coastguard Worker   }
41*6777b538SAndroid Build Coastguard Worker 
has_extended_startup_info()42*6777b538SAndroid Build Coastguard Worker   bool has_extended_startup_info() const {
43*6777b538SAndroid Build Coastguard Worker     return !!startup_info_.lpAttributeList;
44*6777b538SAndroid Build Coastguard Worker   }
45*6777b538SAndroid Build Coastguard Worker 
46*6777b538SAndroid Build Coastguard Worker  private:
47*6777b538SAndroid Build Coastguard Worker   std::unique_ptr<char[]> attribute_list_;
48*6777b538SAndroid Build Coastguard Worker   STARTUPINFOEXW startup_info_;
49*6777b538SAndroid Build Coastguard Worker };
50*6777b538SAndroid Build Coastguard Worker 
51*6777b538SAndroid Build Coastguard Worker }  // namespace win
52*6777b538SAndroid Build Coastguard Worker }  // namespace base
53*6777b538SAndroid Build Coastguard Worker 
54*6777b538SAndroid Build Coastguard Worker #endif  // BASE_WIN_STARTUP_INFORMATION_H_
55