mirror of
https://github.com/microsoft/WSL.git
synced 2025-12-11 04:35:57 -06:00
Fix wslsettings crash when invoked from wslservice (#13089)
This commit is contained in:
parent
71daaef7bb
commit
5d20b44bc6
@ -92,8 +92,7 @@ public:
|
|||||||
[[nodiscard]] wil::unique_handle Launch(_In_opt_ HANDLE UserToken, _In_ bool HideWindow, _In_ bool CreateNoWindow = false) const
|
[[nodiscard]] wil::unique_handle Launch(_In_opt_ HANDLE UserToken, _In_ bool HideWindow, _In_ bool CreateNoWindow = false) const
|
||||||
{
|
{
|
||||||
// If a user token was provided, create an environment block from the token.
|
// If a user token was provided, create an environment block from the token.
|
||||||
using unique_environment_block = wil::unique_any<LPVOID, decltype(&DestroyEnvironmentBlock), DestroyEnvironmentBlock>;
|
wsl::windows::common::helpers::unique_environment_block environmentBlock{nullptr};
|
||||||
unique_environment_block environmentBlock{nullptr};
|
|
||||||
if (ARGUMENT_PRESENT(UserToken))
|
if (ARGUMENT_PRESENT(UserToken))
|
||||||
{
|
{
|
||||||
THROW_LAST_ERROR_IF(!CreateEnvironmentBlock(&environmentBlock, UserToken, false));
|
THROW_LAST_ERROR_IF(!CreateEnvironmentBlock(&environmentBlock, UserToken, false));
|
||||||
@ -572,6 +571,12 @@ void wsl::windows::common::helpers::LaunchWslSettingsOOBE(_In_ HANDLE UserToken)
|
|||||||
wsl::windows::common::SubProcess process(wslSettingsExePath.c_str(), commandLine);
|
wsl::windows::common::SubProcess process(wslSettingsExePath.c_str(), commandLine);
|
||||||
process.SetToken(UserToken);
|
process.SetToken(UserToken);
|
||||||
process.SetShowWindow(SW_SHOW);
|
process.SetShowWindow(SW_SHOW);
|
||||||
|
|
||||||
|
wsl::windows::common::helpers::unique_environment_block environmentBlock{nullptr};
|
||||||
|
THROW_LAST_ERROR_IF(!CreateEnvironmentBlock(&environmentBlock, UserToken, false));
|
||||||
|
|
||||||
|
process.SetEnvironment(environmentBlock.get());
|
||||||
|
|
||||||
process.Start();
|
process.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -92,6 +92,8 @@ struct GuidLess
|
|||||||
|
|
||||||
typedef wil::unique_any_handle_null<decltype(&::ClosePseudoConsole), ::ClosePseudoConsole> unique_pseudo_console;
|
typedef wil::unique_any_handle_null<decltype(&::ClosePseudoConsole), ::ClosePseudoConsole> unique_pseudo_console;
|
||||||
|
|
||||||
|
using unique_environment_block = wil::unique_any<LPVOID, decltype(&DestroyEnvironmentBlock), DestroyEnvironmentBlock>;
|
||||||
|
|
||||||
inline void DeleteProcThreadAttributeList(_In_ PPROC_THREAD_ATTRIBUTE_LIST AttributeList)
|
inline void DeleteProcThreadAttributeList(_In_ PPROC_THREAD_ATTRIBUTE_LIST AttributeList)
|
||||||
{
|
{
|
||||||
::DeleteProcThreadAttributeList(AttributeList);
|
::DeleteProcThreadAttributeList(AttributeList);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user