无忧启动论坛

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

本人写的一个小工具,看看是否能区分移动硬盘和本地U盘(2013-1-28更新)

  [复制链接]
跳转到指定楼层
1#
发表于 2012-12-21 22:24:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
2013-1-28 更新
      
          修正遇到一些“三驱三启”的U盘会退出的BUG。


      下载:  
                DrvType-32bit.rar (7.68 KB, 下载次数: 254)   (2013-1-28)32位

                DrvType-64bit.rar (10.83 KB, 下载次数: 193)   (2013-1-28)纯64位

===================================================================


2013-1-8 更新
            

                1. 支持多个GPT磁盘,而2012-12-24版最多只能有1个GPT磁盘;

                2. 支持电脑上同时有MBR磁盘和GPT磁盘的环境。


      友情提醒:
             由于32位的WindowsXP和Win2003本身不支持GPT磁盘,所以GPT分区
             在此环境中无法分配盘符。鉴于此,本人建议,如果您电脑上有GPT磁盘,
             请在以下环境中使用此小工具:
                    WIN7或WIN8以及PE(XPE、03PE、WIN7PE、WIN8PE)
                  (以上不论32位还是64位都可以)
                 或者64位的WindowsXP和Win2003

             当然如果您的电脑上没有GPT磁盘,则没必要按上面说的来做。

             注:32位的win2003 SP1及以上支持GPT磁盘。


      下载地址:  
                DrvType.rar (7.5 KB, 下载次数: 150)   (2013-1-8)


===================================================================

2012-12-24 更新
            1. 优化代码,降低运行时内存占用,提高运行速度;

                     之前的匆匆写完,没有优化过代码;

                2. 修正当有GPT分区时多出的显示语句;

                    是本人忘了屏蔽输出语句造成的,^*_*^;

===================================================================

2012-12-23 更新
       用途:列举磁盘的容量,类型,盘符。
      


          更新:

                1. 列举磁盘的容量,以MB为单位;

                2. 增加 -a 参数,用“*”来标记活动分区;
                     必须是小写 a

                        -a    --Active partitions are marked with "*".                        
                               Here, "a" must be lowercase. It is case sensetive.

          用法:

                drvtype
               或
               drvtype -a

              如图:
                     

如果用法不正确则显示使用方法。


                       FixedHDD        表示本地硬盘
                       USBHDD          表示移动硬盘
                       USBFlash         表示U盘

2012-12-21 发布

在命令行下直接运行即可。




DrvType.rar (3.7 KB, 下载次数: 99)

大家测试看看,反馈结果。注意:磁盘序号从1开始,不是从0开始。
以上第4个为本人的读卡器,里面没东东。所以为空。

[ 本帖最后由 clonecd 于 2013-1-28 16:36 编辑 ]

评分

参与人数 1无忧币 +5 收起 理由
糊涂 + 5

查看全部评分

2#
发表于 2012-12-21 22:56:31 | 只看该作者
很好, 测试成功
回复

使用道具 举报

3#
 楼主| 发表于 2012-12-21 23:15:30 | 只看该作者
原帖由 xiaoy 于 2012-12-21 22:56 发表
很好, 测试成功


多谢测试,进一步期待其他人进行更广泛地测试。
回复

使用道具 举报

4#
发表于 2012-12-22 07:02:22 | 只看该作者
可以分辩出,谢谢分享,收下了……
回复

使用道具 举报

5#
发表于 2012-12-22 07:36:25 | 只看该作者
很好, 测试成功.
回复

使用道具 举报

6#
发表于 2012-12-22 07:46:30 | 只看该作者
测试成功!两个同时识别分别显示





J:盘是U盘量产的。为了测试u盘分区量产为cdrom + fixed disk了

[ 本帖最后由 rtian 于 2012-12-22 07:57 编辑 ]

捕获.PNG (3.51 KB, 下载次数: 127)

捕获.PNG
回复

使用道具 举报

7#
发表于 2012-12-22 07:53:06 | 只看该作者
clonecd您好 ,请加入一个功能:标注活跃主分区。例如做个*标示,或其它更好的方式标注。

序号        类型                 盘符列表
1        本地硬盘           C:* D:
2        U盘                  E:
3        U盘                  F:
回复

使用道具 举报

8#
发表于 2012-12-22 07:56:52 | 只看该作者
这些工具用英文显示会不会更好?
回复

使用道具 举报

9#
发表于 2012-12-22 08:04:50 | 只看该作者
原帖由 rtian 于 2012-12-22 07:46 发表
测试成功!两个同时识别分别显示


bbs.wuyou.net/attachments/20121222_a4845d427aa7d1de36b4CtkcIT4UBTbS.png


J:盘是U盘量产的。为了测试u盘分区量产为cdrom + fixed disk了


你这个测试结果是相反的,证明楼主的工具还有BUG,因为你的J没有显示为U盘。
回复

