无忧启动论坛

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

[原创] (2022-02-02 更新) Re:WIN10XPE - 从零开始构建的全功能PE

    [复制链接]
241#
 楼主| 发表于 2019-6-30 14:20:21 | 显示全部楼层
本帖最后由 slore 于 2019-6-30 14:28 编辑

1.分享这东西,各人各样,因为有些东西事情,需要用来收入,这种情况,肯定不愿意分享


我理解, WIN+X菜单,类原生开始菜单,通知栏,消息提示框之类的,我也有所保留,不过
这些不是单单堆文件和注册表,也没有其他PE有。虽然也不卖不干嘛。

但是别人已经有成品包含,或者简单改改选项优化之类的,个人觉得没啥“保留”的必要,
有心想做的,能做出来。这种分享出来不妨。

对于PE我觉得通用驱动做好跟好卖吧,单纯的功能,刷版本没啥。
能代替的手段多了,现在的WIN+D, 手机线连接传送,或者远程桌面服务,USB弹出之类,
有是锦上添花,没有大家也都接受了这么多年,也有代替手段, 雪藏价值不高。

论坛已经不是以前,都有生活吧,技术交流少的可怜。

(我也应该更多投入到WinXShell, 起码ARM,Server Core,增强需求的个人制定还是有些回报。)

998.提出bug这个也是,没有几个是按普通构建


所以提供了_assets_\preset 预设清单 功能。自己准备自己的默认设定就好了。
默认的 清单 我从最初都没变。精简默认的选择都是不影响的,
强力和暴力精简,是按俄罗斯的一个列表作为例子,得到一个小维护PE。
main.bat是提供一种精简的例子。功能间的影响,精简还不失的话,得使用者自己打磨了。

我就是 winre.wim + WinXShell.exe + U盘工具 搞定。

其他的不过是别的PE有,或者有人帖子整理,我变成代码。适当的适配20H1的改进是做的。

Talk is cheap. Show me the code.

------ Linux 的创始人 Linus Torvalds

多少步骤说明,做法的帖子,现在还有用?特别PE区的教程,不知道是不是编辑的原因,
根本啥也没讲明,真按些帖子能做出PE是不可能的。

变成工程,适配各种新版,怎么做的,自己看看批处理就明白。
非常简单的共享方式,既然要说要分享的话,就一步到位。

999. 是的,能明确是那个组件所属,单独分离最好。但是只要愿意分享,我不介意都是last.bat。
如果分开的更好,我容易合并。

9999.本月最后一次申请,给默认

默认是习惯,我不会用五笔,为什么五笔要默认?设置默认了,其他人又不要。
显示快捷方式小箭头也一样,我觉得是个性化设定。

所以WimBuilder给提供了清单功能,请根据自己的喜好自己设定默认选项。
custom.js我是空出来的,存在就代替default.js了。

默认始终英文

第一微软添加完输入法是不是默认,而且 默认英文输入法,还是默认英文输入?
个人习惯不同。中文下,按回车输入英文的人也存在。他们不需要默认英文。

IME输入法我个人的test.js都是禁用的(加速构建测试其他功能)。
提供的yong输入法,.yong也是自己的配置,五笔默认,英文都可以自己配置。

我添加选项要考虑很多,对于各个语言系统,还有界面翻译要考虑。
建议 放到自己的补丁。

另外,如果不是一直要求,而是 贴出 具体修改的 main.bat,我只是加选项的话,
我也许加的就容易了。你这种我得自己装输入法测试,还得去对比注册表。。。
优化,个人设定我还是没太多兴趣的。

修复任何模式,补充(精简版系统源)sxs精简文件

之前加了,是搞错了(虽然全SOFTWARE,ADMIN测试了。。。都不知道能发生什么问题,修复什么问题)。
不过看了下界面的选项,本身没错。完整winre,或者精简了winsxs的winre,都是winre自己。
后面会补充,就是根据把SlimWinSxs.bat的 winre.wim 换成 install.wim 就好了。
因为界面需要补充新选项,或者修改翻译,暂时先放着了。

这个版本不同仅出现过2次,且功能构建正常。对于我几千次构建PE都没觉得有问题,
提出的人也仅你一个。绝大部分ISO都OK,对你影响大的话,直接做成【个人补丁】更好。

对此我也提供过了一个宏AddFilesByList

MyTools\AddWinSxS\main.bat
  1. set SxSArch=%WB_PE_ARCH%
  2. call AddFilesByList "%PROJECT_PATH%\za-Slim\SlimWinSxSList.txt"
复制代码


就好了啊。自己用,不用考虑界面选项,不用考虑多语言等等,比较方便。


对了,
【ACLRegKey】 宏不起作用的原因是,用Nsudo提权了,以前默认的加管理员权限用于修改的就没有必要了。
但是为了保留代码,所以直接跳过了。

如果设置管理员以外的权限的,需要直接使用内部宏 【_ACLRegKey】。
回复

使用道具 举报

242#
 楼主| 发表于 2019-6-30 17:44:06 | 显示全部楼层
本帖最后由 slore 于 2019-6-30 18:21 编辑

1.我好像彻底不懂了,我只是说五笔组件这个 勾选,默认选中,并没有提到复杂的还要安装或者会用五笔,还要测试。


只是选项的话,很早就给你说了用“预设清单”自己设置默认值。
你一直没有解决。我理解的“默认五笔”——

进系统,中文PE的话,勾选了IME的话,默认五笔(有拼音,五笔,其他3方这个排第一个切换项,或者直接默认)。
这里要考虑,只有一个的话,很容易,但是作为标准选项的话,
日语,韩语,法语等系统安装了多个个输入法,自带输入法等都要处理获取,来决定preload的注册表顺序设定。

不是不能,但是个人觉得自己的自定义设置,自己搞,如果愿意分享顺序调整的main.bat的话分享。
我来做,这个我都不用的功能,优先度不高,只是排着。
做成默认了,你是不用改了,其他人每次构建还要取消下这个勾选,虽然文件不会增加多少,
但是进PE,切换输入法的总是多一个自己不用的输入法,要多切一下,不是很麻烦麽。所以这个属于自定义范畴。


只是你图中的默认五笔打勾的需求的话,
1.复制 _assets_\preset\default.js => _assets_\preset\custom.js

2.然后下面位置插入(其实位置任意):
    "IME.indicator":true,
    "IME.system_ime":true,
    "IME.ms_wubi":true,
    "IE.x64_component":"x64+x86",



另外,对于补丁界面,默认不想选择【精简】的话,下面插入:
    select_tree_node('_CustomFiles_');
    open_tree_node('00-Configures');
    uncheck_tree_node('01-Components');
    check_tree_node('01-Components/za-Accessories');
    uncheck_tree_node('za-Slim');
    uncheck_tree_node('za-SlimExtra');


都是很简单的英文:check勾选, uncheck 取消勾选,select鼠标点击选择节点,open展开该节点显示子项目。


3.你再打开WimBuilder看看,是不是。
你附件的其他选项,请参照以上做法自己做预设文件,本来作为这个工具是要一个【设置另存为。。。】的功能的,
非核心功能,先自己写预设文件就可以了,一直排在后面。

加载顺序是:
custom.js优先,不存在就加载default.js(config.js中也可以修改此逻辑,比如强制加载default.js,或者加载lite4.js)。
其他预设界面上下拉菜单自己选择。


2. sxs 故障的发现

如果更广泛出错,我会加选项修正。目前来看,我全SOFTWARE, ADMIN这么多次没在WinSxS上出问题,都OK。

如果测试,建议直接补充全部 WinSxS,Catalog。
call AddFiles \Windows\WinSxs
做一个基础版本,再用这个winre.wim基础上,进行加工测试。会提升构建速度。

至于SSD,内存盘测试我是从原始开始的,默认选项基本上40秒构建一次,1分钟自动进入PE,所以我构建的比较多吧。

个人补丁的话,上面的补充下WOW64支持如下,你看看是否可用。
为什么需要额外挂载?和你其他自定义Tools目录中的一样,在一次构建的时候就可以调用。
mywinsxs.bat
  1. set SxSArch=%WB_PE_ARCH%
  2. call AddFilesByList "%PROJECT_PATH%\za-Slim\SlimWinSxSList.txt"
  3. if "%opt[build.wow64support]%"=="true" (
  4.     set SxSArch=x86
  5.     call AddFilesByList "%PROJECT_PATH%\za-Slim\SlimWinSxSList.txt"
  6. )
复制代码


3. 默认英文
默认英文输入法?
安装中文输入法时,默认相当于按了SHIFT,是英文模式?
安装了搜狗,小小输入法等第3方输入法,都默认英文?

如果是标准,这样代码处理逻辑比较复杂。所以建议根据个人使用状况,自定义(配置文件也好,注册表修改也好),
我统一的话考虑的比较多。

比如你知道自带【微软拼音,五笔】的注册表设定,分享出来。我在main.html添加一个 【中】/【英】状态可以。

你直说一个【默认英文】的请求,我的自己去对比注册表,实验个个输入法的话,精力有限。

回复

使用道具 举报

243#
 楼主| 发表于 2019-6-30 17:57:15 | 显示全部楼层
单纯电脑保留的版本,肯定我最多,为了对比版本某次差异github的注释,联网看,没有特定日期,也不方便比较


建议你直接装git,TortoiseGit,找个空白目录,做一次git clone (右键就有菜单)。
你可以切换到任意一次提交的版本,也可以离线看到所有修改 履历原因,时间,差分。
需要最新版本,右键 git fetch, git pull 就好了。
回复

使用道具 举报

244#
 楼主| 发表于 2019-6-30 21:13:09 | 显示全部楼层
顺便说下,我只有完全照抄能力,
比如.hta  wim索引有6个,而我的含有17卷

凡是js vbs  lua  或者复杂组合bat基本它认识我,这样。



能自己动手改,代码写的不“正式”,不“简洁”也没关系。主要自己试着修改自己的部分就很好
索引这个问题,其他一键工具就不能改吧,WimBuilder全脚本很自由。
我是把你的Patch全覆盖了,Git提示的差分修改代码,虽然和3389没关系,需要改进的我就顺手改了。

索引的问题我知道,但是我用新版本居多,全部是UUP(Pro)。索引只用1。
winre.wim, boot.wim的话,x86/x64的test.wim最多只有2个,所以6目前还没有增加的需求。
你这种比较暴力,但是也是一种简单的解决方式。
我计划中是获取install.wim的一览,动态生成:
1 - Windows Pro 10.0.17763 x64 zh-CN
2 - Windows Home  10.0.17763 x64 zh-CN
...

没有技术难度,就是觉得不算重要就先放着了。(状态栏的代码稍微改改就可以, 1小时)
也没有想着用个折中的案去修改,貌似也没有人提出不够用的反馈。
你这样改了,添加了93行,差分太长了,本来打算添加一个$wb_src_index_max = 99放到config.js中设置,
后来想想,1-99下拉列表有滚动条,也没啥影响,就简单的循环输出了。


我只有完全照抄能力


我也是尽可能给出不同的使用的例子,比如精简,还有StartIsBack的UI,winsxs的选项,也和其他的不同吧,
main.bat也好,main.html,希望是有类似的自己可以照抄。。。。
当然批处理我也尽可能的将常用的方法包装到宏中。
让人有文件列表,注册表项就可以自己做补丁。

给个建议,写点注释(中文,英文,拼音都可以)啊。比如Guest的用户开放,有什么目的?
Appx中补了2个文件,不加这2个文件有何影响?我判断不出来的,就没处理。
快速用户切换得整理下再合并。

