开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (3)
标签 (3)
master
zadjii-msft-patch-readme
richturn/retarget-echocon
1904.29002
1810.02002
1708.14008
master
分支 (3)
标签 (3)
master
zadjii-msft-patch-readme
richturn/retarget-echocon
1904.29002
1810.02002
1708.14008
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (3)
标签 (3)
master
zadjii-msft-patch-readme
richturn/retarget-echocon
1904.29002
1810.02002
1708.14008
Terminal
/
src
/
host
/
init.cpp
Terminal
/
src
/
host
/
init.cpp
init.cpp 5.28 KB
一键复制 编辑 原始数据 按行查看 历史
Dustin Howett 提交于 2019年05月03日 06:29 +08:00 . Initial release of the Windows Terminal source code
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
#include "precomp.h"
#include "init.hpp"
#include "resource.h"
#pragma hdrstop
// Routine Description:
// - Ensures the SxS initialization for the process.
void InitSideBySide(_Out_writes_(ScratchBufferSize) PWSTR ScratchBuffer, __range(MAX_PATH, MAX_PATH) DWORD ScratchBufferSize)
{
ACTCTXW actctx = { 0 };
// Account for the fact that sidebyside stuff happens in CreateProcess
// but conhost is run with RtlCreateUserProcess.
// If conhost is at some future date
// launched with CreateProcess or SideBySide support moved
// into the kernel and SideBySide setup moved to textmode, at which
// time this code block will not be needed.
// Until then, this code block is needed when activated as the default console in the OS by the loader.
// If the console is changed to be invoked a different way (for example if we add a main method that takes
// a parameter to a client application instead), then this code would be unnecessary but not likely harmful.
// Having SxS not initialized is a problem when 3rd party IMEs attempt to inject into the process and then
// make references to DLLs in the system that are in the SxS cache (ex. a 3rd party IME is loaded and asks for
// comctl32.dll. The load will fail if SxS wasn't initialized.) This was bug# WIN7:681280.
// We look at the first few chars without being careful about a terminal nul, so init them.
ScratchBuffer[0] = 0;
ScratchBuffer[1] = 0;
ScratchBuffer[2] = 0;
ScratchBuffer[3] = 0;
ScratchBuffer[4] = 0;
ScratchBuffer[5] = 0;
ScratchBuffer[6] = 0;
// GetModuleFileNameW truncates its result to fit in the buffer, so to detect if we fit, we have to do this.
ScratchBuffer[ScratchBufferSize - 2] = 0;
DWORD const dwModuleFileNameLength = GetModuleFileNameW(nullptr, ScratchBuffer, ScratchBufferSize);
if (dwModuleFileNameLength == 0)
{
RIPMSG1(RIP_ERROR, "GetModuleFileNameW failed %d.\n", GetLastError());
goto Exit;
}
if (ScratchBuffer[ScratchBufferSize - 2] != 0)
{
RIPMSG1(RIP_ERROR, "GetModuleFileNameW requires more than ScratchBufferSize(%d) - 1.\n", ScratchBufferSize);
goto Exit;
}
// We get an NT path from the Win32 api. Fix it to be Win32.
UINT NtToWin32PathOffset = 0;
if (ScratchBuffer[0] == '\\' && ScratchBuffer[1] == '?' && ScratchBuffer[2] == '?' && ScratchBuffer[3] == '\\'
//&& ScratchBuffer[4] == a drive letter
&& ScratchBuffer[5] == ':' && ScratchBuffer[6] == '\\')
{
NtToWin32PathOffset = 4;
}
actctx.cbSize = sizeof(actctx);
actctx.dwFlags = (ACTCTX_FLAG_RESOURCE_NAME_VALID | ACTCTX_FLAG_SET_PROCESS_DEFAULT);
actctx.lpResourceName = MAKEINTRESOURCE(IDR_SYSTEM_MANIFEST);
actctx.lpSource = ScratchBuffer + NtToWin32PathOffset;
HANDLE const hActCtx = CreateActCtxW(&actctx);
// The error value is INVALID_HANDLE_VALUE.
// ACTCTX_FLAG_SET_PROCESS_DEFAULT has nothing to return upon success, so it returns nullptr.
// There is nothing to cleanup upon ACTCTX_FLAG_SET_PROCESS_DEFAULT success, the data
// is referenced in the PEB, and lasts till process shutdown.
if (hActCtx == INVALID_HANDLE_VALUE)
{
auto const error = GetLastError();
// Don't log if it's already set. This whole ordeal is to make sure one is set if there isn't one already.
// If one is already set... good!
if (ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET != error)
{
RIPMSG1(RIP_WARNING, "InitSideBySide failed create an activation context. Error: %d\r\n", error);
}
goto Exit;
}
Exit:
ScratchBuffer[0] = 0;
}
// Routine Description:
// - Sets the program files environment variables for the process, if missing.
void InitEnvironmentVariables()
{
struct
{
LPCWSTR szRegValue;
LPCWSTR szVariable;
} EnvProgFiles[] =
{
{ L"ProgramFilesDir", L"ProgramFiles" },
{ L"CommonFilesDir", L"CommonProgramFiles" },
#if BUILD_WOW64_ENABLED
{ L"ProgramFilesDir (x86)", L"ProgramFiles(x86)" },
{ L"CommonFilesDir (x86)", L"CommonProgramFiles(x86)" },
{ L"ProgramW6432Dir", L"ProgramW6432" },
{ L"CommonW6432Dir", L"CommonProgramW6432" }
#endif
};
WCHAR wchValue[MAX_PATH];
for (UINT i = 0; i < ARRAYSIZE(EnvProgFiles); i++)
{
if (!GetEnvironmentVariable(EnvProgFiles[i].szVariable, nullptr, 0))
{
DWORD dwMaxBufferSize = sizeof(wchValue);
if (RegGetValue(HKEY_LOCAL_MACHINE,
L"Software\\Microsoft\\Windows\\CurrentVersion",
EnvProgFiles[i].szRegValue,
RRF_RT_REG_SZ,
nullptr,
(LPBYTE)wchValue,
&dwMaxBufferSize) == ERROR_SUCCESS)
{
wchValue[(dwMaxBufferSize / sizeof(wchValue[0])) - 1] = 0;
SetEnvironmentVariable(EnvProgFiles[i].szVariable, wchValue);
}
}
}
// Initialize SxS for the process.
InitSideBySide(wchValue, ARRAYSIZE(wchValue));
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

The new Windows Terminal, and the original Windows console host -- all in the same place!
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/AbstractFactory/Terminal.git
git@gitee.com:AbstractFactory/Terminal.git
AbstractFactory
Terminal
Terminal
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /