diff --git a/src/cascadia/TerminalConnection/ConptyConnection.cpp b/src/cascadia/TerminalConnection/ConptyConnection.cpp index acde96d3de5..b4e5978440b 100644 --- a/src/cascadia/TerminalConnection/ConptyConnection.cpp +++ b/src/cascadia/TerminalConnection/ConptyConnection.cpp @@ -5,7 +5,6 @@ #include "ConptyConnection.h" -#include #include #include "ConptyConnection.g.cpp" @@ -99,11 +98,8 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation environment.clear(); }); - { - const auto newEnvironmentBlock{ Utils::CreateEnvironmentBlock() }; - // Populate the environment map with the current environment. - RETURN_IF_FAILED(Utils::UpdateEnvironmentMapW(environment, newEnvironmentBlock.get())); - } + // Populate the environment map with the current environment. + RETURN_IF_FAILED(Utils::UpdateEnvironmentMapW(environment)); { // Convert connection Guid to string and ignore the enclosing '{}'. diff --git a/src/types/Environment.cpp b/src/types/Environment.cpp index 962297ace2c..106503d8404 100644 --- a/src/types/Environment.cpp +++ b/src/types/Environment.cpp @@ -3,50 +3,36 @@ #include "precomp.h" #include "inc/Environment.hpp" -#include "wil/token_helpers.h" using namespace ::Microsoft::Console::Utils; // We cannot use spand or not_null because we're dealing with \0\0-terminated buffers of unknown length #pragma warning(disable : 26481 26429) -// Function Description: -// - Wraps win32's CreateEnvironmentBlock to return a smart pointer. -EnvironmentBlockPtr Microsoft::Console::Utils::CreateEnvironmentBlock() -{ - void* newEnvironmentBlock{ nullptr }; - auto processToken{ wil::open_current_access_token(TOKEN_QUERY | TOKEN_DUPLICATE) }; - if (!::CreateEnvironmentBlock(&newEnvironmentBlock, processToken.get(), FALSE)) - { - return nullptr; - } - return EnvironmentBlockPtr{ newEnvironmentBlock }; -} - // Function Description: // - Updates an EnvironmentVariableMapW with the current process's unicode // environment variables ignoring ones already set in the provided map. // Arguments: // - map: The map to populate with the current processes's environment variables. -// - environmentBlock: Optional environment block to use when filling map. If omitted, -// defaults to the current environment. // Return Value: // - S_OK if we succeeded, or an appropriate HRESULT for failing -HRESULT Microsoft::Console::Utils::UpdateEnvironmentMapW(EnvironmentVariableMapW& map, void* environmentBlock) noexcept +HRESULT Microsoft::Console::Utils::UpdateEnvironmentMapW(EnvironmentVariableMapW& map) noexcept try { - wchar_t const* activeEnvironmentBlock{ static_cast(environmentBlock) }; + LPWCH currentEnvVars{}; + auto freeCurrentEnv = wil::scope_exit([&] { + if (currentEnvVars) + { + FreeEnvironmentStringsW(currentEnvVars); + currentEnvVars = nullptr; + } + }); - wil::unique_environstrings_ptr currentEnvVars; - if (!activeEnvironmentBlock) - { - currentEnvVars.reset(::GetEnvironmentStringsW()); - RETURN_HR_IF_NULL(E_OUTOFMEMORY, currentEnvVars); - activeEnvironmentBlock = currentEnvVars.get(); - } + currentEnvVars = ::GetEnvironmentStringsW(); + RETURN_HR_IF_NULL(E_OUTOFMEMORY, currentEnvVars); // Each entry is NULL-terminated; block is guaranteed to be double-NULL terminated at a minimum. - for (wchar_t const* lastCh{ activeEnvironmentBlock }; *lastCh != '\0'; ++lastCh) + for (wchar_t const* lastCh{ currentEnvVars }; *lastCh != '\0'; ++lastCh) { // Copy current entry into temporary map. const size_t cchEntry{ ::wcslen(lastCh) }; diff --git a/src/types/inc/Environment.hpp b/src/types/inc/Environment.hpp index a982db60432..0994a177762 100644 --- a/src/types/inc/Environment.hpp +++ b/src/types/inc/Environment.hpp @@ -21,12 +21,9 @@ namespace Microsoft::Console::Utils } }; - using EnvironmentBlockPtr = wil::unique_any; - [[nodiscard]] EnvironmentBlockPtr CreateEnvironmentBlock(); - using EnvironmentVariableMapW = std::map; - [[nodiscard]] HRESULT UpdateEnvironmentMapW(EnvironmentVariableMapW& map, void* environmentBlock = nullptr) noexcept; + [[nodiscard]] HRESULT UpdateEnvironmentMapW(EnvironmentVariableMapW& map) noexcept; [[nodiscard]] HRESULT EnvironmentMapToEnvironmentStringsW(EnvironmentVariableMapW& map, std::vector& newEnvVars) noexcept; diff --git a/src/types/precomp.h b/src/types/precomp.h index d14fc703a8d..0b4a1124db6 100644 --- a/src/types/precomp.h +++ b/src/types/precomp.h @@ -29,7 +29,6 @@ Module Name: // Windows Header Files: #include -#include #include #include #include