改名也注释掉了2行,我不知道意图,wpeutil的源码也是会修改那2处。
因为机器组的缘故,新版本改名用了无人值守文件unattend.xml,看了wpeutil的代码,
是会自动加机器组,初始化基本网络。网络这个选项可以设置false,加快启动4秒。
不过我虚拟机和主机间还是有基础网络比较方便, 所以默认true。(不勾选【网络】支持,winre有基本的LAN功能, 共享,远程桌面)
防火墙直接false掉了,所以远程桌面服务,省了添加3389的策略。

USB_Mgr也更新到binmay的新版方法, 使得最小4行就可以了。
  1. call AddFiles AAAA,BBBB
  2. call RegCopy 服务 (call RegCopyEx Services xxxxxx会更好。)
  3. reg add 服务启动
  4. binmay -U 直接更新
复制代码

使得USB原生弹出是我发布的,但是我需求不大没测试,最小依赖也没整理,一直拖着。。。
有现成的话,我会完善融合。(USB设备已成功移除的消息提示,交个WinXShell的下个版本,30行?)

3389这种受到ppn影响的最坑。。。我3389从800mb的ISO开始,不知道有没有100次。。。
文件,服务处理很多次,netstat -an就是看不到3389。。。就先放着了,反正可以用TeamViewer之类的代替,
还能远程SYSTEM桌面,比系统自带的好多了。
你的修改来看,就是漏了一个sys文件,还有就是ppn了。(权限, SetupInProgress我是知道的)
(还有为什么加hdaudio.sys,也没说明,所以去掉了。。。)


不能照猫画虎修改的就不会,不会编程,照猫画虎,也只有vb6  vc6


只要自己愿意动手,不会的,自己想改的随时提出,我知道都会解答。[至于会不会合并到master版本,另说]
(js, vbs, lua, bat都是公开的,网上信息也很多)
回复

使用道具 举报

245#
 楼主| 发表于 2019-6-30 21:16:53 | 显示全部楼层
wind功能所有win10共用


"shell.fix.showDesktop":true

你不用这个蓝牙模块方法,只要WinXShell在,就自动处理了。不管是否杀掉explorer,不管是否
SYSTEM,Admin用户无限切换。。。都会有效。
当然有FixScreen.exe也可以的,不需要pecmd, 以及我老版本的wind.exe。

【新建菜单,发送到】暂时没用到,没测试,先放在我硬盘上吧。
回复

使用道具 举报

246#
 楼主| 发表于 2019-7-2 01:07:14 | 显示全部楼层
本帖最后由 slore 于 2019-7-2 08:19 编辑

写了个100行的ProductPolicyEditor.lib,编译到WinXShell中,可以用lua调用。
暂时只支持DWORD的写入。默认直接读取,修改Tmp_SYSTEM的注册表BINARY数据,也可用Load方法变更路径。

修改个添加DWORD的就够了吧?字符串,二进制的项目有么?

ppn.lua
ProductPolicy:Set('shell32-license-ShowProductNameOnDesktop', 0)
ProductPolicy:Set('SnippingToolLicensing-Enabled', 1)
ProductPolicy:Save()
ProductPolicy:Get('ALL')
ProductPolicy:Load('HKLM\\PPN_TEST', 'ProductPolicy')


--[[
...
TerminalServices-DeviceRedirection-Licenses-CameraRedirectionAllowed        REG_DWORD        1
TerminalServices-DeviceRedirection-Licenses-PnpRedirectionAllowed        REG_DWORD        1
TerminalServices-DeviceRedirection-Licenses-TSAudioCaptureAllowed        REG_DWORD        1
TerminalServices-DeviceRedirection-Licenses-TSEasyPrintAllowed        REG_DWORD        1
TerminalServices-DeviceRedirection-Licenses-TSMFPluginAllowed        REG_DWORD        1
TerminalServices-RDP-7-Advanced-Compression-Allowed        REG_DWORD        1
TerminalServices-RemoteApplications-ClientSku-RAILAllowed        REG_DWORD        1
TerminalServices-RemoteConnectionManager-0f0a4bf8-8362-435d-938c-222a518a8b78-Disabled        REG_DWORD        0
TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-LocalOnly        REG_DWORD        0
TerminalServices-RemoteConnectionManager-45344fe7-00e6-4ac6-9f01-d01fd4ffadfb-MaxSessions        REG_DWORD        1
TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-InitialProgram        REG_SZ        %SystemRoot%\ehome\mcrmgr.exe
TerminalServices-RemoteConnectionManager-8dc86f1d-9969-4379-91c1-06fe1dc60575-MaxSessions        REG_DWORD        0
TerminalServices-RemoteConnectionManager-AllowAppServerMode        REG_DWORD        0
TerminalServices-RemoteConnectionManager-AllowD3DRemoting        REG_DWORD        1
TerminalServices-RemoteConnectionManager-AllowMultimon        REG_DWORD        1
TerminalServices-RemoteConnectionManager-AllowMultipleSessions        REG_DWORD        1
TerminalServices-RemoteConnectionManager-AllowRemoteConnections        REG_DWORD        1
TerminalServices-RemoteConnectionManager-AutomatedAppServerInstallation        REG_DWORD        1
TerminalServices-RemoteConnectionManager-MaxUserSessions        REG_DWORD        0
TerminalServices-RemoteConnectionManager-b7857721-7a62-4a37-aff3-253fe2b8b0e8-MaxSessions        REG_DWORD        1
TerminalServices-RemoteConnectionManager-ce0ad219-4670-4988-98fb-89b14c2f072b-MaxSessions        REG_DWORD        1
TerminalServices-ServerDeviceRedirection-Licenses-WPFPrintingRedirectionAllowed        REG_DWORD        0
...
]]


直接 binmay -U SnippingTool.exe -t u:SnippingToolLicensing-Enabled 改成一个PE中为1的项目也可以。
回复

使用道具 举报

247#
 楼主| 发表于 2019-7-2 18:41:29 | 显示全部楼层
1.我说的ppn工具不知道是否看过


我只要了解PP的二进制数据结构。你的工具我看了,只是二进制数据的拆分合并。

如例子图片,导出ppn注册表的hex数据,整体分离出,所有组件。每个文件就是一个独立策略,可以建立库文件夹,分类也可。
    比如只要3389和截图,就只复制对应文件(term*/snip*),然后copy/b *.* ..\ppn.hex  
  接着用工具添加,头尾,修正头部。


不明白为什么用hex数据分离,有什么好处。

只要3389和截图的话,
3389.lua
ProductPolicy:Set('TerminalServices-RemoteConnectionManager-AllowRemoteConnections', 1)

截图工具.lua
ProductPolicy:Set('SnippingToolLicensing-Enabled', 1)

3389+截图工具.lua
ProductPolicy:Set('SnippingToolLicensing-Enabled', 1)
ProductPolicy:Set('TerminalServices-RemoteConnectionManager-AllowRemoteConnections', 1)

你也一样可以copy合并脚本,然后lua.exe/WinXShell.exe -script xxx.lua调用。

最后导入注册表,目前我只有用regworkshop没有任何工具替代。

lua直接修改注冊表的HEX数据,没有必要导出,导入。

一般的ppn编辑工具就是修改,不能删除或者增加(这句大概我错,我想说的是,不是我要的效果),

Set方法,会先查找,存在就修改,不存在就增加。
删除也可以做,没必要吧,新建一个空项目,再Set就是了。

11.能实现哪些,能接管注册表导入导出hex(不能的话,继续用rwgworkshop)

直接修改注册表,没必要导入导出。导入导出想做就是10行代码。

12.分割文件,把hex挨个策略按名字,自己的大小,提取到结束标志,同时(或追加)可选提取文件名列表。


C/C++直接结构体,大小自动加cbSize,在注册表中找相应项目。为什么需要存成HEX文件。
这个需求,什么意义。

13. 把需要的组件放到指定目录,合并,名为  合并.hex   ,接着对合并.hex加首尾,修正。


直接字符串文本 Set('項目1'),Set('項目2')不行么?

14.导入注册表,(不能实现hex导入,继续regworkshop)


直接更新注册表的,不需要导入。如果想改临时的注册表项,Load('TEST\\PPN', 'Policy'),
然后reg export出来。非要HEX?

99.总之就是不去解读各个组件是bin  dword  sz 只是raw原始块,分解组合。(2个文件夹,一个是开启,一个是关闭,把要的堆一个新目录,合并)(库数据慢慢收集,不必专门把没得组件都有0/1这样的)

为什么要分散一堆HEX的文件,然后COPY合并?
直接一个脚本文件,什么项目开启1,关闭0写清楚管理就好了。


回复

使用道具 举报

248#
 楼主| 发表于 2019-7-2 18:46:36 | 显示全部楼层
目前是vb6的,不知如果用vc/vs写,费力?结构代码,文本里网页,都详细有图文。  帖子多,只是因为不会编程,只是那点东西,东西拼凑很久。
      最后问下,我的需求,意思是否传达。如果传到,是否(如果否,后面全部无视)会花时间编写32+64的版本,去掉依赖,哪怕体积稍微大点,命令行即可。


明白你的意思,不过用在WimBuilder只需要开启组件对应的功能,没觉得需要HEX处理。

确实要HEX处理也不是不能做,一个命令行不用lua接口,单纯set,new,load参数,
或者dump成HEX文件,最多几十KB的。C++可以直接访问内存,HEX从注册表读到到内存,
结构自然可以映射成Policy,直接修改,添加,非常容易,不需要转其他语言的代码,新写更容易。
回复

使用道具 举报

249#
 楼主| 发表于 2019-7-2 22:18:20 | 显示全部楼层

1.提下,近期已经,有打算增加或实现的组件,只要不是app这种原生pe绝对不能解决的,
可以列出来,(也许,你花时间研究时,有人已经有方案)


感觉没有啥功能是别的PE有,这个没有的。所以打算对第3方工具的快速导入,
快捷方式界面,自动生成,还有驱动集成方面做些改进支持。

组件,MSI?WMP?
网络一览, SMB1的处理,代码有,没整合,后续会处理下,
然后,WIFI自动连接啥的,网络支持强化下。
生成RAMOS选项。

工具自身的话,支持自定义自动清单,
WimBuilder.cmd -preset lite4
自动构建A(通过界面,不过不用自己点,依赖HTA)。
然后进一步,自动构建B,直接到批处理,不依赖HTA。


网友提出的几个依赖:
19H1的浅色主题
蓝牙
麦克风

pecmd.lua 中添加“中文”乱码BUG修复。

WinXShell的一些改进,主要是 右下角 各种提示信息框,看看有办法让它支持explorer.exe。
再补充一个总控面板?快速切换,启动/关闭防火墙,分辨率,磁盘信息?(系统的通知面板)

想到啥,闲了就处理下。。。不固定,也可能2星期不动。做别的事情。

点评

我啥也不懂,照抄的能力都差,我只需要这一点:第3方程序快速导入,生成快捷方式。不知道下一版,能不能有这个功能啊。  详情 回复 发表于 2019-7-3 10:36
回复

使用道具 举报

250#
 楼主| 发表于 2019-7-3 10:42:49 | 显示全部楼层
xiaxia99 发表于 2019-7-3 10:36
我啥也不懂,照抄的能力都差,我只需要这一点:第3方程序快速导入,生成快捷方式。不知道下一版,能不能 ...

快捷方式,固定任务栏都可以,难的是,10个程序,那些创建快捷方式,只桌面?开始菜单也要?固定几个?一种自定义,提供一个非常简单的方案。不需要配置文件。

点评

