WINLOGON 初始化与作用分析
WINLOGON 初始化与作用分析概述WINLOGON.EXE 是 ReactOS 的用户登录进程由 SMSS 在启动 CSRSS 之后创建。它负责创建窗口站 WinSta0 和三个桌面Default/Winlogon/Screen-Saver、加载 GINA DLL 处理用户身份验证、启动 Shellexplorer.exe和服务管理器services.exe并作为系统安全关注序列SAS即 CtrlAltDel的处理者。源码目录d:\reactos\base\system\winlogon\文件用途winlogon.c主入口点WinMainwlx.cGINA 加载/窗口站和桌面创建/WINLOGON 分发表sas.cSAS 处理/登录注销/Shell 启动security.c安全描述符/桌面和窗口站访问控制notify.c通知包管理shutdown.c系统关闭对话框screensaver.c屏幕保护管理environment.c用户环境创建setup.c安装模式支持rpcserver.c远程注册表 RPC 服务1. WINLOGON 启动的完整路径1.1 SMSS 启动 WINLOGONSMSS _main() │ ├─ SmpInit() ← SMSS 自身初始化 │ └─ SmpLoadSubSystemsForMuSession() │ ├─ 创建会话 0 │ ├─ 加载 win32k.sys │ └─ 启动 CSRSS (csrss.exe) │ └─ SmpExecuteInitialCommand(0, winlogon.exe, Handles[1], NULL) ├─ SmConnectToSm(\SmApiPort) ← 连接 SMSS 的 LPC 端口 ├─ SmpExecuteImage(winlogon.exe, DEFERRED) ← 创建 WINLOGON (挂起) └─ SmExecPgm() → SmpExecPgm() → SmpSbCreateSession() ├─ SmpLocateKnownSubSysByType() → 找 CSRSS ├─ NtDuplicateObject() → 传递句柄到 CSRSS ├─ SmpAllocateSessionId() → 分配会话 1 ├─ NtRequestWaitReplyPort(SbpCreateSession) → CSRSS 创建会话 1 └─ NtResumeThread(WINLOGON) ← ★ WINLOGON 开始运行1.2 与 SMSS 的关系SMSS ←→ CSRSS 通过 \SmApiPort (LPC) 和 SbApiPort 双向通信 SMSS → WINLOGON 创建进程 SmExecPgm LPC 消息(含会话创建) WINLOGON → SMSS 不直接通信 (通过 CSRSS 间接) | v SMSS 在 _main 末尾: NtWaitForMultipleObjects(CSRSS_Handle, WINLOGON_Handle) └─ 任一终止 → SmpTerminate() → 系统关闭2. WinMain — 初始化序列文件[winlogon.c#L431](file:///d:/reactos/base/system/winlogon/winlogon.c#L431)WinMain() │ ├─ 1. RtlSetProcessIsCritical(TRUE) ← 标记为关键进程 ├─ 2. RtlSetThreadIsCritical(TRUE) ← 线程也为关键 │ ├─ 3. UpdateTcpIpInformation() ← 更新 TCP/IP 主机名 │ ├─ ★ 4. RegisterLogonProcess() ← 注册到 win32k.sys CSRSS │ ├─ 5. 分配并初始化 WLSession 结构体 │ ├─ ★ 6. CreateWindowStationAndDesktops() ← ★ 创建 WinSta0 三个桌面 │ ├─ 7. InitKeyboardLayouts() ← 加载键盘布局 │ ├─ 8. StartRpcServer() ← 启动远程注册表 RPC │ ├─ ★ 9. StartServicesManager() ← ★ 启动 services.exe (SCM) │ ├─ ★ 10. StartLsass() ← ★ 启动 lsass.exe (LSA) │ ├─ 11. WaitForLsass() ← 等待 LSA 事件 │ ├─ 12. InitNotifications() ← 加载通知包 │ ├─ ★ 13. GinaInit(msgina.dll) ← ★ 加载 GINA DLL │ ├─ 14. CallNotificationDlls(Startup) ← 发送启动通知 │ ├─ ★ 15. InitializeSAS() ← ★ 创建 SAS 窗口 注册热键 │ ├─ 16. 检查安装模式 (GetSetupType()) │ └─ 17. NtInitializeRegistry() ← 标记 ControlSet 有效 │ └─ 18. 进入消息循环 (GetMessage/DispatchMessage)3. 注册到 Win32 子系统 — 三步注册3.1 注册到内核模式 win32k.sysWinMain() └─ RegisterLogonProcess(GetCurrentProcessId(), TRUE) [winlogon.c:463] └─ user32!RegisterLogonProcess() [logon.c:43] ├─ NtUserRegisterLogonProcess() → 系统调用进入 win32k.sys │ └─ co_IntRegisterLogonProcess() [simplecall.c:18] │ └─ gpidLogon PID [simplecall.c:40] │ ← win32k 全局变量记录登录进程 PID │ └─ CsrClientCallServer(UserpRegisterLogonProcess) → 发到 CSRSS └─ CSRSS!SrvRegisterLogonProcess() [register.c:30] └─ LogonProcessId WINLOGON PID3.2 注册 SAS 通知窗口InitializeSAS() [sas.c:1740] └─ CreateWindow(SAS Window class, SAS window, WS_POPUP, ...) └─ SetLogonNotifyWindow(Session-SASWindow) [sas.c:1786] └─ user32!SetLogonNotifyWindow(hWnd) └─ NtUserSetLogonNotifyWindow() → win32k.sys [winsta.c:1963] └─ gspm.hwndSAS hWnd [winsta.c:1978] ← win32k 全局变量记录 SAS 窗口句柄3.3 注册热键InitializeSAS() [sas.c:1740] └─ RegisterHotKeys(SASWindow, ...) [sas.c:1437] ├─ CtrlAltDel → IDHK_CTRL_ALT_DEL (0) ← SAS 触发 ├─ CtrlShiftEsc → IDHK_CTRL_SHIFT_ESC (1) ← 任务管理器 ├─ WinL → IDHK_WIN_L (2) ← 锁定工作站 └─ WinU → IDHK_WIN_U (3) ← 辅助工具管理器4. 创建窗口站和桌面文件[wlx.c#L953](file:///d:/reactos/base/system/winlogon/wlx.c#L953)这是 WINLOGON 最关键的初始化操作之一。它创建了所有 Win32 应用程序运行的窗口环境。CreateWindowStationAndDesktops() │ ├─ 1. CreateWinstaSecurity() [security.c:112] │ 权限: SYSTEM(全部), Administrators(受限) │ ├─ 2. CreateWindowStationW(LWinSta0, ...) [wlx.c:1010] │ → 创建 WinSta0 窗口站 │ ├─ 3. SetProcessWindowStation(WinSta0) [wlx.c:1021] │ → 将 WINLOGON 进程关联到 WinSta0 │ ├─ 4. 创建三个桌面的安全描述符 [security.c:359-854] │ ├─ 5. CreateDesktopW(Default, ...) [wlx.c:1030] │ → 创建 Default 桌面 (应用程序桌面) │ ├─ 6. CreateDesktopW(Winlogon, ...) [wlx.c:1046] │ → 创建 Winlogon 桌面 (安全桌面) │ ├─ 7. CreateDesktopW(Screen-Saver, ...) [wlx.c:1062] │ → 创建 Screen-Saver 桌面 │ ├─ 8. SetThreadDesktop(Winlogon) [wlx.c:1078] ├─ 9. SwitchDesktop(Winlogon) [wlx.c:1079] │ → ★ 切换到 Winlogon 安全桌面 │ └─ 10. SetWindowStationUser(...) [wlx.c:1085]三个桌面桌面用途安全权限Winlogon安全桌面 — 登录界面SYSTEM(全部), Administrators(受限)Default应用程序桌面 — 用户日常工作SYSTEM(全部), 用户(全部)Screen-Saver屏幕保护桌面SYSTEM(全部), Interactive(受限)登录后AllowAccessOnSession[security.c#L1391](file:///d:/reactos/base/system/winlogon/security.c#L1391)为当前登录用户授予 WinSta0 和 Default 桌面的访问权限。5. 启动关键系统进程5.1 启动服务管理器 (services.exe)文件[winlogon.c#L46](file:///d:/reactos/base/system/winlogon/winlogon.c#L46)staticBOOLStartServicesManager(VOID){returnCreateProcessW(Lservices.exe,NULL,...,DETACHED_PROCESS,...);}在WinMain第 508 行调用。SCM 以独立进程方式启动负责管理系统服务。5.2 启动 LSA (lsass.exe)文件[winlogon.c#L82](file:///d:/reactos/base/system/winlogon/winlogon.c#L82)staticBOOLStartLsass(VOID){returnCreateProcessW(Llsass.exe,NULL,...,CREATE_SUSPENDED|DETACHED_PROCESS,...);}创建后通过WaitForLsass()等待LSA_RPC_SERVER_ACTIVE事件确保 LSA 已完成初始化后再继续。6. GINA 接口6.1 GINA DLL 定位文件[wlx.c#L779](file:///d:/reactos/base/system/winlogon/wlx.c#L779)从注册表读取HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL默认值msgina.dllReactOS 内置6.2 GINA 函数表文件[wlx.c#L830](file:///d:/reactos/base/system/winlogon/wlx.c#L830)GINA DLL 需导出的函数按版本函数版本用途WlxNegotiatev1.0协商接口版本可选WlxInitializev1.0初始化 GINA接收 WINLOGON 分发表WlxDisplaySASNoticev1.0显示 SAS 提示如按 CtrlAltDel 登录WlxLoggedOutSASv1.0处理登录 SAS显示登录对话框WlxActivateUserShellv1.0激活用户 Shell启动 explorer.exeWlxLoggedOnSASv1.0处理已登录时的 SASWlxDisplayLockedNoticev1.0显示锁定提示WlxWkstaLockedSASv1.0处理锁定状态的 SAS解锁对话框WlxIsLockOkv1.0检查是否允许锁定WlxIsLogoffOkv1.0检查是否允许注销WlxLogoffv1.0注销处理WlxShutdownv1.0关机处理WlxScreenSaverNotifyv1.1屏保通知可选WlxStartApplicationv1.1启动应用程序可选WlxDisplayStatusMessagev1.3显示状态消息WlxGetStatusMessagev1.3获取状态消息WlxNetworkProviderLoadv1.3网络提供者加载WlxRemoveStatusMessagev1.3移除状态消息6.3 WINLOGON 分发表提供给 GINA文件[wlx.c#L747](file:///d:/reactos/base/system/winlogon/wlx.c#L747)WINLOGON 暴露 27 个函数给 GINA函数用途WlxUseCtrlAltDel启用/禁用 CtrlAltDelWlxSetContextPointer设置上下文指针WlxSasNotify发送 SAS 通知WlxSetTimeout设置对话框超时WlxMessageBox消息框WlxDialogBox/WlxDialogBoxParam/WlxDialogBoxIndirect对话框WlxSwitchDesktopToUser切换到 Default 桌面WlxSwitchDesktopToWinlogon切换到 Winlogon 桌面WlxSetOption/WlxGetOption选项管理…密码通知、桌面管理等7. SAS 处理机制7.1 SAS 触发路径用户按下 CtrlAltDel │ ├─ 键盘驱动 → win32k.sys (MOD_WINLOGON_SAS 标志) │ └─ PostMessage(hwndSAS, WM_HOTKEY, IDHK_CTRL_ALT_DEL, ...) │ └─ SASWindowProc() [sas.c:1526] └─ PostMessage(SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_CTRL_ALT_DEL, 0) └─ DispatchSAS() [sas.c:1322] └─ 根据 LogonState 分发: STATE_INIT → GINA.WlxDisplaySASNotice() STATE_LOGGED_OFF → GINA.WlxLoggedOutSAS() STATE_LOGGED_ON → GINA.WlxLoggedOnSAS() STATE_LOCKED → GINA.WlxWkstaLockedSAS()7.2 SAS 窗口文件[sas.c#L1526](file:///d:/reactos/base/system/winlogon/sas.c#L1526)窗口类:SAS Window class隐藏弹出窗口窗口标题:SAS window注册:SetLogonNotifyWindow(SASWindow)→gspm.hwndSAS消息处理:WM_HOTKEY→ 转换为 SAS 事件或直接动作WM_LOGONNOTIFY→ 系统级通知Shell退出、锁屏、注销等WLX_WM_SAS→ 分发给 GINA7.3 SAS 动作分发文件[sas.c#L1206](file:///d:/reactos/base/system/winlogon/sas.c#L1206)GINA 返回wlxAction后由DoGenericAction调度动作处理WLX_SAS_ACTION_LOGONHandleLogon()→ 加载用户配置、启动 ShellWLX_SAS_ACTION_LOGOFFHandleLogoff()→ 卸载配置、杀死进程WLX_SAS_ACTION_SHUTDOWNHandleLogoff()HandleShutdown()WLX_SAS_ACTION_LOCK_WKSTA锁定工作站WLX_SAS_ACTION_TASKLISTStartTaskManager()WLX_SAS_ACTION_FORCE_LOGOFF强制注销WLX_SAS_ACTION_SHUTDOWN_REBOOT重启WLX_SAS_ACTION_SHUTDOWN_POWER_OFF关机断电8. 登录流程详解用户输入凭据 → GINA.WlxLoggedOutSAS() 返回 WLX_SAS_ACTION_LOGON │ └─ DoGenericAction(WLX_SAS_ACTION_LOGON) └─ HandleLogon(Session) [sas.c:571] │ ├─ 1. GINA.WlxLogoff() ← 清理旧会话 │ ├─ ★ 2. GINA.WlxLoggedOutSAS() 返回 WLX_SAS_ACTION_LOGON │ ↓ 用户凭据已验证 │ ├─ 3. LoadUserProfileW(hToken) ← 加载用户配置文件 ├─ 4. CreateEnvironmentBlock() ← 创建环境块 │ ├─ 5. CallNotificationDlls(LogonHandler) ← 登录通知 │ ├─ 6. CallNotificationDlls(StartShellHandler) │ ├─ ★ 7. GINA.WlxActivateUserShell() ← ★ 启动 Shell │ └─ msgina.dll 读取注册表: │ HKLM\...\Winlogon\Shell explorer.exe │ → CreateProcessAsUser(hToken, explorer.exe, ...) │ ├─ 8. CallNotificationDlls(PostShellHandler) │ ├─ 9. InitializeScreenSaver() ← 初始化屏保 │ ├─ 10. SwitchDesktopToUser() ← 切换到 Default 桌面 │ └─ 11. LogonState STATE_LOGGED_ON9. 通知包机制文件[notify.c](file:///d:/reactos/base/system/winlogon/notify.c)WINLOGON 提供可扩展的通知包机制允许第三方软件获知登录/注销事件。InitNotifications() [notify.c:417] │ ├─ InitializeListHead(通知链表) ├─ AddSfcNotification() │ → sfc.dll: SfcWLEventLogon / SfcWLEventLogoff │ └─ 枚举注册表: HKLM\...\Winlogon\Notify\* ├─ DllName 通知 DLL 路径 ├─ Logon / Logoff / Lock / Unlock 等处理函数 ├─ Asynchronous / Impersonate / MaxWait 配置 └─ → AddNotificationDll() [notify.c:467]12 种通知类型LogonHandler → 登录 LogoffHandler → 注销 LockHandler → 锁定 UnlockHandler → 解锁 StartupHandler → 系统启动 ShutdownHandler → 系统关闭 StartScreenSaverHandler → 启动屏保 StopScreenSaverHandler → 停止屏保 DisconnectHandler → 断开连接 ReconnectHandler → 重新连接 StartShellHandler → 启动 Shell PostShellHandler → Shell 启动后10. 完整交互架构图┌─────────────────────────────────────────────────────────────────┐ │ 用户模式 │ │ │ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │ │ SMSS │ │ CSRSS │ │ WINLOGON │ │ │ │ │ │ │ │ │ │ │ │ 启动进程 │ │ Win32 API │ │ WinSta0 │ │ │ │ 管理会话 │ │ 控制台 │ │ 三个桌面 │ │ │ │ \SmApiPort │ │ 硬错误 │ │ SAS 处理 │ │ │ └─────┬──────┘ └─────┬──────┘ └──────┬─────┘ │ │ │ │ │ │ │ │ LPC │ LPC │ │ │ │ (SbApiPort) │ (ApiPort) │ │ │ └────────────────┼─────────────────┘ │ │ │ │ │ ┌────┴──────┐ │ │ │ 用户进程 │ │ │ │ explorer │ │ │ │ notepad │ │ │ └───────────┘ │ │ │ │ │ │ system call (0x1XXX) │ ├─────────────────────────┼─────────────────────────────────────────┤ │ 内核模式 │ │ │ │ │ ┌────┴──────────────────────────────────────┐ │ │ │ win32k.sys │ │ │ │ ┌──────────────┐ ┌─────────────────────┐ │ │ │ │ │ USER 子系统 │ │ GDI 子系统 │ │ │ │ │ │ │ │ │ │ │ │ │ │ 窗口管理 │ │ 绘图/字体/调色板 │ │ │ │ │ │ 消息路由 │ │ 设备上下文(DC) │ │ │ │ │ │ 输入处理 │ │ 位图/画刷/区域 │ │ │ │ │ │ │ │ │ │ │ │ │ │ gpidLogon │ │ │ │ │ │ │ │ WINLOGON │ │ │ │ │ │ │ │ hwndSAS │ │ │ │ │ │ │ │ SAS 窗口 │ │ │ │ │ │ │ └──────────────┘ └─────────────────────┘ │ │ │ └─────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘11. 四者关系总结启动顺序SMSS ──(SystemSessionCreate)──→ 创建会话 0 SMSS ──(ExtendServiceTable)───→ 加载 win32k.sys SMSS ──(CreateProcess)────────→ CSRSS │ │ │ ──(LPC 连接互认)──────────────→ CSRSS 开始运行 │ SMSS ──(CreateProcess DEFERRED)→ WINLOGON │ ──(LPC: SbpCreateSession)─→ CSRSS: 创建会话 1 │ ──(ResumeThread)──────────→ WINLOGON 开始运行 │ SMSS ←→ CSRSS LPC 双向通信 (\SmApiPort / SbApiPort) SMSS ←→ WINLOGON 间接通信 (通过 CSRSS)角色职责进程作用与 WINLOGON 的关系SMSS会话管理器系统引导第二阶段启动 WINLOGON挂起 → LPC 会话创建 → 恢复CSRSSWin32 子系统服务器端注册登录进程、会话创建、LPC API 服务win32k.sys内核模式窗口/图形子系统记录登录 PIDgpidLogon、接收 SAS 热键、桌面管理WINLOGON用户登录管理创建 WinSta0/桌面、加载 GINA、启动 Shell/SCM/LSA关键注册点WINLOGON → win32k.sys: RegisterLogonProcess → gpidLogon PID WINLOGON → win32k.sys: SetLogonNotifyWindow → hwndSAS SAS Window WINLOGON → CSRSS: SrvRegisterLogonProcess WINLOGON → CSRSS: SrvLogon (GINA 登录成功后)设计要点概念说明关键进程RtlSetProcessIsCritical(TRUE)终止即蓝屏安全桌面Winlogon 桌面隔离登录界面防止应用程序窃取密码SAS 独占CtrlAltDel 由 win32k 捕获后发给 WINLOGON用户程序无法拦截GINA 可替换通过注册表GinaDLL可替换为自定义登录界面通知包HKLM\...\Winlogon\Notify允许第三方注册登录/注销回调Shell 独立WINLOGON 不直接管理 Shell通过 GINA 代理崩溃后自动重启状态机STATE_INIT → LOGGED_OFF → LOGGED_ON → LOCKED等 10 个状态

相关新闻

MySQL 间隙锁死锁问题处理

MySQL 间隙锁死锁问题处理

MySQL 间隙锁死锁问题的原理、场景与完整解决方案 间隙锁死锁是 InnoDB 引擎在可重复读(RR)隔离级别下的高频死锁场景,它的成因和普通行锁死锁不同,核心根源是「间隙锁之间兼容,但间隙锁与插入意向锁互斥」的特性&…

2026/10/9 9:07:25 阅读更多 →
问卷互填平台怎么选?问卷星、腾讯问卷、球球问卷横向评测

问卷互填平台怎么选?问卷星、腾讯问卷、球球问卷横向评测

对于做毕业论文、课程设计或市场调研的同学来说,设计问卷往往不是最难的,最难的是发布后收不到足够的样本。目前国内常用的解决方案无非两类:一类是以问卷星、腾讯问卷为代表的“综合型平台”,既提供设计工具,也附带互…

2026/10/12 6:52:41 阅读更多 →
侠盗猎车手5|GTA5 增强版 送修改器+免装中文 洛圣都光线追踪回归

侠盗猎车手5|GTA5 增强版 送修改器+免装中文 洛圣都光线追踪回归

《侠盗猎车手5》Grand Theft Auto V,Rockstar 开放世界招牌,2025 年初 PC 推增强版(Enhanced Edition)——光线追踪反射/阴影、更快加载、GTA 内容(牛鲨卡、载具、房产折扣)整合进来,画面比 leg…

2026/10/3 6:27:23 阅读更多 →

最新新闻

老鼠试毒问题:二进制编码与信息论在工程排查中的应用

老鼠试毒问题:二进制编码与信息论在工程排查中的应用

1. 从一道经典题说起:老鼠试毒到底在考什么第一次听到“老鼠试毒”这个说法,很多人脑子里浮现的画面可能是几只小白鼠围着一堆颜色可疑的液体转圈。但如果我告诉你,这个看似简单的场景背后,藏着一套从二进制编码到信息论、从算法面…

2026/10/12 17:56:24 阅读更多 →
基于Matlab的PUF建模攻击评估:逻辑回归与CRP特征工程实战

基于Matlab的PUF建模攻击评估:逻辑回归与CRP特征工程实战

简介:DA PUF库(Defense/Attack PUF Library)是一套面向硬件安全与物理不可克隆函数研究者的开源代码集合,由Durga Prasad Sahoo等学者发布,针对仲裁器PUF、异或仲裁器PUF及Interpose PUF的模拟与攻击场景。资源共765个…

2026/10/12 17:56:24 阅读更多 →
医院HIS源码二次开发实战:核心表结构、业务闭环与避坑指南

医院HIS源码二次开发实战:核心表结构、业务闭环与避坑指南

简介:这是一套基于SpringBoot、Jpa与Thymeleaf构建的Java医院信息管理系统(HIS)源码,面向中小型医疗机构信息化建设者及希望深入理解主流Java Web技术栈的开发者。系统整合患者管理、医生排班、科室协作、药品库存、财务收支、预约…

2026/10/12 17:56:24 阅读更多 →
AI赋能网络安全实战:用异常检测和告警降噪捞出真实威胁

AI赋能网络安全实战:用异常检测和告警降噪捞出真实威胁

简介:这是一部聚焦人工智能与网络安全交叉领域的实战型PDF电子书,面向网络安全工程师、AI开发者及安全运维人员,系统讲解如何利用机器学习构建智能防御体系。全书围绕恶意软件检测、网络异常识别、用户认证安全等核心场景展开,系统…

2026/10/12 17:56:24 阅读更多 →
DeepSeek R1本地部署实战:Ollama+Cherry Studio搭建私有知识库

DeepSeek R1本地部署实战:Ollama+Cherry Studio搭建私有知识库

简介:适合有一定技术背景、希望在本地环境运行大模型或落地私有知识库的开发者和运维人员。教程围绕DeepSeek本地部署与知识库整合展开,覆盖从Ollama安装、DeepSeek R1各版本模型(1.5b至70b)选型与命令执行,到通过Chat…

2026/10/12 17:56:24 阅读更多 →
JSTL 标签库实战:从脚本片段到标签封装的核心技巧

JSTL 标签库实战:从脚本片段到标签封装的核心技巧

1. 从脚本片段到标签封装&#xff1a;JSTL 到底解决了什么问题很多人第一次接触 JSTL&#xff0c;是在维护一个老项目的时候。打开 JSP 文件&#xff0c;满屏的<% for(...) { %>、<% if(...) { %>和<% request.getAttribute("xxx") %>&#xff0c;…

2026/10/12 17:55:23 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天&#xff0c;画面可以做到绝对的锐利、平滑与无瑕。然而&#xff0c;当一张秋日手账插画或拍立得照片过于“平整无瑕”时&#xff0c;往往会散发出一种冰冷生硬的“数码塑料感&#xff08;Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中&#xff0c;横排&#xff08;Horizontal Layout&#xff09;早已经成为了绝对的主流。然而&#xff0c;当我们翻开泛黄的线装古籍、宋版木刻诗集&#xff0c;或是欣赏一张茶道雅集的手写便签时&#xff0c;那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点&#xff0c;很多人心里都会悄悄亮起一盏警示灯。 在心理学上&#xff0c;这种现象有一个专门的称谓——“周日夜晚焦虑症&#xff08;Sunday Scaries&#xff09;”。明天又是周一&#xff0c;闹钟又要重新在七点响彻卧房&#xff1b;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →