无忧启动论坛

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

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

    [复制链接]
15421#
发表于 2020-11-24 09:44:02 | 只看该作者
回复

使用道具 举报

15422#
发表于 2020-11-24 20:04:04 | 只看该作者
这里有个DLL不能加载,是DLL特殊吗?测试环境Win7x64
M大有空看下
CALL $--ret:返回名 ,-LoadLibrary,加载DLL路径

DLL不能内存方式加载.7z (2.41 MB, 下载次数: 14)

点评

PECMD2012.1.88.05.84Stable-201130.7z 版 加强了 -loadlibrary, 也支持--cd 自动转到DLL所在目录。 ┃ │ │CALL $--ret:返回名 [--cd ][--nrcd ] ,-LoadLibrary,加载DLL路径 //加载DLL得到句柄 ┃  详情 回复 发表于 2020-11-30 09:31
这个DLL还依赖其他的DLL。 需要先转移到 该目录。效果: [attachimg]469484[/attachimg]  详情 回复 发表于 2020-11-30 08:20
回复

使用道具 举报

15423#
发表于 2020-11-26 09:45:53 | 只看该作者
66666666666666666666
回复

使用道具 举报

15424#
发表于 2020-11-27 16:20:57 来自手机 | 只看该作者
本帖最后由 my9823 于 2020-11-27 16:30 编辑

dir file_list /s e:\boot\pesoft
mess %file_list%
假如存在e:\pesoft\passwd\ntpwdedit.exe
mess显示的窗口中这行\n会被当做换行符断开显示,有什么办法不让它换行?
假如我想去除列表中的e:\,除了用
sed v=0:0,e:\\,%file_list%
什么时候加-ex参数,能使用^[Ee]:\\么,这个file_list是一行还是多行?

点评

sed -ex v=0:0,e:\\,file_list 默认就不区分大小写的吧  详情 回复 发表于 2020-11-27 18:17
mess. 后面加个.号  详情 回复 发表于 2020-11-27 18:16
回复

使用道具 举报

15425#
发表于 2020-11-27 18:16:04 来自手机 | 只看该作者
my9823 发表于 2020-11-27 16:20
dir file_list /s e:\boot\pesoft
mess %file_list%
假如存在e:\pesoft\passwd\ntpwdedit.exe

mess.
后面加个.号

点评

mess.%file_list%?吗?  详情 回复 发表于 2020-11-27 18:27
回复

使用道具 举报

15426#
发表于 2020-11-27 18:17:32 来自手机 | 只看该作者
my9823 发表于 2020-11-27 16:20
dir file_list /s e:\boot\pesoft
mess %file_list%
假如存在e:\pesoft\passwd\ntpwdedit.exe

sed -ex v=0:0,e:\\,file_list

默认就不区分大小写的吧
回复

使用道具 举报

15427#
发表于 2020-11-27 18:27:13 来自手机 | 只看该作者
红毛樱木 发表于 2020-11-27 18:16
mess.
后面加个.号

mess.%file_list%?吗?
回复

使用道具 举报

15428#
发表于 2020-11-27 22:33:54 | 只看该作者

回复

使用道具 举报

15429#
发表于 2020-11-27 23:01:00 | 只看该作者
  1. mess. %file_list%
复制代码
回复

使用道具 举报

15430#
发表于 2020-11-28 09:42:14 来自手机 | 只看该作者
使用正则表达式
sed vv=0,^.*?\\{.*},\1,%file_list%
只能替换文件列表第一行的盘符和斜杠,变量中的文件列表是一行吗?

点评

PECMD2012.1.88.05.84Stable-201129B.7z SED 加了个分行轮询处理功能, 开关-L sed -ex -L &vv=0,^.:\\{.*},\1,&file_list  详情 回复 发表于 2020-11-29 23:43
SET$ &NLA=0a sed -ex &vv=0,[^%&NLA%\\]*\\,,&file_list  详情 回复 发表于 2020-11-29 20:45
你要的是这种效果吧: dir &file_list /s %&CurDir% sed -ex &vv=0,[a-zA-Z]*\:\\,,&file_list mess. %&vv% [attachimg]469360[/attachimg] [attachimg]469361[/attachimg]  详情 回复 发表于 2020-11-28 12:50
这样试试呢?  详情 回复 发表于 2020-11-28 10:41
回复

使用道具 举报

15431#
发表于 2020-11-28 10:41:00 | 只看该作者
my9823 发表于 2020-11-28 09:42
使用正则表达式
sed vv=0,^.*?\\{.*},\1,%file_list%
只能替换文件列表第一行的盘符和斜杠,变量中的文件 ...
  1. sed -ex vv=0,^.*?\\{.*},\1,file_list
复制代码

这样试试呢?

点评

PECMD2012.1.88.05.84Stable-201129.7z\示例\SMART硬盘信息.wcs 测试通过, 512字节信息。  详情 回复 发表于 2020-11-29 20:35
回复

使用道具 举报

15432#
发表于 2020-11-28 12:50:05 | 只看该作者
my9823 发表于 2020-11-28 09:42
使用正则表达式
sed vv=0,^.*?\\{.*},\1,%file_list%
只能替换文件列表第一行的盘符和斜杠,变量中的文件 ...

你要的是这种效果吧:

dir &file_list /s %&CurDir%
sed -ex &vv=0,[a-zA-Z]*\:\\,,&file_list
mess. %&vv%












回复

使用道具 举报

15433#
发表于 2020-11-28 13:26:15 来自手机 | 只看该作者
是的,请问:需要转义吗?

点评

加上比较保险吧,反正我是这样想的,凡是符号都算转义  详情 回复 发表于 2020-11-28 14:59
回复

使用道具 举报

15434#
发表于 2020-11-28 14:59:09 | 只看该作者
my9823 发表于 2020-11-28 13:26
是的,请问:需要转义吗?

加上比较保险吧,反正我是这样想的,凡是符号都算转义
回复

使用道具 举报

15435#
发表于 2020-11-29 11:57:39 | 只看该作者
五大有道理,用过gnuwin的sed.exe貌似各种操作只限于英文,不过正则表达式比pecmd的sed命令要丰富,但pecmd的sed支持替换中文啊!
回复

使用道具 举报

15436#
 楼主| 发表于 2020-11-29 20:35:23 | 只看该作者

PECMD2012.1.88.05.84Stable-201129.7z\示例\SMART硬盘信息.wcs
测试通过, 512字节信息。

点评

请问能读取硬盘的型号序列号之类的信息吗?  详情 回复 发表于 2020-12-1 23:38
比如图中的信息: [attachimg]469505[/attachimg] [attachimg]469506[/attachimg]  详情 回复 发表于 2020-11-30 11:34
smart能否做成比较直观的数据啊,就是一般人都能直接看懂的  详情 回复 发表于 2020-11-30 10:25
SOCK --file [*] 名称;[we][-rwd];文件名 //打开一个自动释放的文件句柄,给API用,w可写,-重置共享 前面是[we]后面是w可写,w和e可以分开用吗?分别啥意思呢  详情 回复 发表于 2020-11-29 21:41
收到,有的玩了。  详情 回复 发表于 2020-11-29 21:36
回复

使用道具 举报

15437#
发表于 2020-11-29 21:36:00 | 只看该作者
mdyblog 发表于 2020-11-29 20:35
PECMD2012.1.88.05.84Stable-201129.7z\示例\SMART硬盘信息.wcs
测试通过, 512字节信息。

收到,有的玩了。
回复

使用道具 举报

15438#
发表于 2020-11-29 21:41:48 | 只看该作者
mdyblog 发表于 2020-11-29 20:35
PECMD2012.1.88.05.84Stable-201129.7z\示例\SMART硬盘信息.wcs
测试通过, 512字节信息。

