无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: mdyblog
打印 上一主题 下一主题

[更新376#2825]PECMD2012.1.80.13_Win32_64.多窗口多线程.裸机系统2.3.3.1+18M酷M...

    [复制链接]
15511#
 楼主| 发表于 2021-1-11 09:44:54 | 只看该作者
feiyike 发表于 2021-1-10 16:09
下面数据剔除重复行,怎么处理?
1,,53335.730,31347.620,52.460
2,,53331.150,31333.340,49.379

前面的 “19,,”也是改行数据的一部分吗?
回复

使用道具 举报

15512#
 楼主| 发表于 2021-1-11 09:49:13 | 只看该作者
527104427 发表于 2021-1-10 21:31
老大,发现 LTSB 2016 运行 GetBootDev.wcs 有点问题,并不能发现盘符。系统是从 https://next.itellyou. ...

SUBJ 强行加的DRV, 不在核心。(当然可以分析,配对 用户层盘符, 那还要加代码)


简单的方法,
可以调整顺序
步骤1:运行 GetBootDev.wcs

如果没有没有盘符, SUBJ & Z:,\Device\HarddiskVolume4 挂载ESP分区
//。。。。


SUBJ &-  Z:

点评

加盘符是个办法,但也有特殊情况,比如盘符耗尽的时候。 不知道part命令能否直接通过\Device\HarddiskVolume4这种形式获取到详细信息呢,这样就比较靠谱了  详情 回复 发表于 2021-1-11 10:45
回复

使用道具 举报

15513#
 楼主| 发表于 2021-1-11 10:26:22 | 只看该作者
feiyike 发表于 2021-1-10 16:09
下面数据剔除重复行,怎么处理?
1,,53335.730,31347.620,52.460
2,,53331.150,31333.340,49.379

导入数组, 再剔除。
TrimX.WCS.zip (732 Bytes, 下载次数: 6)
  1. ENVI^ ForceLocal=1
  2. @IFEX  %CurFile%.LOG, LOGS * %CurFile%.LOG

  3. SET$ NL=0d 0a
  4. SET &VS=
  5. \1,,53335.730,31347.620,52.460
  6. \%NL%2,,53331.150,31333.340,49.379
  7. \%NL%3,,53331.150,31333.340,49.379
  8. \%NL%4,,53335.730,31347.620,52.460
  9. \%NL%13,,53362.800,31340.890,53.642
  10. \%NL%14,,53362.800,31340.890,53.642
  11. \%NL%15,,53344.100,31322.260,48.737
  12. \%NL%16,,53362.800,31340.890,53.642
  13. \%NL%17,,53348.660,31364.210,56.508
  14. \%NL%18,,53331.840,31362.690,53.322
  15. \%NL%19,,53362.800,31340.890,53.642

  16. //剔除重复行
  17. _SUB  TrimX  // &VS 3  [,]
  18.     FIND $%~3=,SET &tr=,! SET &tr=%~3
  19.     SET id=%~2
  20.     SET &I=0
  21.     FORX *NL %~1,&&Vi, @TEAM @CALC #I=%I%+1| SET &Vi[%&I%]=%Vi%
  22.     SET &N=%I%
  23.     SET &V2=
  24.     SET &I=0
  25.     LOOP #%I%<%N%,
  26.     {   CALC #&I=%I% + 1
  27.         ^FIND *Vi[%I%]=, EXIT -
  28.         ^SET<  V2=%%NL%%%%Vi[%I%]%%
  29.         ^MSTR * -delims:%tr%  &&Vi3=<%id%->&Vi[%I%]
  30.         CALC #&&J=%I%
  31.         LOOP #%J%<%N%,
  32.         {   CALC #&J=%J% + 1
  33.             ^MSTR * -delims:%tr% &&VJ3=<%id%->&Vi[%J%]
  34.             ^FIND *Vi3=Vj3, SET Vi[%J%]=
  35.         }
  36.     }

  37.     MSTR * V2=3,0,V2
  38.     ENVI-ret~ %~1=&V2
  39. _END

  40. TrimX  &VS  3   ,  //逗号分开, 第3列开始
  41. MESS. %&VS%
复制代码


点评

谢谢m大,有够学习一阵儿了  详情 回复 发表于 2021-1-11 15:57
回复

使用道具 举报

15514#
发表于 2021-1-11 10:45:38 | 只看该作者
mdyblog 发表于 2021-1-11 09:49
SUBJ 强行加的DRV, 不在核心。(当然可以分析,配对 用户层盘符, 那还要加代码)

加盘符是个办法,但也有特殊情况,比如盘符耗尽的时候。
不知道part命令能否直接通过\Device\HarddiskVolume4这种形式获取到详细信息呢,这样就比较靠谱了

点评

[FirmwareBootDevice "\ArcName\multi(0)disk(0)rdisk(0)partition(2)" "\Device\Harddisk0\Partition2" "\Device\HarddiskVolume2" \Device\Harddisk0\Partition2 就是分区 0:2 PART -phy# list part 0:  详情 回复 发表于 2021-1-11 11:42
回复

使用道具 举报

15515#
 楼主| 发表于 2021-1-11 11:42:22 | 只看该作者
本帖最后由 mdyblog 于 2021-1-11 11:55 编辑
527104427 发表于 2021-1-11 10:45
加盘符是个办法,但也有特殊情况,比如盘符耗尽的时候。
不知道part命令能否直接通过\Device\HarddiskVo ...

[FirmwareBootDevice "\ArcName\multi(0)disk(0)rdisk(0)partition(2)"  "\Device\Harddisk0\Partition2"  "\Device\HarddiskVolume2"
\Device\Harddisk0\Partition2  就是分区 0:2

PART -phy#  list   part 0:2,&&V
MESS. %&V%
// 2     7   1    85929500160   107374182400   167831055   193303682560    2  C:
//这里可得到用户层的盘符

用 "\Device\HarddiskVolume2 也可以 , \Device\换为 \\.\
part list volume \\.\HarddiskVolume2,&&V
// \\.\Harddisk0Partition2\ 0 2 7 7 85929500160 107374182400
\Device\Harddisk0\Partition2 也可对应
part list volume \\.\Harddisk0Partition2,V
// \\.\Harddisk0Partition2\ 0 2 7 7 85929500160 107374182400





点评

这个好!如果能有个 -fill 参数就更好了,直接返回盘符 part -fill list volume \\.\HarddiskVolume2,&&V  详情 回复 发表于 2021-1-11 12:02
回复

使用道具 举报

15516#
发表于 2021-1-11 12:02:03 | 只看该作者
mdyblog 发表于 2021-1-11 11:42
[FirmwareBootDevice "\ArcName\multi(0)disk(0)rdisk(0)partition(2)"  "\Device\Harddisk0\Partition2" ...

这个好!如果能有个 -fill 参数就更好了,直接返回盘符
part -fill list volume \\.\HarddiskVolume2,&&V

点评

PART -iv=8 list part 0:2,&&V MESS. %&V% //C:  详情 回复 发表于 2021-1-11 12:07
回复

使用道具 举报

15517#
 楼主| 发表于 2021-1-11 12:07:07 | 只看该作者
527104427 发表于 2021-1-11 12:02
这个好!如果能有个 -fill 参数就更好了,直接返回盘符
part -fill list volume \\.\HarddiskVolume2,&& ...

PART -iv=8  list   part 0:2,&&V
MESS. %&V%
//C:
回复

使用道具 举报

15518#
发表于 2021-1-11 15:57:45 | 只看该作者
mdyblog 发表于 2021-1-11 10:26
导入数组, 再剔除。

谢谢m大,有够学习一阵儿了
回复

使用道具 举报

15519#
 楼主| 发表于 2021-1-11 23:22:35 | 只看该作者
本帖最后由 mdyblog 于 2021-1-12 09:19 编辑
527104427 发表于 2021-1-11 12:02
这个好!如果能有个 -fill 参数就更好了,直接返回盘符
part -fill list volume \\.\HarddiskVolume2,&& ...

GetBootDev3.wcs.zip (2.92 KB, 下载次数: 7)

PECMD2012.1.88.05.84Stable-210111.7z
回复

使用道具 举报

15520#
发表于 2021-1-12 08:09:04 | 只看该作者
本帖最后由 527104427 于 2021-1-12 08:11 编辑
mdyblog 发表于 2021-1-10 06:42
获得启动分区   
效果:
……
//EXEC -su -incmd =PECMD   SUBJ * \Device\HarddiskVolume2,%Drv1%

EXEC -su -incmd =PECMD   SUBJ * \Device\HarddiskVolume2,%Drv1%
这里是不是搞反了,是不是应该这样写:
EXEC -su -incmd =PECMD   SUBJ * %Drv1%,\Device\HarddiskVolume2

点评

对。 EXEC -su -incmd =PECMD SUBJ * %Drv1%,\Device\HarddiskVolume2  详情 回复 发表于 2021-1-12 09:17
回复

使用道具 举报

15521#
 楼主| 发表于 2021-1-12 09:17:46 | 只看该作者
527104427 发表于 2021-1-12 08:09
EXEC -su -incmd =PECMD   SUBJ * \Device\HarddiskVolume2,%Drv1%
这里是不是搞反了,是不是应该这样写 ...

对。
EXEC -su -incmd =PECMD   SUBJ * %Drv1%,\Device\HarddiskVolume2

点评

请教老大,GetSymbolic "\Device\Harddisk0\Partition1" &&nm2 可以通过 API 方式将 \Device\Harddisk0\Partition1 转换成 \Device\HarddiskVolume1 那么有没有 API 的方法将 \Device\HarddiskVolume1 转换成 \D  详情 回复 发表于 2021-1-12 12:19
回复

使用道具 举报

15522#
发表于 2021-1-12 12:19:50 | 只看该作者
mdyblog 发表于 2021-1-12 09:17
对。
EXEC -su -incmd =PECMD   SUBJ * %Drv1%,\Device\HarddiskVolume2

请教老大,GetSymbolic "\Device\Harddisk0\Partition1"  &&nm2   可以通过 API 方式将 \Device\Harddisk0\Partition1 转换成 \Device\HarddiskVolume1
那么有没有 API 的方法将 \Device\HarddiskVolume1 转换成 \Device\Harddisk0\Partition1 呢,记得我以前问过这样的问题,借这个机会重新问一下吧。

点评

part list volume \Device\HarddiskVolume1 就能 得到 Harddisk之0 和 Partition1 之 1 拼起来 就是 \Device\Harddisk0\Partition1  详情 回复 发表于 2021-1-12 15:30
回复

使用道具 举报

15523#
 楼主| 发表于 2021-1-12 15:30:56 | 只看该作者
本帖最后由 mdyblog 于 2021-1-12 15:36 编辑
527104427 发表于 2021-1-12 12:19
请教老大,GetSymbolic "\Device\Harddisk0\Partition1"  &&nm2   可以通过 API 方式将 \Device\Harddisk ...

\Device\HarddiskVolume1 ==>
part  list  volume   \\.\HarddiskVolume1,V
MESS. %V%
//\\.\HarddiskVolume1                 0                     1                     7 7 32235920896 53693554688
                                          -------------         -----------------
                                         Harddisk0           Partition1

就能 得到  Harddisk之0 和  Partition1 之 1
拼起来 就是  \Device\Harddisk0\Partition1  


这就是API得到的。

点评

既然part命令直接支持\Device\HarddiskVolume1而不用改成\\.\HarddiskVolume1 那别的命令也都弄成支持吧,不然有的支持,有的不支持,不统一。 老大看可以不  详情 回复 发表于 2021-1-12 21:08
老大,提升一下版本号呗,新增加了这么多功能,旧版不适合再运行了。  详情 回复 发表于 2021-1-12 18:50
回复

使用道具 举报

15524#
发表于 2021-1-12 18:50:35 | 只看该作者
mdyblog 发表于 2021-1-12 15:30
\Device\HarddiskVolume1 ==>
part  list  volume   \\.\HarddiskVolume1,V
MESS. %V%

老大,提升一下版本号呗,新增加了这么多功能,旧版不适合再运行了。
回复

使用道具 举报

15525#
发表于 2021-1-12 19:56:53 | 只看该作者
M大,请教一下,PECMD能判断一个已运行的程度是否在顶层运行,若不是,能否设置该程序为顶层运行,比如一个最小化运行的CMD批处理,代码怎么写?

点评

是一个 自己的 PECMD 界面 还是 第三方 APP?  详情 回复 发表于 2021-1-13 07:01
回复

使用道具 举报

15526#
发表于 2021-1-12 21:08:32 | 只看该作者
mdyblog 发表于 2021-1-12 15:30
\Device\HarddiskVolume1 ==>
part  list  volume   \\.\HarddiskVolume1,V
MESS. %V%

既然part命令直接支持\Device\HarddiskVolume1而不用改成\\.\HarddiskVolume1
那别的命令也都弄成支持吧,不然有的支持,有的不支持,不统一。
老大看可以不

点评

新版 已经可以 part list volume \Device\HarddiskVolume1,V 还有什么命令需要 ?  详情 回复 发表于 2021-1-13 07:03
回复

使用道具 举报

15527#
 楼主| 发表于 2021-1-13 07:01:59 | 只看该作者
conlin888 发表于 2021-1-12 19:56
M大,请教一下,PECMD能判断一个已运行的程度是否在顶层运行,若不是,能否设置该程序为顶层运行,比如一个 ...

是一个 自己的 PECMD 界面 还是 第三方 APP?

点评

谢谢M大回复,已经解决了. 是第三方程序,使用下面的命令就可以了. envi^ envimode=1 find --wid &V,加载分区 envi @@pos=%&V%:::::4::1:1 envi @@visible=%&V%:1  详情 回复 发表于 2021-1-13 09:13
回复

使用道具 举报

15528#
 楼主| 发表于 2021-1-13 07:03:58 | 只看该作者
527104427 发表于 2021-1-12 21:08
既然part命令直接支持\Device\HarddiskVolume1而不用改成\\.\HarddiskVolume1
那别的命令也都弄成支持吧 ...

新版 已经可以

part  list  volume   \Device\HarddiskVolume1,V

还有什么命令需要 ?

点评

比如FEXT、FILE、FDRV等等这些,但仔细一想,\Device\HarddiskVolume1 这种不能跟本地文件的名字区分开来,如果支持这样写的话可能会出其它的问题,还是算了吧。  详情 回复 发表于 2021-1-13 11:27
回复

使用道具 举报

15529#
发表于 2021-1-13 09:13:19 | 只看该作者
mdyblog 发表于 2021-1-13 07:01
是一个 自己的 PECMD 界面 还是 第三方 APP?


谢谢M大回复,已经解决了.


是第三方程序,使用下面的命令就可以了.

envi^ envimode=1
find --wid &V,加载分区
envi @@pos=%&V%:::::4::1:1
envi @@visible=%&V%:1
回复

使用道具 举报

15530#
发表于 2021-1-13 11:27:33 | 只看该作者
mdyblog 发表于 2021-1-13 07:03
新版 已经可以

part  list  volume   \Device\HarddiskVolume1,V

比如FEXT、FILE、FDRV等等这些,但仔细一想,\Device\HarddiskVolume1 这种不能跟本地文件的名字区分开来,如果支持这样写的话可能会出其它的问题,还是算了吧。

点评

"\ArcName\multi(0)disk(0)rdisk(0)partition(2)" "\Device\Harddisk0\Partition2" "\Device\HarddiskVolume2" "\??\Volume{a372fe59-963e-11e3-8859-806e6f6e6963}" "\??\Volume{a372fe5a-963e-11e3-8859  详情 回复 发表于 2021-1-15 17:43
估计得加个参数来区分  详情 回复 发表于 2021-1-13 21:12
回复

使用道具 举报

15531#
发表于 2021-1-13 21:12:32 来自手机 | 只看该作者
527104427 发表于 2021-1-13 11:27
比如FEXT、FILE、FDRV等等这些,但仔细一想,\Device\HarddiskVolume1 这种不能跟本地文件的名字区分开来 ...

估计得加个参数来区分
回复

使用道具 举报

15532#
发表于 2021-1-14 01:24:36 | 只看该作者
FORX /delims:  ** 对齐

这个在更新日志里有,但是说明书里没写具体用法。

点评

建议 不用了。  详情 回复 发表于 2021-1-15 17:44
回复

使用道具 举报

15533#
发表于 2021-1-14 22:52:58 | 只看该作者
好东西  谢谢分享了
回复

使用道具 举报

15534#
 楼主| 发表于 2021-1-15 17:43:13 | 只看该作者
527104427 发表于 2021-1-13 11:27
比如FEXT、FILE、FDRV等等这些,但仔细一想,\Device\HarddiskVolume1 这种不能跟本地文件的名字区分开来 ...

"\ArcName\multi(0)disk(0)rdisk(0)partition(2)"  "\Device\Harddisk0\Partition2"  "\Device\HarddiskVolume2"       "\??\Volume{a372fe59-963e-11e3-8859-806e6f6e6963}"   "\??\Volume{a372fe5a-963e-11e3-8859-806e6f6e6963}"是设备名, 就是一个分区盘片本身。



FEXT  FILE 、FDRV  FORX 等操作的 是 文件 系统。 对应如下:


  \Device\Harddisk0\Partition2   对应    \\?\Harddisk0Partition2\

\Device\HarddiskVolume2  对应    \\?\HarddiskVolume2\
\??\Volume{a372fe59-963e-11e3-8859-806e6f6e6963}   对应    \\?\Volume{a372fe59-963e-11e3-8859-806e6f6e6963}\




FORX  \\?\ArcName\multi(0)disk(0)rdisk(0)partition(2)\*.*,&V,,*
FORX  \\?\HarddiskVolume2\*.*,&V,,*
FORX  \\?\Volume{a372fe59-963e-11e3-8859-806e6f6e6963}\*.*,&V,,*
FORX  \\?\Harddisk0Partition2\*.*,&V,,*


MESS. %&V%












点评

发现两个问题,如图: [attachimg]473421[/attachimg] ENVI &&Drv=Y: exec =imdisk -a -o awe -m %&Drv% -s 32M -p "/fs:NTFS /q /y" WAIT 5000 EXEC*- -timeout:1000 -incmd &&A=pecmd TEAM PART list d  详情 回复 发表于 2021-1-19 19:56
回复

使用道具 举报

15535#
 楼主| 发表于 2021-1-15 17:44:28 | 只看该作者
本帖最后由 mdyblog 于 2021-1-15 18:11 编辑
红毛樱木 发表于 2021-1-14 01:24
FORX /delims:  ** 对齐

这个在更新日志里有,但是说明书里没写具体用法。
建议不用。
FORX  /delims:   ==》  *NL:
**  ==> *v



回复

使用道具 举报

15536#
发表于 2021-1-15 22:44:29 | 只看该作者
本帖最后由 dos时代菜鸟 于 2021-1-15 22:53 编辑

据说新版支持 分辨 uefi/传统 bios 启动环境,
有具体代码么?
是否还是 用的 kernel32.dll GetFirmwareEnvironmentVariableExW 函数的句柄?

找到了

ENVI ?$&Buf=FVAR,BootOrder
FIND *&Buf=, envi BootMODE=BIOS! envi BootMODE=UEFI
mess %BootMODE%

回复

使用道具 举报

15537#
发表于 2021-1-16 07:23:37 | 只看该作者
本帖最后由 powerpcpc 于 2021-1-16 09:50 编辑

ENVI ?$&Buf=FVAR,BootOrder
FIND *&Buf=, envi BootMODE=BIOS! envi BootMODE=UEFI
mess %BootMODE%

ENVI ?$&v=FVAR,BootOrder
mess %&v%
0x00 0x00 0x01

Ok. UnderStand! Good Result!

Q1
CALL $**ret:&&r Kernel32.dll,GetFirmwareType,0
ret[0] = 1 errocode success
ret[1] = 1 bios   2 uefi
how get ret[1] ?

Q2
kernel32.dll GetFirmwareEnvironmentVariableW
how to?
DWORD GetFirmwareEnvironmentVariableW(
  LPCWSTR lpName,
  LPCWSTR lpGuid,
  PVOID   pBuffer,
  DWORD   nSize
);





点评

Q1 CALL $**ret:&&r Kernel32.dll,GetFirmwareType,0 ret[0] = 1 errocode success ret[1] = 1 bios 2 uefi how get ret[1] ? ==================== ENVI$# ret=*8 0 CALL $--qd --ret:&&r Kernel32.  详情 回复 发表于 2021-1-16 11:09
回复

使用道具 举报

15538#
 楼主| 发表于 2021-1-16 11:09:54 | 只看该作者
powerpcpc 发表于 2021-1-16 07:23
ENVI ?$&Buf=FVAR,BootOrder
FIND *&Buf=, envi BootMODE=BIOS! envi BootMODE=UEFI
mess %BootMODE%

Q1
CALL $**ret:&&r Kernel32.dll,GetFirmwareType,0
ret[0] = 1 errocode success
ret[1] = 1 bios   2 uefi
how get ret[1] ?

====================
ENVI$#  ret=*8  0
CALL $--qd --ret:&&r   Kernel32.dll,GetFirmwareType,*&ret

MESS  ret=[%&ret%] r=%&r%





kernel32.dll GetFirmwareEnvironmentVariableW
how to?
DWORD GetFirmwareEnvironmentVariableW(
  LPCWSTR lpName,
  LPCWSTR lpGuid,
  PVOID   pBuffer,
  DWORD   nSize
);
=================
SET &name=BootOrder  //自己填
SET &Guid={8BE4DF61-93CA-11D2-AA0D-00E098032B8C}

SET  &sz=8192
SET$#  &Guid=*%sz% 0


CALL $--qd --ret:&&r   Kernel32.dll,GetFirmwareEnvironmentVariableW,*&name,*&Guid,*&Buf,#%&sz%
MESS  dat=[%&Buf%]



点评

Get ┐ and ┌ . how convert decimal number?  发表于 2021-1-16 12:15
ENVI$# ret=*8 0 --> ENVI$# &ret=*8 0  发表于 2021-1-16 12:01
ENVI$# ret=*8 0 CALL $--qd --ret:&&r Kernel32.dll,GetFirmwareType,*&ret MESS ret=[%&ret%] r=%&r% Result(Administrator excuted.) ret=[] r=0 Value ??  发表于 2021-1-16 11:53
回复

使用道具 举报

15539#
发表于 2021-1-16 12:50:18 | 只看该作者
本帖最后由 powerpcpc 于 2021-1-16 12:51 编辑

ENVI$# &ret=*8 0
CALL $--qd --ret:&&r Kernel32.dll,GetFirmwareType,*&ret
MESS ret=[%&ret%] r=%&r%

Result
UEFI =  ┐
BIOS = ┌

how convert to decimal number?

点评

ENVI$# &ret=*8 0 CALL $--qd --ret:&&r Kernel32.dll,GetFirmwareType,*&ret ENVI?int &ret=&ret1 MESS ret=[%&ret%] [%&ret1%] r=%&r% ============================== ┃ │ │ENVI?DataType[0[@]]  详情 回复 发表于 2021-1-16 13:15
回复

使用道具 举报

15540#
发表于 2021-1-16 13:15:22 | 只看该作者
本帖最后由 红毛樱木 于 2021-1-16 13:19 编辑
powerpcpc 发表于 2021-1-16 12:50
ENVI$# &ret=*8 0
CALL $--qd --ret:&&r Kernel32.dll,GetFirmwareType,*&ret
MESS ret=[%&ret%] r=%&r%
...

ENVI$# &ret=*4 0     //I think 4 bytes is enough.
CALL $--qd --bool --ret:&&r Kernel32.dll,GetFirmwareType,*&ret
ENVI?int &ret=&ret1
MESS ret=[%&ret%] [%&ret1%] r=%&r%

==============================
┃    │    │ENVI?DataType[0[@]] SrcPeVarName=VarName[:BitNumOffset] //to obtain binary data of specified┃
┃    │    │type in PE object. 0:to fill zero.@:to remove 0x. s: for sign.                              ┃
┃    │    │//DataType:char wchar short int long longlong int64 float double ldouble ptr(pointer)

点评

成功, 但,不明白。  详情 回复 发表于 2021-1-16 13:53
Thankyou! "ENVI?int" OK! have a nice day!  发表于 2021-1-16 13:24
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2026-1-21 14:06

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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