无忧启动论坛

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

[求助] 有没有显示磁盘类型的命令行工具?

  [复制链接]
跳转到指定楼层
1#
发表于 2020-11-10 14:55:28 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liuzhaoyzz 于 2020-11-10 15:02 编辑

有没有显示磁盘类型的命令行工具?
遍历所有的盘符,并且显示出其磁盘类型,磁盘类型有:
GetDriveType函数#
GetDriveType函数用于判断一个磁盘驱动器的类型。
函数声明如下

UINT WINAPI GetDriveType(

  _In_opt_ LPCTSTR lpRootPathName

);
参数lpRootPathName包含了根目录路径的字符串指针。
如驱动器不能识别,则返回零。如指定的目录不存在,则返回1。如执行成功,则用下述任何一个常数指定驱动器类型
[td]
常数                          含义
DRIVE_UNKNOWN  未知的磁盘类型
DRIVE_NO_ROOT_DIR  说明lpRootPathName是无效的
DRIVE_REMOVABLE  可移动磁盘
DRIVE_FIXED  固定磁盘
DRIVE_REMOTE  网络磁盘
DRIVE_CDROM  光驱
DRIVE_RAMDISK  RAM映射磁盘

C++ 如何判断一个驱动卷是本地硬盘,还是USB接入的移动硬盘?
电脑机子上本来有C,D,E,F 四个盘,当USB接入一个移动硬盘后会增加 H ,I两个盘,我用GetDriveType()来获取各个盘的类型时,则得到返回值都是DRIVE_FIXED,无法区分这六个盘的类型。有什么办法可以区分H ,I盘属于USB接入的移动硬盘?我查了MSDN很久也无法解决,有人提出系统分区数+驱动卷判断,这个方法看似可行,然而我却不懂获取磁盘的分区表,请高手赐教。

有没有用c++或者pecmd之类写好的现成的,小巧的命令行工具?


2#
 楼主| 发表于 2020-11-10 16:03:57 | 显示全部楼层
红毛樱木 发表于 2020-11-10 15:36
lpRootPathName为空,A trailing backslash is required. If this parameter is NULL, the functio ...

        你给的这段代码,怎么显示所有盘符?#0表示0号分区吗?

我在csdn上面还看到个例子:
VC下获取各个驱动器路径,分类及其获取其信息的资料整理
回复

使用道具 举报

3#
 楼主| 发表于 2020-11-10 16:15:30 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-10 16:36 编辑
江南一根葱 发表于 2020-11-10 15:33
百草的fbinstplus不是可以列出usb磁盘吗

【Fbinst Plus V1.5.1703.13】Fbinst增强版,2017年重大更新 - USB启动区 - 无忧启动论坛
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=187865

果然是可以!多谢!

--hdlist: 获取磁盘列表功能
            fbinst --hdlist [输出格式] [磁盘类型] [是否是移动磁盘] [--UD]
            fbinst --hdlist          默认格式获取所有磁盘列表
            fbinst --hdlist  ""     默认格式获取所有磁盘列表

            fbinst --hdlist "(hd%N) %T_%R_%I (%P) %Sg %U"      按指定格式输出磁盘列表
                      得到类似结果:(hd1) SATA_FIXED_WDC-WD5000AAKX-001CA0 (C: D: E: L: ) 466 G
                                   其中:%N      表示磁盘号 (特别注意,命令行下直接输命令是%N,批处理中是%%N,下同)
                                             %T      表示磁盘类型,具体类型稍候给出
                                             %R      表示是否是移动磁盘,是显示为REMOVABLE,否则显示为固定磁盘FIXED
                                             %I       表示磁盘型号(ID),例如WDC-WD5000AAKX-001CA0
                                             %P      表示包含的分区
                                             %S      表示磁盘大小,单位G,小于1G的统一显示为0G
                                             %U      标识磁盘是否为ud盘,是ud盘标识为*号,不是为空。
                      不需要每次都显示所有项目,可以选择需要的项目显示,例如 fbinst --hdlist "(hd%N): %Sg"
           fbinst --hdlist "(hd%N): %Sg %U"  --USB --FIXED      按规定格式输出磁盘类型为USB的固定磁盘
           fbinst --hdlist ""  --USB                                               USB磁盘列表
           fbinst --hdlist "(hd%N): %Sg" --USB --REMOVABLE    U盘列表
           fbinst --hdlist "(hd%N): %Sg" --USB --FIXED              移动硬盘列表
           fbinst --hdlist "(hd%N): %Sg" --SATA                        SATA磁盘列表
           fbinst --hdlist "(hd%N): %Sg" --ALL --FIXED              所有硬盘列表(注意磁盘和硬盘的区别)
           fbinst --hdlist "(hd%N): %U" --ALL --ALL --UD           所有ud盘列表
           fbinst --hdlist "(hd%N): %U" --ALL --REMOVABLEL --UD    所有UD格式的U盘列表