在构建中,每个软件的主程序的设置,都有复选框,或是放到桌面,或是放到菜单,或是两个都放。  详情 回复 发表于 2019-7-3 10:48
回复

使用道具 举报

251#
 楼主| 发表于 2019-7-3 19:27:43 | 显示全部楼层
本帖最后由 slore 于 2019-7-3 21:10 编辑


SHGetValue, 读取注册表,然后WriteFile写到文件就好了。

完整的注册表PPN项目(其实支持任意注册表项目)保存到HEX文件,给你,含源码。

想导入的话,反过来,先ReadFile从HEX文件读取,然后SHSetValue更新注册表。


  1. #include<windows.h>

  2. #define BINARY_BUFF_SIZE (128 * 1024) // 128KB

  3. int main(int argc, char *argv[]) {
  4.     DWORD type = 0, size = BINARY_BUFF_SIZE;
  5.     char *data = (char *)malloc(size);
  6.     char *subkey = "SYSTEM\\ControlSet001\\Control\\ProductOptions";
  7.     char *regname = "ProductPolicy";
  8.     char *filename = "pp_data.hex";

  9.     HANDLE hFile = NULL;
  10.     DWORD dwBytesToWrite = 0;
  11.     DWORD dwBytesWritten = 0;
  12.     BOOL bErrorFlag = FALSE;

  13.     memset(data, 0, size);
  14.     if (argc > 2) subkey = argv[2];
  15.     if (argc > 3) regname = argv[3];

  16.     if (SHGetValueA(HKEY_LOCAL_MACHINE, subkey,
  17.         regname, &type, data, &size) != ERROR_SUCCESS) {
  18.         printf("fail to read data.\n");
  19.         return 1;
  20.     }
  21.     printf("data length = %d.\n", size);
  22.     dwBytesToWrite = size;

  23.     if (argc > 1) filename = argv[1];
  24.     hFile = CreateFile(filename, GENERIC_WRITE, 0, NULL,                  
  25.                        CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
  26.     if (!hFile) {
  27.         printf("fail to open file.\n");
  28.         return 1;
  29.     }

  30.     bErrorFlag = WriteFile(hFile, data, dwBytesToWrite, &dwBytesWritten, NULL);
  31.     if (FALSE == bErrorFlag) {
  32.         printf("fail to write to file.\n");
  33.     }
  34.     CloseHandle(hFile);
  35.     return 0;
  36. }
复制代码


regbin.zip (2.21 KB, 下载次数: 3)


各个项目的处理,我还是用lua脚本方便些。。。


你用PPN对于HEX文件拆解的工具的话,其实:
PP2HEX.bat
  1. cd /d "%~dp0"
  2. reg copy HKLM\System\CurrentControlSet\Control\ProductOptions HKCU\TEST\PP /f
  3. reg delete HKCU\TEST\PP /v ProductType /f
  4. reg delete HKCU\TEST\PP /v OSProductContentId /f
  5. reg delete HKCU\TEST\PP /v OSProductPfn /f
  6. reg delete HKCU\TEST\PP /v ProductSuite /f
  7. reg delete HKCU\TEST\PP /v SubscriptionPfnList /f
  8. reg save HKCU\TEST\PP PP.hiv
复制代码


从2024H开始截取 2028H保存的数据大小就行了。
另外,最后因为hiv文件是4K对齐,文件结尾多很多00 00 00 00 00 .. 00 00

3kb的x86不能再x64上用。用VS2015编译了个,可以。体积变成100kb了。
regbin_vs.zip (115.13 KB, 下载次数: 4)

回复

使用道具 举报

252#
 楼主| 发表于 2019-7-3 19:31:39 | 显示全部楼层
因为可以说,与本帖子主题  无关。。是否愿意花时间写,都是自由。因为不会写代码。让我写给个几年也未必能写出来


用main.bat换吧。WimBuilder上省了时间的话,就抽点儿时间写。
回复

使用道具 举报

253#
 楼主| 发表于 2019-7-3 20:26:52 | 显示全部楼层
Usage:
regbin_x64.exe [file] [subkey] [regvalue]

regbin.exe 不带任何参数
生成pp_data.hex

regbin.exe pp.txt
regbin.exe D:\pp.txt
生成到指定的文件。

regbin.exe D:\test.txt SYSTEM\Setup SetupSupported
SetupSupported的0或1保存到test.txt (DWORD是4个字节 01 00 00 00)

regbin.exe D:\test.txt Test\ProductOptions
保存 HKLM\Test\ProductOptions\ProductPolicy的。

参数没怎么处理,顺序是固定。想不固定也可以支持。
目前只是export,所以没有export/import参数。
回复

使用道具 举报

254#
 楼主| 发表于 2019-7-3 21:22:07 | 显示全部楼层
令狐大虾 发表于 2019-7-3 21:15
这点不明,工程补丁在哪里下载?
看了几遍教程,云里雾里。比定制系统难多了纳闷。

已经包含在你下载的附件了。
bin还有工具基本上不更新的, 本来打算只更新Projects目录,全是批处理文件,压缩下很小的。
但是整体才10几MB,网友反映,更新的时候下载后还要自己合并麻烦,后来都是打包一起的。

http://bbs.wuyou.net/forum.php?m ... ;page=86#pid3810670

D:\Dev\WimBuilder2\Projects>tree WIN10XPE
D:\Dev\WimBuilder2\Projects\WIN10XPE
├─00-Configures
│  ├─Build
│  │  └─WoW64_Basic
│  ├─System
│  │  └─Admin
│  ├─x-Account
│  ├─z-Customization
│  │  └─X_SYS
│  └─z-PECMD
│      └─X_SYS
├─01-Components
│  ├─00-Shell
│  │  ├─Explorer
│  │  ├─WinXShell
│  │  │  ├─X_x64
│  │  │  │  └─Program Files
│  │  │  │      └─WinXShell
│  │  │  │          ├─en-US
│  │  │  │          ├─lua_helper
│  │  │  │          │  ├─x64
│  │  │  │          │  └─x86
│  │  │  │          ├─wxsUI
│  │  │  │          │  └─UI_NotifyInfo
│  │  │  │          └─zh-CN
│  │  │  └─X_x86
│  │  │      └─Program Files
│  │  │          └─WinXShell
│  │  │              ├─en-US
│  │  │              ├─lua_helper
│  │  │              │  ├─x64
│  │  │              │  └─x86
│  │  │              ├─wxsUI
│  │  │              │  └─UI_NotifyInfo
│  │  │              └─zh-CN
│  │  ├─X_x64
│  │  │  └─X_SYS
│  │  ├─X_x86
│  │  │  └─X_SYS
│  │  └─za-StartMenu
│  │      └─StartIsBack
│  │          └─assets
│  ├─02-Network
│  ├─03-Audio
│  ├─BitLocker
│  ├─CredDialog
│  ├─DWM
│  ├─IME
│  ├─MMC
│  ├─MTP_Support
│  │  └─X_Desktop
│  ├─NetFX
│  ├─Patch_drvinst
│  │  └─X
│  │      └─Windows
│  │          └─INF
│  ├─Printer
│  ├─Remote Desktop
│  ├─Search
│  ├─USB_DevMgr
│  ├─VCRuntime
│  └─za-Accessories
├─01-Drivers
│  ├─00-SystemDrivers
│  └─10-CustomDrivers
├─02-Apps
│  ├─7-Zip
│  ├─Browsers
│  │  ├─chrome
│  │  └─IE
│  ├─HotSwap
│  │  └─X_SYS
│  ├─PENetwork
│  └─yong_IME
├─shared
│  ├─CustomCompmgmt
│  │  └─compmgmt
│  │      └─zh-CN
│  └─NewBrowseDlg
├─Tools
│  ├─Appx
│  ├─my.reg
│  ├─SendTo.ShortCut
│  ├─USB-HotPlug
│  ├─x64
│  └─x86
├─X
│  ├─ProgramData
│  │  └─Microsoft
│  │      ├─Network
│  │      │  └─Connections
│  │      │      └─pbk
│  │      └─User Account Pictures
│  └─Users
│      ├─Default
│      │  ├─AppData
│      │  │  └─Roaming
│      │  │      └─Microsoft
│      │  │          └─Windows
│      │  │              └─SendTo
│      │  └─Desktop
│      └─Public
│          └─Desktop
├─za-Slim
│  └─SmallFonts
├─za-SlimExtra
├─_Assets_
│  └─preset
└─_CustomFiles_
    ├─MyCustom
    ├─MyCustom_Samples
    └─PEMaterial
        ├─Autoruns
        │  └─OSInit
        ├─locales
        └─MyDrivers
            ├─NET_x64
            ├─NET_x86
            ├─WIRELESS_x64
            └─WIRELESS_x86
回复

使用道具 举报

255#
 楼主| 发表于 2019-7-3 22:01:02 | 显示全部楼层
令狐大虾 发表于 2019-7-3 21:37
请教松林一个PE基础知识,winre.wim和boot.wim。前者是系统恢复用的,后者是光盘镜像部署系统所用。
有个 ...

启动来说,他们没区别,只是启动后运行的命令不同,系统带的组件有点点差异。X盘啥时候挂的,我不了解,不过native环境已经是X盘了,ramdisk模式,就X盘
回复

使用道具 举报

256#
 楼主| 发表于 2019-7-3 22:01:03 | 显示全部楼层
令狐大虾 发表于 2019-7-3 21:37
请教松林一个PE基础知识,winre.wim和boot.wim。前者是系统恢复用的,后者是光盘镜像部署系统所用。
有个 ...

启动来说,他们没区别,只是启动后运行的命令不同,系统带的组件有点点差异。X盘啥时候挂的,我不了解,不过native环境已经是X盘了,ramdisk模式,就X盘
回复

使用道具 举报

257#
 楼主| 发表于 2019-7-4 00:19:18 | 显示全部楼层
为什么这个代码这么通用? 每个字母数字,不会出错?会编程就是要背无数代码?不能理解。


我的main.bat不是各个系统都可以跑。。。只要支持使用的方法,函数,就可以通用啊。
写文件,从XP开始就是WriteFile,微软兼容性一直保持就可以用。

都是很基础的,不使用高级版本的API,功能就可以了通用了。

VC6不好的就是那个时候没x64, 需要2003的SDK自己整合。

写这些代码,是和背写单词一样吗?


完形填空。。。只有记住20个单词就够了吧。
if 如果,各种类型的声明char字符,DWORD 双字节数字。。。

剩下的就是查手册,要读取注册表微软msdn有SHGetValue,然后告诉你有6个参数。
把6个参数给补充就好了。
https://docs.microsoft.com/zh-cn ... shlwapi-shgetvaluea

什么 size,data都是自己起名的哦, a,b也可以。高级的编译器还支持中文,  
SHGetValue(HKLM, "SubKey", "Policy", 数据保存, 大小),当然写拼音也可以。

SHGetValue(HKLM, zijian, mingzi, shuju, daxiao) ...

批处理:
set  a=def
echo %a%
if %a%=def (
    set a=fed
)
你知道set命令,echo命令的参数就可以组合很多东西。按逻辑写,英文不是背诵的,是自己写的。

要什么功能给它对应的参数就好了。


C语言和批处理,编写代码的角度来讲没有本质区别。

区别在于,各个语言的语法格式不同。支持可以用的系统功能也不同。。。C可以调用系统API,功能更强大。
回复

使用道具 举报

258#
 楼主| 发表于 2019-7-4 18:58:02 | 显示全部楼层

binreg.c
先读取文件,然后写入注册表。
Get和Set函数不变,但是参数有细微差别。

  1. #include<Windows.h>
  2. #include<Shlwapi.h>

  3. #pragma comment(lib, "Shlwapi.lib")

  4. #define BINARY_BUFF_SIZE (128 * 1024) // 128KB


  5. int main(int argc, char *argv[]) {
  6.     DWORD type = 0, size = BINARY_BUFF_SIZE;
  7.     char *data = (char *)malloc(size);
  8.     char *subkey = "SYSTEM\\ControlSet001\\Control\\ProductOptions";
  9.     char *regname = "ProductPolicy";
  10.     char *filename = "pp_data.hex";

  11.     HANDLE hFile = NULL;
  12.     DWORD dwBytesToRead = 0;
  13.     DWORD dwBytesReaded = 0;
  14.     BOOL bErrorFlag = FALSE;

  15.     memset(data, 0, size);
  16.     /* read file */
  17.     if (argc > 1) filename = argv[1];
  18.     hFile = CreateFileA(filename, GENERIC_READ, 0, NULL,
  19.         OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  20.     if (!hFile) {
  21.         printf("fail to open file.\n");
  22.         return 1;
  23.     }
  24.     dwBytesToRead = BINARY_BUFF_SIZE;
  25.     bErrorFlag = ReadFile(hFile, data, dwBytesToRead, &dwBytesReaded, NULL);
  26.     if (FALSE == bErrorFlag) {
  27.         printf("fail to read to file ec=(%d).\n", GetLastError());
  28.     }
  29.     CloseHandle(hFile);
  30.     size = dwBytesReaded; /* file size */
  31.     printf("data length = %d.\n", size);
  32.     if (argc > 2) subkey = argv[2];
  33.     if (argc > 3) regname = argv[3];

  34.     if (SHSetValueA(HKEY_LOCAL_MACHINE, subkey,
  35.         regname, REG_BINARY, data, size) != ERROR_SUCCESS) {
  36.         printf("fail to write data ec=(%d).\n", GetLastError());
  37.         return 1;
  38.     }
  39.     return 0;
  40. }
复制代码
回复

使用道具 举报

259#
 楼主| 发表于 2019-7-4 19:25:20 来自手机 | 显示全部楼层
本帖最后由 slore 于 2019-7-4 19:26 编辑

这个是警告,不影响,就没用它的返回值。
最开始 #include<stdio.h> 就不出了。
回复

使用道具 举报

260#
 楼主| 发表于 2019-7-5 14:58:15 | 显示全部楼层
WAIGO 发表于 2019-7-5 13:56
\Projects\WIN10XPE\01-Components\MTP_Support\main.bat里有详细的注册表修改信息。另外s大也特别说明了。 ...

准备页面,勾选使用test\boot.wim,只勾选mtp,windows附件,画板,图片查看器,不要勾选。会生成一个boot.wim包含所有增加文件和注册表信息。你挂载导出对比看看。

点评

已遵嘱提取并输入注册表文件,但是显示手机 MTP 功能依然失败,只有用原汁原味注册表才可以成功……  详情 回复 发表于 2019-7-5 21:23
今天根据s大的批处理,自行尝试mtp功能,发现不需要破解drvinst,并且不需要就系统后再次安装驱动。只需要将相关的文件都保存到PE里,并且将相关的system注册表修改好。 在进入系统后,添加这个software的注册项目  详情 回复 发表于 2019-7-5 15:23
回复

使用道具 举报

261#
 楼主| 发表于 2019-7-5 21:53:22 | 显示全部楼层
WAIGO 发表于 2019-7-5 21:34
WimBuilder2 制作时,帐户选启用 ADMIN ,则 PE 启动时会显示询问窗口,并且可使用滑鼠点击。此时并未载 ...
但通过楼主的特别设置,滑鼠变成可用了。


没做特别设置。。。微软的默认机制。

上面已经有人回复了。你不是去试了么?运行winpeshl.exe就可以了。

另外好好看工程脚本的话,PecmdAdmin.ini有不运行winpeshl.exe也可以用的方法。。。
回复

使用道具 举报

262#
 楼主| 发表于 2019-7-5 23:12:02 | 显示全部楼层
令狐大虾 发表于 2019-7-5 23:00
好吧是我打错,组件页面没找到DWM呢。



这种简单的,没啥特别设置的集中到这里了。

点评

好吧谢谢回复。构建后找不到生成的PE.WIM,也生成不了ISO。楼主有木有详细一点的操作步骤视图呢。初次接触此工具云里雾里啊 [attachimg]396478[/attachimg]  详情 回复 发表于 2019-7-5 23:17
默认是勾选的啊。你1903没DWM效果?  发表于 2019-7-5 23:12
回复

使用道具 举报

263#
 楼主| 发表于 2019-7-5 23:14:55 | 显示全部楼层
WAIGO 发表于 2019-7-5 21:23
已遵嘱提取并输入注册表文件,但是显示手机 MTP 功能依然失败,只有用原汁原味注册表才可以成功……



不管SYSTEM帐户还是Administrator,网络列表和MTP功能都正常的。

本机偶尔成功过一次,不知道为什么现在刷不出来了,难道和PP注册表有关系?

代码周末再调查看看。至少他们没有冲突,直接连接,右键 远程桌面 都正常。

点评

对不起,忘了告诉您,用您的两个注册表无论怎样更改,显示联网其它电脑的功能都无法实现。最后是改用了 "Win10builder_2019.05.24" 制作出来的 SOFTWARE 及 SYSTEM 注册表才获得成功。为了重获 MTP 功能,我把原注册  详情 回复 发表于 2019-7-6 10:21
回复

使用道具 举报

264#
 楼主| 发表于 2019-7-5 23:46:43 | 显示全部楼层
令狐大虾 发表于 2019-7-5 23:17
好吧谢谢回复。构建后找不到生成的PE.WIM,也生成不了ISO。楼主有木有详细一点的操作步骤视图呢。初次接触 ...

3楼有GIF啊。你选择的是单独的install.wim,没有boot无法创建启动镜像。
你第一个准备页面,选择一个ISO挂载的光驱,比如H盘。


你自己看提示,虽然无法创建iso, 但是boot.wim构建好了啊。
你看清楚命令提示符中的路径。蓝色高亮了。

BUILD完生成到:
WimBuilder2\_Factory_\target\WIN10XPE\build\boot.wim

MAKE_ISO
WimBuilder2\_ISO_\sources\boot.wim

点评

谢谢回复,找到。并且自己用一个模板启动 [attachimg]396480[/attachimg] 开始菜单难道不是StartIsBack? 点击后右键属性直接跳转到系统属性了  详情 回复 发表于 2019-7-5 23:51
回复

使用道具 举报

265#
 楼主| 发表于 2019-7-6 00:23:35 | 显示全部楼层
令狐大虾 发表于 2019-7-6 00:15
PE里面程序文件夹存在“Windows Defender”,为啥不做移除呢?
还有WMP无法运行哈。
而且打开资源管理器 ...

1.移除目录,自己del /f /q X:\xxxxx。细节不处理。开始菜单都不怎么用啊。
2. WMP组件 我没添加。你有文件列表,可以自己添加。(方案已经有了,貌似必须32位,我就懒得弄了)
3. 【组件】-【搜索】启用就可以了。

系统的太慢了,都是用Everything。

回复

使用道具 举报

266#
 楼主| 发表于 2019-7-6 00:51:34 | 显示全部楼层
令狐大虾 发表于 2019-7-6 00:34
嗯,谢谢回复。
“64位操作系统上支持运行32位应用程序 ”?这点在真实的系统不存在此需求吧?真实的系统 ...


微软默认的boot.wim也好,winre.wim也好,ADK的winpe.wim也好都是不支持。

原因是PE维护用的软件大多数都提供了x64的版本,直接用64位就好了。
这个要添加一堆系统DLL,WIM的体积增加约80MB。
主要看自己介不介意wim的体积,和启动时间了。

[72MB]WOW64支持(x64环境下可运行x86程序) (2018-12-05)

点评

谢谢解答。另,不勾选StartIsBack制作,生成的PE开始菜单点击无效。 还有一点每次重新制作,如何导入之前制作的日志直接制作?  详情 回复 发表于 2019-7-6 01:15
回复

使用道具 举报

267#
 楼主| 发表于 2019-7-6 10:20:53 | 显示全部楼层
令狐大虾 发表于 2019-7-6 01:15
谢谢解答。另,不勾选StartIsBack制作,生成的PE开始菜单点击无效。

还有一点每次重新制作,如何导入 ...

1.
WIN10PE谁的可以开启原生开始菜单?
不勾选就不添加,自然无效了。

2.保存选择目前还没有做,可以利用 预设清单 功能。
https://github.com/slorelee/wimbuilder2/issues/19

点评

谢谢解惑!楼主可否考虑添加WInRAR,实体机操作下发现某些RAR文件7Z无法解压。另:PE添加显卡驱动包这点在维护中很实用,自带的驱动很多时候根本无法驱动  详情 回复 发表于 2019-7-6 10:57
回复

使用道具 举报

268#
 楼主| 发表于 2019-7-6 15:35:34 | 显示全部楼层
WAIGO 发表于 2019-7-6 10:21
对不起,忘了告诉您,用您的两个注册表无论怎样更改,显示联网其它电脑的功能都无法实现。最后是改用了 ...

网络列表需要 Function Discovery Provider Host 服务。
要显示当前PE机器需要启动 Function Discovery Resource Publication 服务。
回复

使用道具 举报

269#
 楼主| 发表于 2019-7-7 22:28:15 | 显示全部楼层
令狐大虾 发表于 2019-7-7 21:55
这两天用这玩意鼓捣有点心得就是:
1、楼主给我们的只是做一个母盘出来,体积还不小。
2、其他细节例如PE ...

勾选 强力精简和暴力精简,可以得到100MB~200MB的母盘,不够?
第三方因人而异。不是都是自己的软件放到U盘,PETools自动加载,
需要我打一个几百MB的程序包?随便软件一个版本更新再上传几百MB的ISO?
(把你的软件扔到X_PF目录,自动就放到Program Files了)

这个工程本身就是实例工程,展示了如何精简,如何加组件,如果加第三方,
最难的系统各个组件,点点鼠标就添加上了。MTP手机传输文件,BitLocker之类的,
你可以搜索下论坛多少人问,我这个工程点点鼠标就好了。

精简意味着失去功能,你自己够用的情况下尽可能删除,也许几十MB的内核都可能。
但是只适用你自己发布出来的话,其他人又说这功能不能用,那功能不能用。

这玩意的特点:
小,论坛附件就够,自己随意扩展,不是单一版本,支持全版本(微软支持范围),各语言系统。

新手有反馈的,老鸟也有用的,我不照顾新手或者老鸟,只是把PE的各种关系转化为代码,选项。

PECMD.ini?你自己手动写,放到 _CustomFiles_\pecmd.ini就完了。
PECMD今后都是要淘汰掉了。。。专用语法的学习没必要。放到Startup【启动】目录,
和正常Windows一样,更适合新手。

回复

使用道具 举报

270#
 楼主| 发表于 2019-7-7 22:30:47 | 显示全部楼层
令狐大虾 发表于 2019-7-7 21:55
这两天用这玩意鼓捣有点心得就是:
1、楼主给我们的只是做一个母盘出来,体积还不小。
2、其他细节例如PE ...
PE的制作细节精要没有学到,需要地毯式在论坛里面零碎的整合。


不知道你要学啥细节?制作PE不就是Dism 挂载wim然后 复制文件,改注册表,卸载,
都在bin\_Progress.bat。不知道制作PE还要啥技术?

地毯式在论坛里面零碎的整合。

能否举例?还要看论坛啥其他的零碎?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-6 19:39

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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