mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2025-02-26 20:03:26 +03:00
60 lines
1.8 KiB
C++
60 lines
1.8 KiB
C++
// Copyright 2012 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "base/win/startup_information.h"
|
|
|
|
#include <utility>
|
|
|
|
namespace base {
|
|
namespace win {
|
|
|
|
StartupInformation::StartupInformation() : startup_info_() {
|
|
startup_info_.StartupInfo.cb = sizeof(startup_info_);
|
|
}
|
|
|
|
StartupInformation::~StartupInformation() {
|
|
if (startup_info_.lpAttributeList) {
|
|
::DeleteProcThreadAttributeList(startup_info_.lpAttributeList);
|
|
}
|
|
}
|
|
|
|
bool StartupInformation::InitializeProcThreadAttributeList(
|
|
DWORD attribute_count) {
|
|
if (startup_info_.StartupInfo.cb != sizeof(startup_info_) ||
|
|
startup_info_.lpAttributeList) {
|
|
return false;
|
|
}
|
|
|
|
SIZE_T size = 0;
|
|
::InitializeProcThreadAttributeList(nullptr, attribute_count, 0, &size);
|
|
if (size == 0)
|
|
return false;
|
|
|
|
auto attribute_list = std::make_unique<char[]>(size);
|
|
auto* attribute_list_ptr =
|
|
reinterpret_cast<LPPROC_THREAD_ATTRIBUTE_LIST>(attribute_list.get());
|
|
if (!::InitializeProcThreadAttributeList(attribute_list_ptr, attribute_count,
|
|
0, &size)) {
|
|
return false;
|
|
}
|
|
|
|
attribute_list_ = std::move(attribute_list);
|
|
startup_info_.lpAttributeList = attribute_list_ptr;
|
|
|
|
return true;
|
|
}
|
|
|
|
bool StartupInformation::UpdateProcThreadAttribute(DWORD_PTR attribute,
|
|
void* value,
|
|
size_t size) {
|
|
if (!startup_info_.lpAttributeList)
|
|
return false;
|
|
return !!::UpdateProcThreadAttribute(startup_info_.lpAttributeList, 0,
|
|
attribute, value, size, nullptr,
|
|
nullptr);
|
|
}
|
|
|
|
} // namespace win
|
|
} // namespace base
|