如果用到 [磁盘类型] 参数,那么前面的 [输出格式]不可以省略,但可以为""
如果用到[是否是移动磁盘],那么前面的两个参数都不可以省略,[输出格式]可以为"",磁盘类型可以为--ALL

磁盘类型:(相应的参数为 --类型)
                 "Unknown","SCSI","Atapi","Ata","1394","Ssa","Fibre","USB","RAID","iSCSI",
                 "SAS","SATA","SD","MMC","Virtual","FileBackedVirtual","Max","MaxReserved"

QQ截图20201110163625.jpg (30.96 KB, 下载次数: 115)

QQ截图20201110163625.jpg

评分

参与人数 1无忧币 +3 收起 理由
holley2008 + 3 赞一个!

查看全部评分

回复

使用道具 举报

4#
 楼主| 发表于 2020-11-10 16:24:18 | 显示全部楼层
CodeHz 发表于 2020-11-10 16:14
简单用c整了一个
可以用我的tjs来调用或者编译它(http://bbs.wuyou.net/forum.php?mod=viewthread&tid=42 ...

这个还需要进一步区分移动硬盘和固定硬盘才行啊。现在没有区分开来。

QQ截图20201110162208.jpg (16.53 KB, 下载次数: 109)

QQ截图20201110162208.jpg
回复

使用道具 举报

5#
 楼主| 发表于 2020-11-10 16:43:36 | 显示全部楼层
CodeHz 发表于 2020-11-10 16:39
大概这个可以检测了(

大神就是大神!果然可以了!感谢!请把源代码传上来,谢谢!

QQ截图20201110164301.jpg (26.82 KB, 下载次数: 112)

QQ截图20201110164301.jpg
回复

使用道具 举报

6#
 楼主| 发表于 2020-11-10 17:04:13 | 显示全部楼层
红毛樱木 发表于 2020-11-10 17:00
原来你是要这种效果 - -

不能遍历所有盘符,然后显示具体类型吗?
回复

使用道具 举报

7#
 楼主| 发表于 2020-11-10 17:05:58 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-10 17:07 编辑
CodeHz 发表于 2020-11-10 16:47
源码在这里,顺便改进了下,把更多的细节属性都暴露了

这个显示效果更好了,更加便于过滤!高手在民间啊!

QQ截图20201110170521.jpg (21.65 KB, 下载次数: 113)

QQ截图20201110170521.jpg
回复

使用道具 举报

8#
 楼主| 发表于 2020-11-10 17:06:53 | 显示全部楼层
红毛樱木 发表于 2020-11-10 17:06
自己再套代码呀。要搞全套吗?

我是pecmd白痴啊,楼上的两个方案都能够达到目的。
回复

使用道具 举报

9#
 楼主| 发表于 2020-11-11 08:19:39 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-11 17:09 编辑
红毛樱木 发表于 2020-11-10 17:15
B站直播间地址:https://live.bilibili.com/22611892
B站帐号:系统总裁官方帐号
每天下午不定时直播,固 ...

代码准确,谢谢!

另外想问下,怎么搞成命令行的?

QQ截图20201111081727.jpg (6.38 KB, 下载次数: 115)

QQ截图20201111081727.jpg
回复

使用道具 举报

10#
 楼主| 发表于 2020-11-11 08:20:09 | 显示全部楼层
9zhmke 发表于 2020-11-10 18:07
VBS也很简单,把里面查硬盘的DriveType从多换成1就是U盘了。

VBS适用性不太好,有的PE里面没有。
回复

使用道具 举报

11#
 楼主| 发表于 2020-11-11 17:06:22 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-11 17:08 编辑

没有看明白,lua环境是怎么调用的?winapi怎么用?怎么运行?github上面,我没有看到release版本的exe文件啊?
回复

使用道具 举报

12#
 楼主| 发表于 2020-11-12 07:25:49 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-12 08:22 编辑

代码还需要改进下,没有把本地硬盘和移动硬盘区分开来,都显示的是fixed。
complate拼写应该是complete吧。

QQ拼音截图20201112072447.png (9.56 KB, 下载次数: 108)

QQ拼音截图20201112072447.png
回复

使用道具 举报

13#
 楼主| 发表于 2020-11-12 07:27:38 | 显示全部楼层
plusv 发表于 2020-11-11 21:40
>github上面,我没有看到release版本的exe文件啊?

github上面,通常要自己编译为 EXE.

有时候搭建编译环境挺麻烦的,不同的Visual studio版本什么的。有时候出错挺麻烦。
回复

使用道具 举报

14#
 楼主| 发表于 2020-11-12 09:00:20 | 显示全部楼层
CodeHz 发表于 2020-11-12 08:40
这也是我整tjs的一个目的,目前可以算是半个c语言开发环境了(当然兼容现有项目不是我的目标,这个整下去 ...

不明觉厉!
回复

使用道具 举报

15#
 楼主| 发表于 2020-11-13 08:12:08 | 显示全部楼层
红毛樱木 发表于 2020-11-12 16:36

换成
再把PECMD.exe换成PECMD原始_cli.EXE          (在PECMD包里)

哦,试了下,可以了!
回复

使用道具 举报

16#
 楼主| 发表于 2020-11-19 15:33:20 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-19 15:45 编辑
CodeHz 发表于 2020-11-10 16:47
源码在这里,顺便改进了下,把更多的细节属性都暴露了

        1、还要友情楼主出手下,这个程序,不支持xp吗?能否做静态编译?我在xp里面试了下无法运行啊?

       2、为了测试,我特意下载了360安全卫士,结果这个程序一下子就被360咔嚓掉了,如果夹在批处理里面发给别人,被杀掉就没法用,是不是因为你用了你自己的tjs编译器导致的360不认识?能不能用vc做个静态编译?



VXP-2020-11-19-15-29-17.png (43.43 KB, 下载次数: 37)

VXP-2020-11-19-15-29-17.png

点评

这个错误看起来就是用了64位的版本,但是xp是32位的(  详情 回复 发表于 2020-11-19 15:39
回复

使用道具 举报

17#
 楼主| 发表于 2020-11-19 15:45:33 | 显示全部楼层
CodeHz 发表于 2020-11-19 15:39
这个错误看起来就是用了64位的版本,但是xp是32位的(360误报这个我不负责解决,这事得交保护费

        哦,看了下,drivetype果然是64位PE文件。恳请楼主编译个32位的。

点评

再给你增强一下ChkMbrPbr吧,来个一箭四雕。 -ChkAllDrvType 列出所有磁盘, -ChkDrvType L: 仅列出L盘  详情 回复 发表于 2020-11-19 20:27
回复

使用道具 举报

18#
 楼主| 发表于 2020-11-19 22:58:23 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-19 23:03 编辑
527104427 发表于 2020-11-19 20:27
再给你增强一下ChkMbrPbr吧,来个一箭四雕。 -ChkAllDrvType 列出所有磁盘,  -ChkDrvType  L:  仅列出L ...


        感谢5大出手!chkmbrpbr32位的发给别人总是被360干掉可有解决办法?给小白解释没有病毒和风险太累了,所以我更喜欢VC编译的小程序。我曾经在360病毒误报网站反馈,结果客服回复还是不给过,说是有风险,好郁闷,这世道就是流氓当道!

点评

试试不加壳的:ChkMbrPbr_x86_原始.exe 如果还不行,那没办法了。PECMD应该也是VC写的吧  详情 回复 发表于 2020-11-19 23:30
回复

使用道具 举报

19#
 楼主| 发表于 2020-11-20 06:51:13 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-11-20 11:26 编辑

2020.11.20版本,似乎360不报了。感谢5大!顺便说下,2020.11.20版本,32位的加壳报毒,不加壳的原始文件不报毒(编辑)。
回复

使用道具 举报

20#
 楼主| 发表于 2020-11-20 08:16:54 | 显示全部楼层
CodeHz 发表于 2020-11-10 16:47
源码在这里,顺便改进了下,把更多的细节属性都暴露了

我尝试用vs2015编译这个程序,想请问下大神,这一句出错了,应该怎么修改?
char buf[] = "?:\";
提示没有右引号。

点评

hmmm,多加一个\ char buf[] = "?:\\"  详情 回复 发表于 2020-11-20 11:08
回复

使用道具 举报

21#
 楼主| 发表于 2020-11-20 13:35:00 | 显示全部楼层
CodeHz 发表于 2020-11-20 11:08
hmmm,多加一个\
char buf[] = "?:\\"

我用visual studio2015静态编译了下,平台工具集选择v140_xp模式,亲测支持XP WIN10。通过了360流氓卫士的检测。看样子VC编译的程序,360识别的好呀!不会误报。
上传源代码和编译后的exe程序。



VXP-2020-11-20-13-29-29.png (25.5 KB, 下载次数: 43)

VXP-2020-11-20-13-29-29.png

drivetype.rar

1.01 MB, 下载次数: 24, 下载积分: 无忧币 -2

判断磁盘类型.rar

102.47 KB, 下载次数: 21, 下载积分: 无忧币 -2

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-7 00:57

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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