无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 12416|回复: 38
打印 上一主题 下一主题

[分享] 高版本Win10PE多用户切换

    [复制链接]
跳转到指定楼层
1#
发表于 2019-10-5 01:51:46 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 slore 于 2019-10-10 02:23 编辑

正常Windows无法启动至SYSTEM用户桌面,不存在一个叫“SYSTEM”的用户。
通常正常系统下可以在不同用户间切换,且保持所有用户已运行的程序不中断。



但是PE默认是进入SYSTEM用户“桌面”环境,没有其他用户。
通过补充注册表服务,dll文件的方式,可以在PE下启用多用户登录环境,
就可以使用Administrator,GUEST(PE下通常不用),其他用户(PE下通常不用)进行登录。

在Administrator,GUEST,其他自建用户间是可以和正常系统一样进行互相切换的。
但是无法切换到默认的SYSTEM用户环境。(早期WIN10版本的PE也可以的,忘了从什么版本开始不能了)

根据一个朋友的调查,明白了为什么在新版本无法切换的原因,并通过调试系统服务,
强制更改SYSTEM用户“登录状态”,使系统认为和通常用户一样可以切换,
从而实现Administrator用户切换到SYSTEM。

根据这个调查结果,我确认了到目前已知的20H1内测版本,确实通过该方法
都可以切换至SYSTEM用户环境。


登录SYSTEM=>启动外壳,完成桌面等快捷方式初始化
再登录Administrator=>启动外壳,完成桌面等快捷方式初始化

不依赖于任何PE启动管理器,都可以。
大家知道的,注册表的Winlogon项目下面的 userinit可以设置用户登录时调用脚本控制初始化。


但是如果直接启动登录Administrator=>启动外壳,完成桌面等快捷方式初始化
在回到SYSTEM用户,让其启动外壳,完成桌面等快捷方式初始化的话,
就是需要PE启动管理器来感知用户切换的时机,来响应初始化SYSTEM用户环境。

基于10.0.18990 x64构建PE动态图(Gif)演示:




上图效果,使用WimBuilder2_2019.10.10更新版(启动管理器选择LUA,账户管理中启用Admin用户),
即可自己构建随意切换用户的PE。下载地址:
forum.php?mod=redirect&goto=findpost&ptid=411399&pid=3871787&fromuid=166812

github下载:
https://github.com/slorelee/wimb ... -Full.2019-10-10.7z

网盘下载(WimBuilder2-Full.2019-10-10.7z 18MB):
链接:https://pan.baidu.com/s/1SlGSJPk4RV-GJQco8o3lZA
提取码:elvb

WimBuilder2_2019.10.10版本支持所有RS5以上版本(x86, x64) PE的用户切换。

启动管理器使用PE默认的startnet.cmd也可以进行管理员登录,SYSTEM用户随意切换的脚本见#2代码:

  1. 10月底公开,
  2. 扫描二维码支持WinXShell,WimBuilder2项目,捐赠10元以上者,发送 捐赠id信息 站内消息,提前获取#2代码。
复制代码

PECMD脚本不熟,没有针对PECMD启动管理器的脚本,不过参照startnet.cmd批处理,应该很容易。


不依赖任何启动管理器,仅使用系统自带命令,也可以进行切换,
不增加文件注册表,不增加wim体积的方法也有:

  1. 12月底公开原理,代码,
  2. 扫描二维码支持WinXShell,WimBuilder2项目,捐赠50元以上者,发送 捐赠id信息 站内消息,提前获取#3原理,代码。
复制代码


支付宝


微信
2#
 楼主| 发表于 2019-10-5 01:52:32 | 显示全部楼层
本帖最后由 slore 于 2019-10-31 20:07 编辑

月底已至,密码移出。


