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