无忧启动论坛

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

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

    [复制链接]
 楼主| 发表于 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都是公开的,网上信息也很多)
回复

使用道具 举报

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


"shell.fix.showDesktop":true

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

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

使用道具 举报

 楼主| 发表于 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的项目也可以。
回复

使用道具 举报

 楼主| 发表于 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写清楚管理就好了。


回复

使用道具 举报

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


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

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

使用道具 举报

发表于 2019-7-2 19:25:44 | 显示全部楼层
可以用PowerShell试试
回复

使用道具 举报

发表于 2019-7-2 20:31:02 | 显示全部楼层
本帖最后由 frg521 于 2019-7-3 15:55 编辑

                                                                                                                                                  
                                                                                                                                                  
                                                                                                                                                  


3天,没有回应,自动理解为,无视。

如果,最后的最后,至少,帮写个。导入导出注册表的最小工具(32+64)(脱离REGWORKSHOP的人工参与),其他部分,继续用VB6旧版本人工操作。
可以指定,导入,导出的文件名。与注册表路径。3个功能。命令行的。
是HEX,不是
Windows Registry Editor Version 5.00
REGEDIT4

点评

SHGetValue, 读取注册表,然后WriteFile写到文件就好了。 完整的注册表PPN项目(其实支持任意注册表项目)保存到HEX文件,给你,含源码。 想导入的话,反过来,先ReadFile从HEX文件读取,然后SHSetValue更新注册  详情 回复 发表于 2019-7-3 19:27
回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

发表于 2019-7-2 22:32:30 | 显示全部楼层
pe支持uup下载合并
是不行的,
因为uup合并会在系统盘,
挂载wim文件夹,
pe是wim系统,系统盘是挂载不了wim镜像的
回复

使用道具 举报

发表于 2019-7-2 23:42:29 | 显示全部楼层
下载master两个压缩包解压失败

点评

1楼的master要改名分段压缩。。。  发表于 2019-7-2 23:56
854# 楼,附件不行么?  发表于 2019-7-2 23:55
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=411399&page=86#pid3810670  发表于 2019-7-2 23:55
回复

使用道具 举报

发表于 2019-7-3 10:36:08 | 显示全部楼层
slore 发表于 2019-7-2 22:18
感觉没有啥功能是别的PE有,这个没有的。所以打算对第3方工具的快速导入,
快捷方式界面,自动生 ...

我啥也不懂,照抄的能力都差,我只需要这一点:第3方程序快速导入,生成快捷方式。不知道下一版,能不能有这个功能啊。

点评

快捷方式,固定任务栏都可以,难的是,10个程序,那些创建快捷方式,只桌面?开始菜单也要?固定几个?一种自定义,提供一个非常简单的方案。不需要配置文件。  详情 回复 发表于 2019-7-3 10:42
放到X目录,会自动导入。快捷方式以前 加载外置不行麽?  发表于 2019-7-3 10:40
回复

使用道具 举报

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

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

点评

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

使用道具 举报

发表于 2019-7-3 10:48:59 | 显示全部楼层
本帖最后由 xiaxia99 于 2019-7-3 10:50 编辑
slore 发表于 2019-7-3 10:42
快捷方式,固定任务栏都可以,难的是,10个程序,那些创建快捷方式,只桌面?开始菜单也要?固定几个?一 ...


在构建中,每个软件的主程序的设置,都有复选框,或是放到桌面,或是放到菜单,或是放到任务栏,或是任选其中两种。

点评

我觉得一个个设置很麻烦啊。。。虽然这个在计划。自己打勾的很容易。下次,下下次估计就能加上。  发表于 2019-7-3 11:31
回复

使用道具 举报

发表于 2019-7-3 15:46:24 | 显示全部楼层
厉害,支持一下。
回复

使用道具 举报

 楼主| 发表于 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)
回复

使用道具 举报

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


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

使用道具 举报

 楼主| 发表于 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参数。
回复

使用道具 举报

发表于 2019-7-3 21:15:34 | 显示全部楼层
你有install.wim就可以从零开始构建此PE。只需要下载工程补丁(372KB)

这点不明,工程补丁在哪里下载?
看了几遍教程,云里雾里。比定制系统难多了纳闷。

点评

只是用的话,3楼有GIF你看下,就是勾选自己要的组件就好了。你要自定义组件的话,最好找一个参照MMC或者7-Zip,main.bat一看就懂了。  发表于 2019-7-3 21:24
已经包含在你下载的附件了。 bin还有工具基本上不更新的, 本来打算只更新Projects目录,全是批处理文件,压缩下很小的。 但是整体才10几MB,网友反映,更新的时候下载后还要自己合并麻烦,后来都是打包一起的。  详情 回复 发表于 2019-7-3 21:22
回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

发表于 2019-7-3 21:26:42 | 显示全部楼层
谢谢松林回复,好好学习天天向上
回复

使用道具 举报

发表于 2019-7-3 21:37:51 | 显示全部楼层
请教松林一个PE基础知识,winre.wim和boot.wim。前者是系统恢复用的,后者是光盘镜像部署系统所用。
有个疑问就是:是否这两个wim启动后就会把自身所在的盘符固化为X?

点评

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

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

发表于 2019-7-3 22:53:42 | 显示全部楼层
支持楼主分享知识,mark
回复

使用道具 举报

 楼主| 发表于 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,功能更强大。
回复

使用道具 举报

发表于 2019-7-4 08:15:28 | 显示全部楼层
最近装了Win10,麻烦给一个Win10原版系统镜像的下载地址

点评

https://www.microsoft.com/zh-cn/software-download/windows10  详情 回复 发表于 2019-7-4 09:13
回复

使用道具 举报

发表于 2019-7-4 09:13:47 | 显示全部楼层
lwb1 发表于 2019-7-4 08:15
最近装了Win10,麻烦给一个Win10原版系统镜像的下载地址

https://www.microsoft.com/zh-cn/software-download/windows10
回复

使用道具 举报

发表于 2019-7-4 15:50:36 | 显示全部楼层
感谢分享!
回复

使用道具 举报

发表于 2019-7-4 16:46:42 | 显示全部楼层
本帖最后由 frg521 于 2019-7-4 18:49 编辑

                                                                                                                                                  
                                                                                                                                                  
                                                                                                                                                  
把 注册表-转HEX (读取注册表,写文件)
改  HEX -转-注册表 (读取文件,写注册表)


结果这样的。writefile不动前,写入注册表128K的00
改为readfile 直接当前图片,编译不了。所有Write改Read 这样。想的。

regbin2.c
x:\regwrite\regbin2.c(42) : error C2065: 'dwBytesToRead' : undeclared identifier
x:\regwrite\regbin2.c(42) : error C2065: 'dwBytesRead' : undeclared identifier
Error executing cl.exe.
                                                                                                                                                  



把其他几个write也与read反转,编译过了,还是,写131072  ,明白了,根本没有读取文件前已经写了注册表,顺序本身也要改。定格

reg-read-to-write.PNG

点评

binreg.c 先读取文件,然后写入注册表。 Get和Set函数不变,但是参数有细微差别。  详情 回复 发表于 2019-7-4 18:58
回复

使用道具 举报

 楼主| 发表于 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. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-28 21:07

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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