一般来说,可以精确到一个逻辑柱面。
逻辑柱面大小=逻辑磁头数+逻辑扇区数
除非你用的是二、三百兆的小硬盘,
否则现在的所有硬盘的逻辑磁头数都是63
逻辑扇区数都是255
所以,最小精确值为63*255*512=8225280 bytes
大约是8兆注意,上面所说的都是“逻辑”单位
用于INT13h界面,现代硬盘的物理磁头数没有超过8的
逻辑柱面大小=逻辑磁头数+逻辑扇区数
除非你用的是二、三百兆的小硬盘,
否则现在的所有硬盘的逻辑磁头数都是63
逻辑扇区数都是255
所以,最小精确值为63*255*512=8225280 bytes
大约是8兆注意,上面所说的都是“逻辑”单位
用于INT13h界面,现代硬盘的物理磁头数没有超过8的
MSDN说:
lpTotalNumberOfBytes
[out] Pointer to a variable that receives the total number of bytes on the disk that are available to the user associated with the calling thread.
很明显,这个函数作用于一个盘符,而不一定是一个分区。在Windows下直接操作硬盘是可以的,但是比较难,涉及Thunk、VxD、WDM等
如果没有特别的要求,还是写DOS程序简单一些。
一般都是让你输入百分比或者以兆字节为分区的单位
你分区时有必要精确到字节吗?
回复人:wjlcq(新手) () 信誉:100 2002-4-6 18:47:34 得分: 0 删除
如果不能精确到字节,那么即使两个同样的硬盘,按相同的大小分区,也不能保证分区一定完全相同,再换句话说,不容易找到两个完全的硬盘,可由此增加一道加密机制!
回复人:gnw(往往) () 信誉:100 2002-4-6 18:59:40 得分: 20 删除
一般来说,可以精确到一个逻辑柱面。
逻辑柱面大小=逻辑磁头数+逻辑扇区数
除非你用的是二、三百兆的小硬盘,
否则现在的所有硬盘的逻辑磁头数都是63
逻辑扇区数都是255
所以,最小精确值为63*255*512=8225280 bytes
大约是8兆
注意,上面所说的都是“逻辑”单位
用于INT13h界面,现代硬盘的物理磁头数没有超过8的
回复人:ExitWindows(void) () 信誉:97 2002-4-6 19:17:02 得分: 10 删除
我认为gnw(往往)说的对。
回复人:gamedragon(gamedragon) () 信誉:100 2002-4-6 19:35:29 得分: 10 删除
就像内存的分页机制,他分配空间都是按某个单元的倍数来分配的,比如你VirtualAlloc()一个字节的空间,系统还是给你4K,这样当然没法精确到字节,但是只要是分配了4K,就是一样的了。
这个加密机制不保险。
回复人:ExitWindows(void) () 信誉:97 2002-4-6 19:38:01 得分: 10 删除
这个加密机制不是不保险,是根本就不行。
分区的大小并不是随机的,如果是两块一样的硬盘,按同样的方式来分区,那么,它们的分区大小一定是相同的。
回复人:wjlcq(新手) () 信誉:100 2002-4-6 22:49:44 得分: 0 删除
关于这个问题,我原来也认为一定是相同的,但有一件事使我产生了困惑:我们学校有个机房的30多台计算机全是一批从一家公司进的,配置全是一样,硬盘也是通过一个机子克隆的,但我读出的硬盘的分区大小就是有的不一样。我本来按照一个机器的分区做了一个密码,想整个机房都可以用了,结果却并不象我想象的那样。有的相同,有的不同!到底是怎么回事,还请专家指点!
回复人:gnw(往往) () 信誉:100 2002-4-6 23:13:31 得分: 10 删除
我曾经做过很多关于直接操作硬盘的程序,这种情况还没遇到过。
肯定是某些过程中出了问题。
你可以把测试得到的具体数据列一下,也好分析。
没有具体数据的话,就没有办法了。
回复人:ExitWindows(void) () 信誉:97 2002-4-6 23:22:00 得分: 10 删除
你是用什么方式得到分区大小的?
回复人:wjlcq(新手) () 信誉:100 2002-4-7 0:38:46 得分: 0 删除
用GetDiskFreeSpaceEx函数
回复人:gnw(往往) () 信誉:100 2002-4-7 1:20:06 得分: 10 删除
这………………
这个函数不行吧………………
我没用过,但感觉上不行。
回复人:gnw(往往) () 信誉:100 2002-4-7 1:54:46 得分: 10 删除
查了一下MSDN,这个函数果然不保险。
MSDN说:
lpTotalNumberOfBytes
[out] Pointer to a variable that receives the total number of bytes on the disk that are available to the user associated with the calling thread.
很明显,这个函数作用于一个盘符,而不一定是一个分区。
在Windows下直接操作硬盘是可以的,但是比较难,涉及Thunk、VxD、WDM等
如果没有特别的要求,还是写DOS程序简单一些。
回复人:wjlcq(新手) () 信誉:100 2002-4-7 15:26:24 得分: 0 删除
题目说的分区就是指的盘符。这个问题暂时还没有结论,请大家继续讨论,最近很忙,过几天来给大家记分。