使用道具 举报

10#
 楼主| 发表于 2012-12-22 18:09:04 | 只看该作者
原帖由 chiannet 于 2012-12-22 07:53 发表
clonecd您好 ,请加入一个功能:标注活跃主分区。例如做个*标示,或其它更好的方式标注。

序号        类型                 盘符列表
1        本地硬盘           C:* D:
2        U盘                   ...



已更新。
回复

使用道具 举报

11#
发表于 2012-12-22 19:11:56 | 只看该作者
请问楼主,这个工具,如果分区没有盘符,且是活动的,能标识出来吗?
回复

使用道具 举报

12#
 楼主| 发表于 2012-12-22 19:15:15 | 只看该作者
都没有盘符了,那要怎么标呢?
我这个工具知道哪个分区是活动的,可是用什么方法标呢?
用符合GHOST的方法标吗?

[ 本帖最后由 clonecd 于 2012-12-22 19:18 编辑 ]
回复

使用道具 举报

13#
发表于 2012-12-22 19:19:49 | 只看该作者
呵呵,问题确实是这样,如果没有盘符,标记也没有多少意义。
楼主能不能告诉我,您是如何区分USBHDD 和移动硬盘的?
回复

使用道具 举报

14#
发表于 2012-12-22 19:23:24 | 只看该作者
C:\>drvtype -a
No.     Type            Size(MB)         DriveList
1       FixedHDD        305250.69        C:* D: E: F:
2       USBFlash        15304.11         G:*
回复

使用道具 举报

15#
发表于 2012-12-22 19:24:47 | 只看该作者


本地硬盘 : C  、 D
优盘        : E
移动硬盘 : F
优盘        : G 、 H


优盘 E 是没有Flash的,所以没有容量,只有盘符,但 DrvType.exe 没有显示盘符出来。
盘符顺序,也跟系统的排列不一致了。F盘 跑到最后。
回复

使用道具 举报

16#
 楼主| 发表于 2012-12-22 19:26:29 | 只看该作者
原帖由 victor888 于 2012-12-22 19:19 发表
呵呵,问题确实是这样,如果没有盘符,标记也没有多少意义。
楼主能不能告诉我,您是如何区分USBHDD 和移动硬盘的?


这里的USBHDD和移动硬盘是一个意思。
你是指USBFlash?
回复

使用道具 举报

17#
 楼主| 发表于 2012-12-22 19:28:48 | 只看该作者
原帖由 sz_kent 于 2012-12-22 19:24 发表
153336

本地硬盘 : C  、 D
优盘        : E
移动硬盘 : F
优盘        : G 、 H


优盘 E 是没有Flash的,所以没有容量,只有盘符,但 DrvType.exe 没有显示盘符出来。
盘符顺序,也跟系统的排列 ...


没有容量的不显示,我的工具新版就是这样设计的。

至于F跑到最后,是因为我是按设备接口来排序的,不是按盘符排序的,看最左边一列。


顺便说一下,我这个不是盘符理顺工具!!!

[ 本帖最后由 clonecd 于 2012-12-22 19:32 编辑 ]
回复

使用道具 举报

18#
发表于 2012-12-22 20:39:59 | 只看该作者
原帖由 clonecd 于 2012-12-22 19:26 发表
这里的USBHDD和移动硬盘是一个意思。
你是指USBFlash?


我是指如何区分移动硬盘和量产为本地盘的U盘。
回复

使用道具 举报

19#
发表于 2012-12-22 20:40:51 | 只看该作者
首先对老师表示支持!!!

老师,量产为本地磁盘的U盘,会如何显示呢?

目前还没有测试,先猜测一下

比如我有一个U盘16G,量产为两个差不多相等大小的分区做为双启使用,一个分区写入UD,一个写入U+……

QQ截图20121222204123.png (109.77 KB, 下载次数: 132)

QQ截图20121222204123.png
回复

使用道具 举报

20#
 楼主| 发表于 2012-12-22 21:05:31 | 只看该作者
原帖由 victor888 于 2012-12-22 20:39 发表


我是指如何区分移动硬盘和量产为本地盘的U盘。




这个目前我还没有十分确切的办法,手上的U盘一时半会我还没找到工具量产。
到时候搞一个再来找办法。我把这个工具发出来,主要是先收集信息,再找办法。

[ 本帖最后由 clonecd 于 2012-12-22 21:10 编辑 ]
回复

使用道具 举报

21#
 楼主| 发表于 2012-12-22 21:08:31 | 只看该作者
原帖由 2012qq185339882 于 2012-12-22 20:40 发表
首先对老师表示支持!!!

老师,量产为本地磁盘的U盘,会如何显示呢?

目前还没有测试,先猜测一下

比如我有一个U盘16G,量产为两个差不多相等大小的分区做为双启使用,一个分区写入UD,一个写入U+……


