Fix: Decode process list names/paths as GBK on Windows
Process management decoded the client's process name/path bytes with GetClientEncoding, which returns UTF-8 for CLIENT_CAP_UTF8 clients. But the Windows client builds the process list with the ANSI A-interface (Process32FirstA / QueryFullProcessImageNameA), which emits the client's system code page (GBK on Chinese Windows) regardless of the UTF-8 capability -- unlike window titles, which were migrated to the W-interface plus UTF-8. Decoding GBK as UTF-8 garbled Chinese process names and paths. Add GetProcessListEncoding(): 936 for Windows clients, UTF-8 for LNX/MAC, matching McpServer::BuildListProcesses, and use it in ShowProcessList (which still writes via LVM_SETITEMTEXTW). Also raise the IP history cap to 1000 and rename the experimental "隐私屏幕" menu item to "虚拟屏幕". Co-Authored-By: deepseek-v4-pro
This commit is contained in:
1 parent
da0ec983ba
commit
ff6b290580
5 files changed
+58
-4
No files matched your search
@@ -239,6 +239,28 @@ UINT GetClientEncoding(context* ctx) {
|
||||
return 936;
|
||||
}
|
||||
|
||||
// 客户端「进程名/路径」编码:Windows 用 A 接口生成,恒为客户端 ANSI(简中=GBK/936),
|
||||
// 不随 CLIENT_CAP_UTF8 转 UTF-8;LNX/MAC 的 /proc 天然 UTF-8。
|
||||
// 不能用 GetClientEncoding——它按能力位返回 CP_UTF8,会误解 Windows 客户端的 GBK 进程名。
|
||||
// 与 McpServer::BuildListProcesses 的判定保持一致。
|
||||
UINT GetProcessListEncoding(context* ctx) {
|
||||
if (!ctx) return 936;
|
||||
CString clientType = ctx->GetAdditionalData(RES_CLIENT_TYPE);
|
||||
if (clientType == "LNX" || clientType == "MAC") return CP_UTF8;
|
||||
// 子连接情形:自身 RES_CLIENT_TYPE 为空 -> 找主连接取 clientType
|
||||
if (g_2015RemoteDlg) {
|
||||
context* mainCtx = g_2015RemoteDlg->FindHostByClientID(ctx->GetClientID());
|
||||
if (!mainCtx) {
|
||||
mainCtx = g_2015RemoteDlg->FindHostByIP(ctx->GetPeerName());
|
||||
}
|
||||
if (mainCtx) {
|
||||
CString mainType = mainCtx->GetAdditionalData(RES_CLIENT_TYPE);
|
||||
if (mainType == "LNX" || mainType == "MAC") return CP_UTF8;
|
||||
}
|
||||
}
|
||||
return 936;
|
||||
}
|
||||
|
||||
// 授权日志频率控制:首次必须记录,状态变化必须记录,相同状态每小时记录一次
|
||||
static bool ShouldLogAuth(const std::string& sn, int success) {
|
||||
struct AuthLogState {
|
||||
|
||||
Reference in new issue
Block a user