无忧启动论坛

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

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

  [复制链接]
31#
 楼主| 发表于 2012-12-23 09:22:27 | 只看该作者
原帖由 chiannet 于 2012-12-23 09:06 发表
可否麻烦你贴一个delphi 识别硬盘主分区、逻辑分区的完整代码?



给你来段c语言的,linux下 gcc 编译,你可以参考改成delphi的。
  1. #include <string.h>
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <fcntl.h>
  6. #include <linux/types.h>
  7. #pragma pack(1)   // 内存按1bit对齐,主要是为了省内存,此句不要也没关系
  8. struct partion_table //分区表结构
  9. {
  10. __u8 boot_flag;//启动类型
  11. __u8 start[3];
  12. __u8 fs_type;//分区类型
  13. __u8 end[3];
  14. __u32 sectors_before;//分区前扇区数
  15. __u32 sectors;//分区总扇区数
  16. };

  17. struct mbr    //MBR结构
  18. {
  19. __u8 boot_code[446];
  20. struct partion_table pt[4];
  21. __u8 end_sign[2];//结束标记55AA
  22. };

  23. int fd;
  24. unsigned long first_ebr_offset=0;
  25. #define sector_size 512
  26. unsigned char buf[sector_size];
  27. unsigned char tmp[32];
  28. unsigned char device[16];
  29. struct mbr *mymbr;

  30. int main(int argc,char **argv)
  31. {
  32. if (argc != 2)
  33. {
  34.   printf("Usage: %s <device>\n",argv[0]);
  35.   return 0;
  36. }
  37. //loff_t num=strtol(argv[2],NULL,10);
  38. strcpy(device,argv[1]);
  39. openfile(argv[1]);
  40. readsector(0);
  41. show_mbr();
  42. close(fd);
  43. return 0;
  44. }

  45. int openfile(unsigned char *filename) //open a device
  46. {
  47. fd=open(filename, O_RDWR); //read and write
  48. if (fd == -1) return 1;
  49. return 0;
  50. }
复制代码

[ 本帖最后由 clonecd 于 2013-1-8 22:47 编辑 ]
回复

使用道具 举报

32#
 楼主| 发表于 2012-12-23 09:26:18 | 只看该作者
原帖由 chiannet 于 2012-12-23 09:00 发表
function GetBusType(Drive: AnsiChar): TStorageBusType;
var
  H: THandle;
  Query: TStoragePropertyQuery;
  dwBytesReturned: DWORD;
  Buffer: array [0..1023] of Byte;
  sdd: TStorageDeviceDe ...



看了一下这个,其实我的思路跟你的是一样的。
回复

使用道具 举报

33#
发表于 2012-12-23 09:30:50 | 只看该作者

回复 #25 clonecd 的帖子

KERNEL32.DLL msvcrt.dll   LoadLibraryA  GetProcAddress  VirtualProtect  VirtualAlloc  VirtualFree   ExitProcess...

确实是C编写

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

使用道具 举报

34#
发表于 2012-12-23 09:54:47 | 只看该作者
现在的盘都以GB 甚至TB 起算,那么用GB显示会不会比MB更合适呢?
回复

使用道具 举报

35#
 楼主| 发表于 2012-12-23 10:14:51 | 只看该作者
原帖由 andos 于 2012-12-23 09:54 发表
现在的盘都以GB 甚至TB 起算,那么用GB显示会不会比MB更合适呢?


这个自己需要用到的话自己转换一下就行了。
除以1024转为GB,再除以1024转为TB。
要知道,在PE里,有的虚拟盘只有1~几十MB。
这里主要是考虑适用范围。

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

使用道具 举报

36#
发表于 2012-12-23 14:51:54 | 只看该作者
"*" 应该位于盘符的前面才符合逻辑,如:*C:
序号应该从0开始才符合惯例!

[ 本帖最后由 2010hook 于 2012-12-23 14:52 编辑 ]
回复

使用道具 举报

37#
 楼主| 发表于 2012-12-23 20:36:30 | 只看该作者
原帖由 2010hook 于 2012-12-23 14:51 发表
"*" 应该位于盘符的前面才符合逻辑,如:*C:
序号应该从0开始才符合惯例!



说得不错,不过已经定下来了。
反正主要是给自动化软件或批处理使用的,他们会自己处理的。
回复

使用道具 举报

38#
 楼主| 发表于 2012-12-23 22:36:11 | 只看该作者
小小更新一下,+ 字数补丁。
回复

使用道具 举报

39#
发表于 2012-12-24 10:05:55 | 只看该作者
很小巧的工具,抓下来用用看。
回复

使用道具 举报

40#
发表于 2012-12-31 22:18:32 | 只看该作者
外出了n天,现在来看看兄弟的新版程序。
回复

使用道具 举报

41#
 楼主| 发表于 2013-1-8 14:29:49 | 只看该作者
2013-1-8 更新
    1. 支持多个GPT磁盘,而2012-12-24版最多只能有1个GPT磁盘;

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

使用道具 举报

42#
发表于 2013-1-8 14:36:48 | 只看该作者

回复 #41 clonecd 的帖子

如果还能加入厂商和型号就完美了
回复

使用道具 举报

43#
发表于 2013-1-8 18:22:39 | 只看该作者
希望能从MBR读DISKSIGNATURE
回复

使用道具 举报

44#
 楼主| 发表于 2013-1-8 22:20:34 | 只看该作者
原帖由 victor888 于 2013-1-8 18:22 发表
希望能从MBR读DISKSIGNATURE


读磁盘签名有什么用途吗?
回复

使用道具 举报

45#
发表于 2013-1-8 23:54:59 | 只看该作者
反馈一下:
当我插入我的“三驱三启”盘后,再运行程序,直接报错退出
回复

使用道具 举报

46#
 楼主| 发表于 2013-1-9 08:51:04 | 只看该作者
原帖由 wgykk 于 2013-1-8 23:54 发表
反馈一下:
当我插入我的“三驱三启”盘后,再运行程序,直接报错退出


终于等到有三驱三启的坛友反馈了,太感谢了。

把以下的文件解压,双击gethdinfo.bat,把得到allmbr.txt和SIZEID.txt传上来。

hdinfo.rar (17.1 KB, 下载次数: 12)           不要在WIN7和WIN7PE使用!

同时,告知三驱三启整个U盘的容量,以及此“三驱”各自的容量。不要很精确。

多谢!

[ 本帖最后由 clonecd 于 2013-1-9 09:05 编辑 ]
回复

使用道具 举报

47#
 楼主| 发表于 2013-1-9 08:58:13 | 只看该作者
原帖由 wgykk 于 2013-1-8 23:54 发表
反馈一下:
当我插入我的“三驱三启”盘后,再运行程序,直接报错退出


再用以下版本测试一下是否还报错。

DrvType测试.rar (7.01 KB, 下载次数: 3)
回复

使用道具 举报

48#
发表于 2013-1-9 09:46:43 | 只看该作者
原帖由 lindafu 于 2013-1-8 14:36 发表
如果还能加入厂商和型号就完美了

呵呵,不错的建议
显示更清晰
回复

使用道具 举报

49#
发表于 2013-1-9 14:28:33 | 只看该作者
原帖由 clonecd 于 2013-1-8 22:20 发表
读磁盘签名有什么用途吗?


是为了我的盘符调整批处理,如果你的成熟了,哈哈,我就不用DSPTW了。
回复

使用道具 举报

50#
 楼主| 发表于 2013-1-9 14:58:46 | 只看该作者
读磁盘签名,需要增加的代码量不是很多。
不过前面两位老大要求加厂商和型号,会增加很多代码,最关键的是运行时占用内存急剧上升,以及执行速度变慢,小工具体积也会有很大增加。因为这部分代码我这个小工具本身就不带有。

而磁盘签名在MBR里,本身我的工具就要读MBR。
回复