启动管理器使用PE默认的startnet.cmd也可以进行管理员登录,SYSTEM用户随意切换的脚本如下:

  1. @echo off

  2. rem hide this console window
  3. if exist "%ProgramFiles%\WinXShell\WinXShell.exe" (
  4.   title PE_STARTNET_WINDOW
  5.   "%ProgramFiles%\WinXShell\WinXShell.exe" -luacode "HideWindow('ConsoleWindowClass', 'PE_STARTNET_WINDOW')"
  6. )

  7. if "x%~1"=="x" call :OSInit
  8. call :UserLogon "%~1"
  9. call :PreShell "%~1"
  10. call :RunShell
  11. call :PostShell

  12. if not "x%USERNAME%"=="xSYSTEM" goto :EOF
  13. echo SYSTEM account inited
  14. cmd.exe

  15. goto :EOF

  16. :OSInit
  17. echo "%~nx0" > "X:\Windows\Temp\SYSTEM_LOADER"
  18. wpeinit.exe
  19. call "X:\PEMaterial\Autoruns\Runner.bat" OSInit
  20. goto :EOF

  21. :PreShell
  22. if "x%~1"=="x" set USERPROFILE=X:\Users\Default
  23. set Desktop=%USERPROFILE%\Desktop
  24. set "Programs=%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs"

  25. if exist %SystemRoot%\System32\IME_Cmd.cmd (
  26.     call %SystemRoot%\System32\IME_Cmd.cmd
  27. )

  28. call "X:\PEMaterial\Autoruns\Runner.bat" Startup\BeforeShell
  29. goto :EOF

  30. :RunShell
  31. if exist "%windir%\explorer.exe" (
  32.     if "x%USERNAME%"=="xSYSTEM" start explorer.exe
  33.     if exist "%ProgramFiles%\WinXShell\WinXShell.exe" (
  34.         start "wxsDaemon" "%ProgramFiles%\WinXShell\WinXShell.exe" -regist -daemon
  35.     )
  36. ) else (
  37.     if exist "%ProgramFiles%\WinXShell\WinXShell.exe" (
  38.         if "x%USERNAME%"=="xSYSTEM" (
  39.             start "WinXShell" "%ProgramFiles%\WinXShell\WinXShell.exe" -regist -winpe
  40.         )
  41.     )
  42. )
  43. goto :EOF

  44. :PostShell
  45. if "x%USERNAME%"=="xSYSTEM" echo SYSTEM > "X:\Windows\Temp\SYSTEM_UserInited"
  46. call "X:\PEMaterial\Autoruns\Runner.bat" Startup
  47. goto :EOF

  48. :UserLogon
  49. if "x%~1"=="x-init" goto :EOF
  50. if not exist "%WinDir%\System32\LogonAdmin.bat" goto :EOF
  51. if not exist "%ProgramFiles%\WinXShell\WinXShell.exe" goto :EOF

  52. if "x%~1"=="x-user" goto :END_UI_LOGON

  53. rem 1 - SYSTEM, 2 - ADMIN
  54. start "wxsUI_Logon" /wait "%ProgramFiles%\WinXShell\WinXShell.exe" -ui -jcfg "X:\PEMaterial\UI_LogonPE.jcfg"
  55. echo set Logon_User=ADMIN
  56. if not "x%errorlevel%"=="x2" (
  57.   echo set Logon_User=SYSTEM
  58.   goto :EOF
  59. )

  60. :END_UI_LOGON
  61. call LogonAdmin.bat
  62. echo rem Waiting until ADMIN => SYSTEM
  63. if exist "X:\Windows\Temp\SYSTEM_UserInited" goto :EOF
  64. echo rem Waiting until ADMIN => SYSTEM
  65. start "WaitForSession_SYSTEM" /wait "%ProgramFiles%\WinXShell\WinXShell.exe" -luacode WaitForSession('SYSTEM')
  66. echo rem Detect ADMIN => SYSTEM session changing, init for SYSTEM account
复制代码


PECMD脚本不熟,没有针对PECMD启动管理器的脚本,不过参照startnet.cmd批处理,应该很容易。





回复

使用道具 举报

3#
 楼主| 发表于 2019-10-5 01:53:36 | 显示全部楼层
本帖最后由 slore 于 2019-12-31 20:37 编辑


月底已至,密码移出。
Z:\Dev\WimBuilder2\Projects\WIN10XPE\00-Configures\x-Account\last.bat
  1. if not "x%opt[account.admin_enabled]%"=="xtrue" goto :EOF

  2. rem patch for 20H1 x64
  3. binmay.exe -u "%X_SYS%\lsm.dll" -s "E8 87 CA FC FF" -r "B8 01 00 00 00"
  4. fc /b "%X_SYS%\lsm.dll.org" "%X_SYS%\lsm.dll"
  5. del /q "%X_SYS%\lsm.dll.org"
复制代码


回复

使用道具 举报

4#
 楼主| 发表于 2019-10-5 12:48:26 | 显示全部楼层
本帖最后由 slore 于 2019-10-5 12:54 编辑
liuzhaoyzz 发表于 2019-10-5 12:33
提高github下载速度的方法【100%有效】可达到2MB
https://blog.csdn.net/kcx64/article/details/83866633
...


Full就是带vendor的打包版本(用户切换必须用最新版的WinXShell),18MB。

放假前只处理了, Windows 10 RS4~20H1 x64的ISO用户切换。
你这个ISO估计不行。假期结束了,会去补充x86版本,随便把你这个版本看下,理论上Win10任意版本都可以,但是我只测试了RS5,19H1,20H1。

source是微软原版winre.wim启动时运行的系统安装,维护程序,可以删除才对。

早期版本,我不太清楚。
回复

使用道具 举报

5#
 楼主| 发表于 2019-10-5 13:04:51 | 显示全部楼层
liuzhaoyzz 发表于 2019-10-5 13:00
今天我在家下载20191005full版本最快只有250KB/S的样子,到了后面就断了,似乎github不支持断点续传,所以 ...

vendor都是exe没有提交到代码库上,方便master更新,release是单独发布自己的打包版本,里面还有精简字体等。

没有被管理的文件,是克隆不了的。
电脑没电,晚上回去,补下论坛附件包。
回复

使用道具 举报

6#
 楼主| 发表于 2019-10-6 10:32:09 | 显示全部楼层
liuzhaoyzz 发表于 2019-10-6 10:23
其实我也是在想该在哪里回复。因为20191005是在这个帖子发布的,所以就顺便回复了。
关于SwitchUser,我试 ...


你滚动条往下,应该可以看到SYSTEM也应该有。
多个用户是各自的进程,互不影响,与正常系统一样。
SYSTEM是比Admin应该多一个进程,就是PE的启动管理器。

点评

确实如你所说,网下滚的话可以看到winxshell有admin和system身份登录的进程。  详情 回复 发表于 2019-10-6 10:36
回复

使用道具 举报

7#
 楼主| 发表于 2023-5-3 11:22:51 | 显示全部楼层
CYYspace 发表于 2023-5-3 08:33
有没有Pe加锁定,注销,安全选项的方法?

注销,锁定正常的吧,不过点击了,没system选,所以注册表禁用了。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-4 00:36

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表