你运行一下我的工具,把结果贴上来看看。
回复

使用道具 举报

22#
发表于 2012-12-22 21:28:56 | 只看该作者

回复 #21 clonecd 的帖子

测试结果如图......

QQ截图20121222204123.png (75.91 KB, 下载次数: 123)

QQ截图20121222204123.png
回复

使用道具 举报

23#
发表于 2012-12-22 21:35:08 | 只看该作者
测试了一下!
回复

使用道具 举报

24#
发表于 2012-12-22 22:59:06 | 只看该作者
拽极了!我的SETUPPE.EXE内含的是DSPtW.EXE,我用它检测盘符相关信息。

如果楼主的程序经广泛测试,我就拿来使用了。

不知楼主采用何种办法测试的?
我猜楼主可能不是用win API 的DeviceIoControl,否则程序应该难得这么苗条?
回复

使用道具 举报

25#
 楼主| 发表于 2012-12-22 23:30:51 | 只看该作者
原帖由 chiannet 于 2012-12-22 22:59 发表
拽极了!我的SETUPPE.EXE内含的是DSPtW.EXE,我用它检测盘符相关信息。

如果楼主的程序经广泛测试,我就拿来使用了。

不知楼主采用何种办法测试的?
我猜楼主可能不是用win API 的DeviceIoControl,否则 ...


DSPtW.EXE无法检测EISA分区的,且一个硬盘有多个主分区的话也不正确的,5、6年前我就试过了。
不过后来更新的我没试,以上如说错,纯属我臆测。

DeviceIoControl 是用了,但还有其它的。

区分本地硬盘,移动硬盘和普通U盘是没问题的。

移动硬盘和量产为本地硬盘(Fixed Disk)的U盘的区分还需要找更可靠的方法。

[ 本帖最后由 clonecd 于 2012-12-22 23:45 编辑 ]
回复

使用道具 举报

26#
发表于 2012-12-23 09:00:06 | 只看该作者
  1. function GetBusType(Drive: AnsiChar): TStorageBusType;
  2. var
  3.   H: THandle;
  4.   Query: TStoragePropertyQuery;
  5.   dwBytesReturned: DWORD;
  6.   Buffer: array [0..1023] of Byte;
  7.   sdd: TStorageDeviceDescriptor absolute Buffer;
  8.   OldMode: UINT;
  9. begin
  10.   Result := BusTypeUnknown;

  11.   OldMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  12.   try
  13.     H := CreateFile(PChar(Format('\\.\%s:', [AnsiLowerCase(Drive)])), 0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
  14.       OPEN_EXISTING, 0, 0);
  15.     if H <> INVALID_HANDLE_VALUE then
  16.     begin
  17.       try
  18.         dwBytesReturned := 0;
  19.         FillChar(Query, SizeOf(Query), 0);
  20.         FillChar(Buffer, SizeOf(Buffer), 0);
  21.         sdd.Size := SizeOf(Buffer);
  22.         Query.PropertyId := StorageDeviceProperty;
  23.         Query.QueryType := PropertyStandardQuery;
  24.         if DeviceIoControl(H, IOCTL_STORAGE_QUERY_PROPERTY, @Query, SizeOf(Query), @Buffer, SizeOf(Buffer), dwBytesReturned, nil) then
  25.           Result := sdd.BusType;
  26.       finally
  27.         CloseHandle(H);
  28.       end;
  29.     end;
  30.   finally
  31.     SetErrorMode(OldMode);
  32.   end;
  33. end;
复制代码


if GetBusType(driver)= BusTypeUsb then begin
if (GetDriveType(pchar(driver+':\'))=DRIVE_FIXED) then  usb_hddf:=true  //这是移动硬盘
else
  if (GetDriveType(pchar(driver+':\'))=DRIVE_REMOVABLE then  usb_flash:=true;  //这是U盘
end;

[ 本帖最后由 chiannet 于 2012-12-23 09:17 编辑 ]
回复

使用道具 举报

27#
发表于 2012-12-23 09:01:44 | 只看该作者
这是delphi 源码,编译后体积庞大,比不了c
回复

使用道具 举报

28#
发表于 2012-12-23 09:06:08 | 只看该作者
可否麻烦你贴一个delphi 识别硬盘主分区、逻辑分区的完整代码?
回复

使用道具 举报

29#
 楼主| 发表于 2012-12-23 09:08:49 | 只看该作者
delphi 我不会啊,不过你要的代码网上应该都有吧。

其实MBR磁盘的分区,在数据结构上就是单链表啊。

[ 本帖最后由 clonecd 于 2012-12-23 09:10 编辑 ]
回复

使用道具 举报

30#
发表于 2012-12-23 09:12:15 | 只看该作者
读mbr,头大。呵呵。懒得死,只想抄一个成品。哈哈。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-4 07:25

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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