zealsoft_zhu
驱动小牛
驱动小牛
  • 注册日期2004-03-30
  • 最后登录2014-07-30
  • 粉丝2
  • 关注0
  • 积分22分
  • 威望375点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分0分
阅读:1916回复:6

难道没有人知道怎么在windows2000下得到一个磁盘的大小?

楼主#
更多 发布于:2005-06-20 15:39
  xp和2003下可以用IOCTL_DISK_GET_LENGTH_INFO得到,这个命令在2000下没有用,IOCTL_DISK_GET_DRIVE_GEOMETRY_EX在2000下也没有用,IOCTL_DISK_GET_DRIVE_GEOMETRY有用,但是把柱面×磁道×扇区×扇区大小得到的结果和从IOCTL_DISK_GET_LENGTH_INFO得到的结果有那么一点点差异。不知道从2000下面怎么得到?从用户态和核心态都行,只要能得到磁盘的大小。就是一个PhysicalDrive的容量大小,而不是磁盘的一个分区的大小。谢谢了

最新喜欢:

LeopardLeopar...
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-06-20 18:08
我觉得不光是2000 同一个控制码 98 2000 XP好像都不太一样
---内核开发合作或提供基础技术服务QQ:22863668 ---
liuyan1
驱动老牛
驱动老牛
  • 注册日期2001-08-27
  • 最后登录2023-04-18
  • 粉丝0
  • 关注0
  • 积分1031分
  • 威望477点
  • 贡献值0点
  • 好评度187点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-06-23 22:17
用scsi  命令把,mode sense 命令0x2a得到的一定权威,而且各平台兼容,为啥要用微软的IOCTL呢。微软总爱搞些各个平台下的小动作,相信微软不如相信硬件。
楼上的客,楼下的客,听我老坎说明白,要苛屎有草纸,不要扯我的麦席子,要苛尿有夜壶,不要在床上划地图。
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-24 10:03
IOCTL_DISK_GET_PARTITION_INFO

PARTITION_INFORMATION.PartitionLength就是



DWORD GetDiskSize(LARGE_INTEGER &liSize)
{
       DWORD dwError = ERROR_SUCCESS;
      
       HANDLE handle = CreateFile(
              "\\\\.\\PHYSICALDRIVE0",
              GENERIC_READ,
              FILE_SHARE_READ | FILE_SHARE_WRITE,
              NULL,
              OPEN_EXISTING,
              0,
              NULL
              );
       if (handle == INVALID_HANDLE_VALUE)
       {
              dwError = GetLastError();
              return dwError;
       }
      
       DWORD dwBytesTaken;
       PARTITION_INFORMATION info;
       if (!DeviceIoControl(handle, IOCTL_DISK_GET_PARTITION_INFO, NULL, 0, &info, sizeof(info), &dwBytesTaken, NULL))
       {
              dwError = GetLastError();
              CloseHandle(handle);
              return dwError;
       }
      
       liSize.QuadPart = info.PartitionLength.QuadPart;
      
       CloseHandle(handle);
       return dwError;
}
ysr
ysr
驱动牛犊
驱动牛犊
  • 注册日期2001-05-11
  • 最后登录2015-01-29
  • 粉丝0
  • 关注0
  • 积分79分
  • 威望48点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-06-24 10:23
SCSIOP_READ_CAPACITY
wywwwl
驱动大牛
驱动大牛
  • 注册日期2002-08-16
  • 最后登录2018-04-07
  • 粉丝1
  • 关注0
  • 积分-10分
  • 威望135点
  • 贡献值6点
  • 好评度76点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2005-06-24 11:36
r3 下用 GetDiskFreeSpaceEx
琢磨悟真知
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2005-06-24 13:54
下面是引用ysr于2005-06-24 10:23发表的:
SCSIOP_READ_CAPACITY

同意,通过DEVICEIOCONTROL 发送SCSI命令到设备里得到容量肯定是与操作系统无关的。
---内核开发合作或提供基础技术服务QQ:22863668 ---
游客

返回顶部