使用道具 举报

51#
 楼主| 发表于 2013-1-9 15:00:04 | 只看该作者
原帖由 victor888 于 2013-1-9 14:28 发表


是为了我的盘符调整批处理,如果你的成熟了,哈哈,我就不用DSPTW了。


请教老大,如果一个硬盘有多个主分区,DSPTW获取的信息应该是错的吧?
回复

使用道具 举报

52#
发表于 2013-1-9 15:52:00 | 只看该作者
这个还重来没有发现过,哈哈。
回复

使用道具 举报

53#
 楼主| 发表于 2013-1-9 17:57:08 | 只看该作者
原帖由 victor888 于 2013-1-9 15:52 发表
这个还重来没有发现过,哈哈。


看以下链接以及随后的几个楼层:

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=173725&page=173#pid2469654
回复

使用道具 举报

54#
 楼主| 发表于 2013-1-10 23:04:16 | 只看该作者
原帖由 victor888 于 2013-1-9 15:52 发表
这个还重来没有发现过,哈哈。


你要的无USB类型的版本。

DrvType.rar (7.59 KB, 下载次数: 15)
回复

使用道具 举报

55#
发表于 2013-1-11 14:43:24 | 只看该作者
兄弟,那输出结果还是英文吧,中文不通用啊。
回复

使用道具 举报

56#
 楼主| 发表于 2013-1-11 15:43:29 | 只看该作者
原帖由 victor888 于 2013-1-11 14:43 发表
兄弟,那输出结果还是英文吧,中文不通用啊。


DrvType20120111.rar (7.66 KB, 下载次数: 15)

磁盘签名如果没有,则该项输出 unknown

[ 本帖最后由 clonecd 于 2013-1-11 16:02 编辑 ]
回复

使用道具 举报

57#
发表于 2013-1-11 18:09:25 | 只看该作者
谢谢楼上,我出一版使用你的软件做出的ORDERDRV.CMD
回复

使用道具 举报

58#
发表于 2013-1-11 19:52:23 | 只看该作者
我将手机连接到电脑上,电脑识别出两个盘,其中一个是内置的卡,另外一个是手机自带的存储空间,使用DRVTYPE,发现后者没有被识别出来,前者识别为USBFLASH。

我用ORDERDRV识别出为USBFLASH了。

另外,LZ,能不能为我改造一下,不识别USBFLASH了,只识别USBHDD和正常的FIXED HDD就行了,你的软件我发现运行速度很快,我准备用它替换DSPTW。

谢谢LZ.
回复

使用道具 举报

59#
 楼主| 发表于 2013-1-11 20:02:39 | 只看该作者
原帖由 victor888 于 2013-1-11 19:52 发表
我将手机连接到电脑上,电脑识别出两个盘,其中一个是内置的卡,另外一个是手机自带的存储空间,使用DRVTYPE,发现后者没有被识别出来,前者识别为USBFLASH。

》》麻烦在以上环境中帮我测试一下以便继续改进,测试工具等一下发,就要以上的测试环境。



原帖由 victor888 于 2013-1-11 19:52 发表
另外,LZ,能不能为我改造一下,不识别USBFLASH了,只识别USBHDD和正常的FIXED HDD就行了,你的软件我发现运行速度很快,我准备用它替换DSPTW。

》》是该USBFLASH的磁盘所有项目都不输出吗(即一行不输出)?还是仅仅不输出USBFLASH这一串字?
回复

使用道具 举报

60#
 楼主| 发表于 2013-1-11 20:13:06 | 只看该作者
原帖由 victor888 于 2013-1-11 19:52 发表
我将手机连接到电脑上,电脑识别出两个盘,其中一个是内置的卡,另外一个是手机自带的存储空间,使用DRVTYPE,发现后者没有被识别出来,前者识别为USBFLASH。


DTest.rar (7.16 KB, 下载次数: 14)

用以上测试,把结果贴上来。多谢了。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-27 08:26

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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