无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 31128|回复: 146

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

  [复制链接]
发表于 2012-12-21 22:24:43 | 显示全部楼层 |阅读模式
2013-1-28 更新
      
          修正遇到一些“三驱三启”的U盘会退出的BUG。


      下载:  
                DrvType-32bit.rar (7.68 KB, 下载次数: 251)

评分

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

查看全部评分

发表于 2012-12-21 22:56:31 | 显示全部楼层
很好, 测试成功
回复

使用道具 举报

 楼主| 发表于 2012-12-21 23:15:30 | 显示全部楼层
原帖由 xiaoy 于 2012-12-21 22:56 发表
很好, 测试成功


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

使用道具 举报

发表于 2012-12-22 07:02:22 | 显示全部楼层
可以分辩出,谢谢分享,收下了……
回复

使用道具 举报

发表于 2012-12-22 07:36:25 | 显示全部楼层
很好, 测试成功.
回复

使用道具 举报

发表于 2012-12-22 07:46:30 | 显示全部楼层
测试成功!两个同时识别分别显示





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

[ 本帖最后由 rtian 于 2012-12-22 07:57 编辑 ]
捕获.PNG
回复

使用道具 举报

发表于 2012-12-22 07:53:06 | 显示全部楼层
clonecd您好 ,请加入一个功能:标注活跃主分区。例如做个*标示,或其它更好的方式标注。

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

使用道具 举报

发表于 2012-12-22 07:56:52 | 显示全部楼层
这些工具用英文显示会不会更好?
回复

使用道具 举报

发表于 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盘。
回复

使用道具 举报

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

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



已更新。
回复

使用道具 举报

发表于 2012-12-22 19:11:56 | 显示全部楼层
请问楼主,这个工具,如果分区没有盘符,且是活动的,能标识出来吗?
回复

使用道具 举报

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

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

使用道具 举报

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

使用道具 举报

发表于 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:*
回复

使用道具 举报

发表于 2012-12-22 19:24:47 | 显示全部楼层
111.png

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


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

使用道具 举报

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


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

使用道具 举报

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

使用道具 举报

发表于 2012-12-22 20:39:59 | 显示全部楼层
原帖由 clonecd 于 2012-12-22 19:26 发表
这里的USBHDD和移动硬盘是一个意思。
你是指USBFlash?


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

使用道具 举报

发表于 2012-12-22 20:40:51 | 显示全部楼层
首先对老师表示支持!!!

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

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

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

使用道具 举报

 楼主| 发表于 2012-12-22 21:05:31 | 显示全部楼层
原帖由 victor888 于 2012-12-22 20:39 发表


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




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

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

使用道具 举报

 楼主| 发表于 2012-12-22 21:08:31 | 显示全部楼层
原帖由 2012qq185339882 于 2012-12-22 20:40 发表
首先对老师表示支持!!!

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

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

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


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

使用道具 举报

发表于 2012-12-22 21:28:56 | 显示全部楼层

回复 #21 clonecd 的帖子

测试结果如图......
QQ截图20121222204123.png
回复

使用道具 举报

发表于 2012-12-22 21:35:08 | 显示全部楼层
测试了一下!
up.JPG
回复

使用道具 举报

发表于 2012-12-22 22:59:06 | 显示全部楼层
拽极了!我的SETUPPE.EXE内含的是DSPtW.EXE,我用它检测盘符相关信息。

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

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

使用道具 举报

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

使用道具 举报

发表于 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 编辑 ]
回复

使用道具 举报

发表于 2012-12-23 09:01:44 | 显示全部楼层
这是delphi 源码,编译后体积庞大,比不了c
回复

使用道具 举报

发表于 2012-12-23 09:06:08 | 显示全部楼层
可否麻烦你贴一个delphi 识别硬盘主分区、逻辑分区的完整代码?
回复

使用道具 举报

 楼主| 发表于 2012-12-23 09:08:49 | 显示全部楼层
delphi 我不会啊,不过你要的代码网上应该都有吧。

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

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

使用道具 举报

发表于 2012-12-23 09:12:15 | 显示全部楼层
读mbr,头大。呵呵。懒得死,只想抄一个成品。哈哈。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 20:19

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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