SOCK --file
  • 名称;[we][-rwd];文件名  //打开一个自动释放的文件句柄,给API用,w可写,-重置共享


    前面是[we]后面是w可写,w和e可以分开用吗?分别啥意思呢
  • 点评

    WE 可写, 如果不存在,不创建,失败 (W&ExistOnly) W 可写, 如果不存在,创建  详情 回复 发表于 2020-11-29 22:11
    回复

    使用道具 举报

    15439#
     楼主| 发表于 2020-11-29 22:11:17 | 只看该作者
    本帖最后由 mdyblog 于 2020-11-29 22:15 编辑
    红毛樱木 发表于 2020-11-29 21:41
    SOCK --file 名称;[we][-rwd];文件名  //打开一个自动释放的文件句柄,给API用,w可写,-重置共享

    WE  可写, 如果不存在,不创建,失败 (W&ExistOnly)
    W   可写, 如果不存在,创建
    调用 CreateFileW的参数不同。


    这行也可以:
    CALL $--sret:&&hDevice --qd --bool Kernel32.dll,CreateFileW,$\\.\PhysicalDrive%&ucDriveIndex%,#0xC0000000,#7,#0,#3,#0,#0

    另一行也可以:
    CALL $--ret:&bRet --qd --bool Kernel32.dll,DeviceIoControl,#%&hDevice%,#%&SMART_RCV_DRIVE_DATA%,#%&pstCIP%,#%&sizeof_SENDCMDINPARAMS%,*&sAttributes,#%&sizeof_attr%,*&dwRet,#0


    点评

    ExistOnly 是 #define OPEN_EXISTING 3 吗?  详情 回复 发表于 2020-11-29 22:35
    回复

    使用道具 举报

    15440#
    发表于 2020-11-29 22:35:06 | 只看该作者
    mdyblog 发表于 2020-11-29 22:11
    WE  可写, 如果不存在,不创建,失败 (W&ExistOnly)
    W   可写, 如果不存在,创建
    调用 CreateFileW的 ...

    ExistOnly

    #define OPEN_EXISTING       3
    吗?

    点评

    对。  详情 回复 发表于 2020-11-29 22:40
    回复

    使用道具 举报

    15441#
     楼主| 发表于 2020-11-29 22:40:26 | 只看该作者
    红毛樱木 发表于 2020-11-29 22:35
    ExistOnly

    #define OPEN_EXISTING       3

    对。

    点评

    这个我之前翻译的,M大看看和你内置的功能是否一样。奇怪,我这里win7x64系统下读不出来,老是返回错误1117,在家里win10的电脑上又可以。用你的内置代码测试了下,结果一样。是不是有写情况就是注定读不了的呀,有  详情 回复 发表于 2020-11-29 22:44
    回复

    使用道具 举报

    15442#
    发表于 2020-11-29 22:44:03 | 只看该作者
    1. ENVI^ ENVIMODE=1
    2. //LOGS **2 * %&CurDir%\log.log
    3. ENVI &&hd=0
    4. IFEX $1<0,
    5. {*
    6. #define GENERIC_READ                     (0x80000000L)
    7. #define GENERIC_WRITE                    (0x40000000L)
    8. #define GENERIC_EXECUTE                  (0x20000000L)
    9. #define GENERIC_ALL                      (0x10000000L)
    10. }
    11. ENVI &&GENERIC_READ=0x80000000
    12. ENVI &&GENERIC_WRITE=0x40000000
    13. //ENVI &&lpFileName=\\\\.\\PhysicalDrive%&&hd%
    14. ENVI &&lpFileName=\\.\PhysicalDrive%&&hd%
    15. CALC &&dwDesiredAccess=%&&GENERIC_READ% | %&&GENERIC_WRITE%
    16. IFEX $1<0,
    17. {*
    18. // The FILE_READ_DATA and FILE_WRITE_DATA constants are also defined in
    19. // devioctl.h as FILE_READ_ACCESS and FILE_WRITE_ACCESS. The values for these
    20. // constants *MUST* always be in sync.
    21. // The values are redefined in devioctl.h because they must be available to
    22. // both DOS and NT.
    23. //

    24. #define FILE_READ_DATA            ( 0x0001 )    // file & pipe
    25. #define FILE_LIST_DIRECTORY       ( 0x0001 )    // directory

    26. #define FILE_WRITE_DATA           ( 0x0002 )    // file & pipe
    27. #define FILE_ADD_FILE             ( 0x0002 )    // directory

    28. #define FILE_APPEND_DATA          ( 0x0004 )    // file
    29. #define FILE_ADD_SUBDIRECTORY     ( 0x0004 )    // directory
    30. #define FILE_CREATE_PIPE_INSTANCE ( 0x0004 )    // named pipe


    31. #define FILE_READ_EA              ( 0x0008 )    // file & directory

    32. #define FILE_WRITE_EA             ( 0x0010 )    // file & directory

    33. #define FILE_EXECUTE              ( 0x0020 )    // file
    34. #define FILE_TRAVERSE             ( 0x0020 )    // directory

    35. #define FILE_DELETE_CHILD         ( 0x0040 )    // directory

    36. #define FILE_READ_ATTRIBUTES      ( 0x0080 )    // all

    37. #define FILE_WRITE_ATTRIBUTES     ( 0x0100 )    // all

    38. #define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF)

    39. #define FILE_GENERIC_READ         (STANDARD_RIGHTS_READ     |\
    40.                                    FILE_READ_DATA           |\
    41.                                    FILE_READ_ATTRIBUTES     |\
    42.                                    FILE_READ_EA             |\
    43.                                    SYNCHRONIZE)


    44. #define FILE_GENERIC_WRITE        (STANDARD_RIGHTS_WRITE    |\
    45.                                    FILE_WRITE_DATA          |\
    46.                                    FILE_WRITE_ATTRIBUTES    |\
    47.                                    FILE_WRITE_EA            |\
    48.                                    FILE_APPEND_DATA         |\
    49.                                    SYNCHRONIZE)


    50. #define FILE_GENERIC_EXECUTE      (STANDARD_RIGHTS_EXECUTE  |\
    51.                                    FILE_READ_ATTRIBUTES     |\
    52.                                    FILE_EXECUTE             |\
    53.                                    SYNCHRONIZE)

    54. #define FILE_SHARE_READ                 0x00000001  
    55. #define FILE_SHARE_WRITE                0x00000002  
    56. #define FILE_SHARE_DELETE               0x00000004  
    57. #define FILE_ATTRIBUTE_READONLY             0x00000001  
    58. #define FILE_ATTRIBUTE_HIDDEN               0x00000002  
    59. #define FILE_ATTRIBUTE_SYSTEM               0x00000004  
    60. #define FILE_ATTRIBUTE_DIRECTORY            0x00000010  
    61. #define FILE_ATTRIBUTE_ARCHIVE              0x00000020  
    62. #define FILE_ATTRIBUTE_DEVICE               0x00000040  
    63. #define FILE_ATTRIBUTE_NORMAL               0x00000080  
    64. #define FILE_ATTRIBUTE_TEMPORARY            0x00000100  
    65. #define FILE_ATTRIBUTE_SPARSE_FILE          0x00000200  
    66. #define FILE_ATTRIBUTE_REPARSE_POINT        0x00000400  
    67. #define FILE_ATTRIBUTE_COMPRESSED           0x00000800  
    68. #define FILE_ATTRIBUTE_OFFLINE              0x00001000  
    69. #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED  0x00002000  
    70. #define FILE_ATTRIBUTE_ENCRYPTED            0x00004000  
    71. #define FILE_ATTRIBUTE_INTEGRITY_STREAM     0x00008000  
    72. #define FILE_ATTRIBUTE_VIRTUAL              0x00010000  
    73. #define FILE_ATTRIBUTE_NO_SCRUB_DATA        0x00020000  
    74. #define FILE_ATTRIBUTE_EA                   0x00040000  
    75. #define FILE_NOTIFY_CHANGE_FILE_NAME    0x00000001   
    76. #define FILE_NOTIFY_CHANGE_DIR_NAME     0x00000002   
    77. #define FILE_NOTIFY_CHANGE_ATTRIBUTES   0x00000004   
    78. #define FILE_NOTIFY_CHANGE_SIZE         0x00000008   
    79. #define FILE_NOTIFY_CHANGE_LAST_WRITE   0x00000010   
    80. #define FILE_NOTIFY_CHANGE_LAST_ACCESS  0x00000020   
    81. #define FILE_NOTIFY_CHANGE_CREATION     0x00000040   
    82. #define FILE_NOTIFY_CHANGE_SECURITY     0x00000100   
    83. #define FILE_ACTION_ADDED                   0x00000001   
    84. #define FILE_ACTION_REMOVED                 0x00000002   
    85. #define FILE_ACTION_MODIFIED                0x00000003   
    86. #define FILE_ACTION_RENAMED_OLD_NAME        0x00000004   
    87. #define FILE_ACTION_RENAMED_NEW_NAME        0x00000005   
    88. #define MAILSLOT_NO_MESSAGE             ((DWORD)-1)
    89. #define MAILSLOT_WAIT_FOREVER           ((DWORD)-1)
    90. #define FILE_CASE_SENSITIVE_SEARCH          0x00000001  
    91. #define FILE_CASE_PRESERVED_NAMES           0x00000002  
    92. #define FILE_UNICODE_ON_DISK                0x00000004  
    93. #define FILE_PERSISTENT_ACLS                0x00000008  
    94. #define FILE_FILE_COMPRESSION               0x00000010  
    95. #define FILE_VOLUME_QUOTAS                  0x00000020  
    96. #define FILE_SUPPORTS_SPARSE_FILES          0x00000040  
    97. #define FILE_SUPPORTS_REPARSE_POINTS        0x00000080  
    98. #define FILE_SUPPORTS_REMOTE_STORAGE        0x00000100  
    99. #define FILE_VOLUME_IS_COMPRESSED           0x00008000  
    100. #define FILE_SUPPORTS_OBJECT_IDS            0x00010000  
    101. #define FILE_SUPPORTS_ENCRYPTION            0x00020000  
    102. #define FILE_NAMED_STREAMS                  0x00040000  
    103. #define FILE_READ_ONLY_VOLUME               0x00080000  
    104. #define FILE_SEQUENTIAL_WRITE_ONCE          0x00100000  
    105. #define FILE_SUPPORTS_TRANSACTIONS          0x00200000  
    106. #define FILE_SUPPORTS_HARD_LINKS            0x00400000  
    107. #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES   0x00800000  
    108. #define FILE_SUPPORTS_OPEN_BY_FILE_ID       0x01000000  
    109. #define FILE_SUPPORTS_USN_JOURNAL           0x02000000  
    110. #define FILE_SUPPORTS_INTEGRITY_STREAMS     0x04000000  
    111. #define FILE_INVALID_FILE_ID               ((LONGLONG)-1LL)
    112. typedef struct _FILE_ID_128 {                              
    113.     BYTE  Identifier[16];                                   
    114. } FILE_ID_128, *PFILE_ID_128;                              
    115. }
    116. ENVI &&FILE_SHARE_READ=0x00000001  
    117. ENVI &&FILE_SHARE_WRITE=0x00000002  
    118. ENVI &&FILE_SHARE_DELETE=0x00000004
    119. CALC &&dwShareMode=%&&FILE_SHARE_DELETE% | %&&FILE_SHARE_READ% | %&&FILE_SHARE_WRITE%
    120. IFEX $1<0,
    121. {*
    122. #define CREATE_NEW          1
    123. #define CREATE_ALWAYS       2
    124. #define OPEN_EXISTING       3
    125. #define OPEN_ALWAYS         4
    126. #define TRUNCATE_EXISTING   5

    127. #define INVALID_FILE_SIZE ((DWORD)0xFFFFFFFF)
    128. #define INVALID_SET_FILE_POINTER ((DWORD)-1)
    129. #define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
    130. }
    131. ENVI &&OPEN_EXISTING=3
    132. CALC &&dwFlagsAndAttributes=%&&OPEN_EXISTING%
    133. //失败返回INVALID_HANDLE_VALUE=-1
    134. CALL $--qd --ret:&&hDevice Kernel32.dll,CreateFileW,$%&&lpFileName%,#%&&dwDesiredAccess%,#%&&dwShareMode%,#0,#%&&dwFlagsAndAttributes%,#0,#0
    135. CALL $--ret:&&GetLastErrorRet Kernel32.dll,GetLastError
    136. MESS. %&&hDevice% %&&GetLastErrorRet%
    137. IFEX $%&&hDevice%=-1,EXIT


    138. CALC &&SMART_RCV_DRIVE_DATA=508040  //这个用VS算出来的,我也不知道怎么算的 - -!
    139. CALC &&dwIoControlCode=%&&SMART_RCV_DRIVE_DATA%

    140. //结构体
    141. IFEX $1<0,
    142. {*
    143. typedef struct _SENDCMDINPARAMS {
    144.         DWORD   cBufferSize;            // Buffer size in bytes                             //4b
    145.         IDEREGS irDriveRegs;            // Structure with drive register values.            //8b
    146.         BYTE     bDriveNumber;           // Physical drive number to send                   //1b
    147.                                                                 // command to (0,1,2,3).
    148.         BYTE     bReserved[3];           // Reserved for future expansion.                  //3b
    149.         DWORD   dwReserved[4];          // For future use.                                  //16b
    150.         BYTE     bBuffer[1];                     // Input buffer.                           //1b
    151. } SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;                                   //33b

    152. typedef struct _IDEREGS {
    153.         BYTE     bFeaturesReg;           // Used for specifying SMART "commands".
    154.         BYTE     bSectorCountReg;        // IDE sector count register
    155.         BYTE     bSectorNumberReg;       // IDE sector number register
    156.         BYTE     bCylLowReg;             // IDE low order cylinder value
    157.         BYTE     bCylHighReg;            // IDE high order cylinder value
    158.         BYTE     bDriveHeadReg;          // IDE drive/head register
    159.         BYTE     bCommandReg;            // Actual IDE command.
    160.         BYTE     bReserved;                      // reserved for future use.  Must be zero.
    161. } IDEREGS, *PIDEREGS, *LPIDEREGS;                                                           //8b
    162. }
    163. ENVI &&nInBufferSize=33
    164. ENVI$# &&lpInBuffer=*%&&nInBufferSize% 0
    165. IFEX $1<0,
    166. {*
    167. #define READ_ATTRIBUTE_BUFFER_SIZE  512
    168. #define IDENTIFY_BUFFER_SIZE        512
    169. #define READ_THRESHOLD_BUFFER_SIZE  512
    170. #define SMART_LOG_SECTOR_SIZE       512
    171. }
    172. ENVI &&READ_ATTRIBUTE_BUFFER_SIZE=512
    173. ENVI-long &&cBufferSize=%&&READ_ATTRIBUTE_BUFFER_SIZE%
    174. ENVI$# &&irDriveRegs=*8 0
    175. IFEX $1<0,
    176. {*
    177. #define READ_ATTRIBUTES         0xD0
    178. #define READ_THRESHOLDS         0xD1
    179. #define ENABLE_DISABLE_AUTOSAVE 0xD2
    180. #define SAVE_ATTRIBUTE_VALUES   0xD3
    181. #define EXECUTE_OFFLINE_DIAGS   0xD4
    182. #define SMART_READ_LOG          0xD5
    183. #define SMART_WRITE_LOG         0xd6
    184. #define ENABLE_SMART            0xD8
    185. #define DISABLE_SMART           0xD9
    186. #define RETURN_SMART_STATUS     0xDA
    187. #define ENABLE_DISABLE_AUTO_OFFLINE 0xDB
    188. #endif /* _WIN32_WINNT >= 0x0400 */
    189. }
    190. ENVI &&READ_ATTRIBUTES=0xD0
    191. ENVI-char &&bFeaturesReg=%&&READ_ATTRIBUTES%
    192. ENVI-char &&bSectorCountReg=1
    193. ENVI-char &&bSectorNumberReg=1
    194. IFEX $1<0,
    195. {*
    196. //
    197. // Cylinder register defines for SMART command
    198. //

    199. #define SMART_CYL_LOW   0x4F
    200. #define SMART_CYL_HI    0xC2
    201. }
    202. ENVI &&SMART_CYL_LOW=0x4F
    203. ENVI &&SMART_CYL_HI=0xC2
    204. ENVI-char &&bCylLowReg=%&&SMART_CYL_LOW%
    205. ENVI-char &&bCylHighReg=%&&SMART_CYL_HI%
    206. ENVI-char &&bDriveHeadReg=0xA0
    207. IFEX $1<0,
    208. {*
    209. //
    210. // Valid values for the bCommandReg member of IDEREGS.
    211. //

    212. #define ATAPI_ID_CMD    0xA1            // Returns ID sector for ATAPI.
    213. #define ID_CMD          0xEC            // Returns ID sector for ATA.
    214. #define SMART_CMD       0xB0            // Performs SMART cmd.
    215.                                         // Requires valid bFeaturesReg,
    216.                                         // bCylLowReg, and bCylHighReg
    217. }
    218. ENVI &&SMART_CMD=0xB0
    219. ENVI-char &&bCommandReg=%&&SMART_CMD%
    220. ENVI-copy &&irDriveRegs=&&bFeaturesReg;;1;0
    221. ENVI-copy &&irDriveRegs=&&bSectorCountReg;;1;1
    222. ENVI-copy &&irDriveRegs=&&bSectorNumberReg;;1;2
    223. ENVI-copy &&irDriveRegs=&&bCylLowReg;;1;3
    224. ENVI-copy &&irDriveRegs=&&bCylHighReg;;1;4
    225. ENVI-copy &&irDriveRegs=&&bDriveHeadReg;;1;5
    226. ENVI-copy &&irDriveRegs=&&bCommandReg;;1;6
    227. ENVI-char &&bDriveNumber=%&&hd%
    228. ENVI-copy &&lpInBuffer=&&cBufferSize;;4;0
    229. ENVI-copy &&lpInBuffer=&&irDriveRegs;;8;4
    230. ENVI-copy &&lpInBuffer=&&bDriveNumber;;1;12
    231. //BYTE szAttributes[sizeof(SENDCMDOUTPARAMS) + READ_ATTRIBUTE_BUFFER_SIZE - 1];     17 + 512 -1
    232. IFEX $1<0,
    233. {*
    234. typedef struct _SENDCMDOUTPARAMS {
    235.         DWORD                   cBufferSize;            // Size of bBuffer in bytes
    236.         DRIVERSTATUS            DriverStatus;           // Driver status structure.
    237.         BYTE                    bBuffer[1];             // Buffer of arbitrary length in which to store the data read from the                                                                                  // drive.
    238. } SENDCMDOUTPARAMS, *PSENDCMDOUTPARAMS, *LPSENDCMDOUTPARAMS;                                                                        //17b
    239. }
    240. CALC &&nOutBufferSize=17 + 512 -1
    241. //ENVI-char &&lpOutBuffer=%&&nOutBufferSize%
    242. ENVI$# &&lpOutBuffer=*%&&nOutBufferSize% 0
    243. MESS. LAI
    244. //ENVI-long &&lpBytesReturned=0
    245. ENVI$# &&lpBytesReturned=*8 0
    246. CALL $--qd --bool --ret:&&bResult Kernel32.dll,DeviceIoControl,#%&&hDevice%,#%&&dwIoControlCode%,*&&lpInBuffer,#%&&nInBufferSize%,*&&lpOutBuffer,#%&&nOutBufferSize%,*&&lpBytesReturned,#0
    247. //CALL $--qd --bool --ret:&&bResult Kernel32.dll,DeviceIoControl,#%&&hDevice%,#%&&dwIoControlCode%,*&&lpInBuffer,#%&&nInBufferSize%,*&&lpOutBuffer,#%&&nOutBufferSize%,#0,#0
    248. CALL $--ret:&&GetLastErrorRet Kernel32.dll,GetLastError
    249. MESS. %&&bResult% %&&GetLastErrorRet%
    250. CALL $--qd --bool --ret:&&CloseHandleRet Kernel32.dll,CloseHandle,#%&&hDevice%
    251. MESS. %&&CloseHandleRet%



    252. EXIT FILE
    253. https://blog.csdn.net/cracker_zhou/article/details/73348966
    254. // 这里的diskid大概长这个样子:"\\\\.\\PHYSICALDRIVE0","\\\\.\\PHYSICALDRIVE1"  
    255. bool ReadSMARTAttributes(const char* diskid, ata_smart_values& smart_value, ata_smart_thresholds_pvt& threshold_value)
    256. {
    257.     BOOL bRet = false;
    258.     const wchar_t* physical_prefix = L"\\\\.\\PhysicalDrive";
    259.     if (diskid != NULL && wcslen(diskid) > wcslen(physical_prefix) &&
    260.         _wcsnicmp(diskid, physical_prefix, wcslen(physical_prefix)) == 0)
    261.     {
    262.         DWORD dwRet = 0;
    263.         int ucDriveIndex = wcstol(diskid + wcslen(physical_prefix), NULL, 10);
    264.         HANDLE hDevice = CreateFileW(diskid, GENERIC_READ | GENERIC_WRITE,
    265.             FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);
    266.         if (hDevice == INVALID_HANDLE_VALUE) return false;

    267.         BYTE szAttributes[sizeof(SENDCMDOUTPARAMS) + READ_ATTRIBUTE_BUFFER_SIZE - 1];

    268.         SENDCMDINPARAMS stCIP = { 0 };
    269.         stCIP.cBufferSize = READ_ATTRIBUTE_BUFFER_SIZE;
    270.         stCIP.bDriveNumber = ucDriveIndex;
    271.         stCIP.irDriveRegs.bFeaturesReg = READ_ATTRIBUTES;
    272.         stCIP.irDriveRegs.bSectorCountReg = 1;
    273.         stCIP.irDriveRegs.bSectorNumberReg = 1;
    274.         stCIP.irDriveRegs.bCylLowReg = SMART_CYL_LOW;
    275.         stCIP.irDriveRegs.bCylHighReg = SMART_CYL_HI;
    276.         stCIP.irDriveRegs.bDriveHeadReg = 0xA0;
    277.         stCIP.irDriveRegs.bCommandReg = SMART_CMD;
    278.         bRet = DeviceIoControl(hDevice, SMART_RCV_DRIVE_DATA, &stCIP, sizeof(stCIP), szAttributes, sizeof(SENDCMDOUTPARAMS) + READ_ATTRIBUTE_BUFFER_SIZE - 1, &dwRet, NULL);
    279.         if (bRet)
    280.         {
    281.             smart_value = *(ata_smart_values*)(((SENDCMDOUTPARAMS*)szAttributes)->bBuffer);
    282.         }

    283.         stCIP.irDriveRegs.bFeaturesReg = READ_THRESHOLDS;
    284.         stCIP.cBufferSize = READ_THRESHOLD_BUFFER_SIZE;
    285.         bRet &= DeviceIoControl(hDevice, SMART_RCV_DRIVE_DATA, &stCIP, sizeof(stCIP), szAttributes, sizeof(SENDCMDOUTPARAMS) + READ_ATTRIBUTE_BUFFER_SIZE - 1, &dwRet, NULL);
    286.         if (bRet)
    287.         {
    288.             threshold_value = *(ata_smart_thresholds_pvt*)(((SENDCMDOUTPARAMS*)szAttributes)->bBuffer);
    289.         }
    290.         CloseHandle(hDevice);
    291.     }
    292.     return !!bRet;
    293. }
    复制代码
    这个我之前翻译的,M大看看和你内置的功能是否一样。奇怪,我这里win7x64系统下读不出来,老是返回错误1117,在家里win10的电脑上又可以。用你的内置代码测试了下,结果一样。是不是有写情况就是注定读不了的呀,有没有需要提权这种说法?分享给大伙玩一下。最近在做PECMD的一些直播,希望大家多来一起玩PECMD。

    点评

    CALC &&nOutBufferSize=17 + 512 -1[/backcolor] 这个17不对。[/backcolor] 应该是512字节[/backcolor] [/backcolor] //SET &sizeof_ata_smart_values=512 //2+12*30+150=512 struct ata_smart_values {  详情 回复 发表于 2020-11-29 23:24
    回复

    使用道具 举报

    15443#
     楼主| 发表于 2020-11-29 23:24:38 | 只看该作者
    本帖最后由 mdyblog 于 2020-11-29 23:56 编辑
    红毛樱木 发表于 2020-11-29 22:44
    这个我之前翻译的,M大看看和你内置的功能是否一样。奇怪,我这里win7x64系统下读不出来,老是返回错误11 ...

    我在WIn7X64下测试的,是可以出数据的。
    2个代码对比下吧。

    ---------------------------------
    这个没有内置。 我依然写的是脚本。

    代码没几行。  主要是资料分析。 和数据准备。



    回复

    使用道具 举报

    15444#
     楼主| 发表于 2020-11-29 23:43:22 | 只看该作者
    my9823 发表于 2020-11-28 09:42
    使用正则表达式
    sed vv=0,^.*?\\{.*},\1,%file_list%
    只能替换文件列表第一行的盘符和斜杠,变量中的文件 ...

    PECMD2012.1.88.05.84Stable-201129B.7z
    SED 加了个分行轮询处理功能, 开关-L

    sed  -ex -L  &vv=0,^.:\\{.*},\1,&file_list

    点评

    mdyblog威武,速度惊人啊!  详情 回复 发表于 2020-11-30 06:34
    回复

    使用道具 举报

    15445#
    发表于 2020-11-30 06:34:05 来自手机 | 只看该作者
    mdyblog 发表于 2020-11-29 23:43
    PECMD2012.1.88.05.84Stable-201129B.7z
    SED 加了个分行轮询处理功能, 开关-L


    mdyblog威武,速度惊人啊!
    回复

    使用道具 举报

    15446#
     楼主| 发表于 2020-11-30 08:20:59 | 只看该作者
    本帖最后由 mdyblog 于 2020-11-30 08:23 编辑
    红毛樱木 发表于 2020-11-24 20:04
    这里有个DLL不能加载,是DLL特殊吗?测试环境Win7x64
    M大有空看下
    CALL $--ret:返回名 ,-LoadLibrary,加 ...

    这个DLL还依赖其他的DLL。 需要先转移到 该目录。
    1. SET &olddir=%&_CD%
    2. PATH @%&CurDir%\DISM\
    3. CALL $--ret:&DllRet  ,-LoadLibrary,%&CurDir%\DISM\dismapi.dll
    4. PATH @%&olddir%
    5. CALL $--ret:&DllRet62 ,-LoadLibrary,%&CurDir%\DISM62\dismapi.dll
    6. MESS. %&DllRet%  %&DllRet62%
    复制代码



    效果:


    回复

    使用道具 举报

    15447#
     楼主| 发表于 2020-11-30 09:31:12 | 只看该作者
    红毛樱木 发表于 2020-11-24 20:04
    这里有个DLL不能加载,是DLL特殊吗?测试环境Win7x64
    M大有空看下
    CALL $--ret:返回名 ,-LoadLibrary,加 ...

    PECMD2012.1.88.05.84Stable-201130.7z
    版 加强了 -loadlibrary, 也支持--cd
    自动转到DLL所在目录。
    ┃    │    │CALL $--ret:返回名 [--cd ][--nrcd ] ,-LoadLibrary,加载DLL路径       //加载DLL得到句柄 ┃



    CALL $--ret:&DllRet --cd ,-LoadLibrary,%&CurDir%\DISM\dismapi.dll

    成功
    回复

    使用道具 举报

    15448#
    发表于 2020-11-30 10:25:07 | 只看该作者
    mdyblog 发表于 2020-11-29 20:35
    PECMD2012.1.88.05.84Stable-201129.7z\示例\SMART硬盘信息.wcs
    测试通过, 512字节信息。

    smart能否做成比较直观的数据啊,就是一般人都能直接看懂的
    回复

    使用道具 举报

    15449#
    发表于 2020-11-30 11:34:54 | 只看该作者
    mdyblog 发表于 2020-11-29 20:35
    PECMD2012.1.88.05.84Stable-201129.7z\示例\SMART硬盘信息.wcs
    测试通过, 512字节信息。

    比如图中的信息:




    点评

    struct ata_smart_attribute { unsigned char id; unsigned short flags; unsigned char current; unsigned char worst; unsigned char raw[7]; }; 这个id 就是 信息 类型标示。就是上  详情 回复 发表于 2020-11-30 13:32
    回复

    使用道具 举报

    15450#
     楼主| 发表于 2020-11-30 13:32:17 | 只看该作者
    527104427 发表于 2020-11-30 11:34
    比如图中的信息:

    struct ata_smart_attribute {
        unsigned char id;
        unsigned short flags;
        unsigned char current;
        unsigned char worst;
        unsigned char raw[7];
    };

    这个id 就是 信息 类型标示。就是上图的ID。
    这个数组 有30项。

    点评

    https://blog.csdn.net/u014183302/article/details/41289451 是不是这些数值可以友好显示一下。  详情 回复 发表于 2020-12-17 16:18
    有一种奇葩的DLL内置调用,私聊发您了,看下。  详情 回复 发表于 2020-11-30 20:28
    回复

    使用道具 举报

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

    本版积分规则

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

    闽公网安备 35020302032614号

    GMT+8, 2024-4-23 18:13

    Powered by Discuz! X3.3

    © 2001-2017 Comsenz Inc.

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