// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_WIN_STARTUP_INFORMATION_H_ #define BASE_WIN_STARTUP_INFORMATION_H_ #include #include #include #include "base/base_export.h" namespace base { namespace win { // Manages the lifetime of additional attributes in STARTUPINFOEX. class BASE_EXPORT StartupInformation { public: StartupInformation(); StartupInformation(const StartupInformation&) = delete; StartupInformation& operator=(const StartupInformation&) = delete; ~StartupInformation(); // Initialize the attribute list for the specified number of entries. bool InitializeProcThreadAttributeList(DWORD attribute_count); // Sets one entry in the initialized attribute list. // |value| needs to live at least as long as the StartupInformation object // this is called on. bool UpdateProcThreadAttribute(DWORD_PTR attribute, void* value, size_t size); LPSTARTUPINFOW startup_info() { return &startup_info_.StartupInfo; } LPSTARTUPINFOW startup_info() const { return const_cast(&startup_info_.StartupInfo); } bool has_extended_startup_info() const { return !!startup_info_.lpAttributeList; } private: std::unique_ptr attribute_list_; STARTUPINFOEXW startup_info_; }; } // namespace win } // namespace base #endif // BASE_WIN_STARTUP_INFORMATION_H_